From cc61d52f020f55287ceff2d657bf07b385db9d47 Mon Sep 17 00:00:00 2001 From: Naveen Saini Date: Thu, 12 Jul 2018 23:23:26 +0530 Subject: [PATCH 1/3] add code to copy window data before CW command --- src/lib_ccx/ccx_decoders_708.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/lib_ccx/ccx_decoders_708.c b/src/lib_ccx/ccx_decoders_708.c index fcb6553ec..6ee76f76e 100644 --- a/src/lib_ccx/ccx_decoders_708.c +++ b/src/lib_ccx/ccx_decoders_708.c @@ -748,9 +748,11 @@ void dtvcc_handle_CWx_SetCurrentWindow(ccx_dtvcc_service_decoder *decoder, int w "window [%d] is not defined\n", window_id); } -void dtvcc_handle_CLW_ClearWindows(ccx_dtvcc_service_decoder *decoder, int windows_bitmap) +void dtvcc_handle_CLW_ClearWindows(ccx_dtvcc_ctx *dtvcc,ccx_dtvcc_service_decoder *decoder, int windows_bitmap) { ccx_common_logging.debug_ftn(CCX_DMT_708, "[CEA-708] dtvcc_handle_CLW_ClearWindows: windows: "); + int screen_content_changed = 0, + window_had_content; if (windows_bitmap == 0) ccx_common_logging.debug_ftn(CCX_DMT_708, "none\n"); else @@ -760,12 +762,22 @@ void dtvcc_handle_CLW_ClearWindows(ccx_dtvcc_service_decoder *decoder, int windo if (windows_bitmap & 1) { ccx_common_logging.debug_ftn(CCX_DMT_708, "[W%d] ", i); + window_had_content = window->is_defined && window->visible && !window->is_empty; + if (window_had_content) + { + screen_content_changed = 1; + _dtvcc_window_update_time_hide(window, dtvcc->timing); + _dtvcc_window_copy_to_screen(decoder, &decoder->windows[i]); + } _dtvcc_window_clear(decoder, i); } windows_bitmap >>= 1; } } ccx_common_logging.debug_ftn(CCX_DMT_708, "\n"); + if (screen_content_changed && !_dtvcc_decoder_has_visible_windows(decoder)) + _dtvcc_screen_print(dtvcc, decoder); + } void dtvcc_handle_DSW_DisplayWindows(ccx_dtvcc_service_decoder *decoder, int windows_bitmap, struct ccx_common_timing_ctx *timing) @@ -1402,7 +1414,7 @@ int _dtvcc_handle_C1(ccx_dtvcc_ctx *dtvcc, dtvcc_handle_CWx_SetCurrentWindow(decoder, com.code - CCX_DTVCC_C1_CW0); /* Window 0 to 7 */ break; case CCX_DTVCC_C1_CLW: - dtvcc_handle_CLW_ClearWindows(decoder, data[1]); + dtvcc_handle_CLW_ClearWindows(dtvcc,decoder, data[1]); break; case CCX_DTVCC_C1_DSW: dtvcc_handle_DSW_DisplayWindows(decoder, data[1], dtvcc->timing); From ec88dbebfc8bf0fe94d76fac59661bbb689bdd36 Mon Sep 17 00:00:00 2001 From: Naveen Saini Date: Thu, 12 Jul 2018 23:48:29 +0530 Subject: [PATCH 2/3] Update ccx_decoders_708.c --- src/lib_ccx/ccx_decoders_708.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib_ccx/ccx_decoders_708.c b/src/lib_ccx/ccx_decoders_708.c index 6ee76f76e..992f3eb12 100644 --- a/src/lib_ccx/ccx_decoders_708.c +++ b/src/lib_ccx/ccx_decoders_708.c @@ -761,12 +761,13 @@ void dtvcc_handle_CLW_ClearWindows(ccx_dtvcc_ctx *dtvcc,ccx_dtvcc_service_decode { if (windows_bitmap & 1) { + ccx_common_logging.debug_ftn(CCX_DMT_708, "[W%d] ", i); - window_had_content = window->is_defined && window->visible && !window->is_empty; + window_had_content = &decoder->windows[i]->is_defined && &decoder->windows[i]->visible && !&decoder->windows[i]->is_empty; if (window_had_content) { screen_content_changed = 1; - _dtvcc_window_update_time_hide(window, dtvcc->timing); + _dtvcc_window_update_time_hide(&decoder->windows[i], dtvcc->timing); _dtvcc_window_copy_to_screen(decoder, &decoder->windows[i]); } _dtvcc_window_clear(decoder, i); From 9d76728d3e0b215c1551f88c69a77c744f4d3195 Mon Sep 17 00:00:00 2001 From: Naveen Saini Date: Fri, 13 Jul 2018 00:06:31 +0530 Subject: [PATCH 3/3] Update ccx_decoders_708.c --- src/lib_ccx/ccx_decoders_708.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib_ccx/ccx_decoders_708.c b/src/lib_ccx/ccx_decoders_708.c index 992f3eb12..fd8fc10f8 100644 --- a/src/lib_ccx/ccx_decoders_708.c +++ b/src/lib_ccx/ccx_decoders_708.c @@ -761,9 +761,9 @@ void dtvcc_handle_CLW_ClearWindows(ccx_dtvcc_ctx *dtvcc,ccx_dtvcc_service_decode { if (windows_bitmap & 1) { - + ccx_dtvcc_window *window = &decoder->windows[i]; ccx_common_logging.debug_ftn(CCX_DMT_708, "[W%d] ", i); - window_had_content = &decoder->windows[i]->is_defined && &decoder->windows[i]->visible && !&decoder->windows[i]->is_empty; + window_had_content = window->is_defined && window->visible && !window->is_empty; if (window_had_content) { screen_content_changed = 1; @@ -776,7 +776,7 @@ void dtvcc_handle_CLW_ClearWindows(ccx_dtvcc_ctx *dtvcc,ccx_dtvcc_service_decode } } ccx_common_logging.debug_ftn(CCX_DMT_708, "\n"); - if (screen_content_changed && !_dtvcc_decoder_has_visible_windows(decoder)) + if (screen_content_changed ) _dtvcc_screen_print(dtvcc, decoder); }