author | Ke Gong <ke.gong@amlogic.com> | 2017-04-28 03:28:11 (GMT) |
---|---|---|
committer | Ke Gong <ke.gong@amlogic.com> | 2017-04-28 03:28:11 (GMT) |
commit | fda3625ec15c54885fd6f42aa658c2d52a6842c6 (patch) | |
tree | ac22335a7cc7b3f9709389fd48494b4534d7e000 | |
parent | caa77f9b419655b05fdfdfaff61beb56f424f81b (diff) | |
download | libzvbi-fda3625ec15c54885fd6f42aa658c2d52a6842c6.zip libzvbi-fda3625ec15c54885fd6f42aa658c2d52a6842c6.tar.gz libzvbi-fda3625ec15c54885fd6f42aa658c2d52a6842c6.tar.bz2 |
update display when window is visible
Change-Id: Ie089f42c9ad431ac96adada152e23b3c2723bd2c
-rw-r--r-- | src/dtvcc.c | 59 | ||||
-rw-r--r-- | src/dtvcc.h | 2 |
2 files changed, 10 insertions, 51 deletions
diff --git a/src/dtvcc.c b/src/dtvcc.c index add7a54..8403bdf 100644 --- a/src/dtvcc.c +++ b/src/dtvcc.c @@ -2262,50 +2262,6 @@ dtvcc_event(struct dtvcc_decoder *dc, struct dtvcc_service *ds) { vbi_event event; struct tvcc_decoder *td = PARENT(dc, struct tvcc_decoder, dtvcc); - struct dtvcc_window *win[8]; - int i, cnt; - - cnt = 8; - dtvcc_get_visible_windows(ds, &cnt, win); - - if (cnt != ds->old_win_cnt) - goto changed; - - for (i = 0; i < cnt; i ++) { - struct dtvcc_window *w1 = win[i]; - struct dtvcc_window *w2 = &ds->old_window[i]; - - if (memcmp(w1->buffer, w2->buffer, sizeof(w1->buffer))) { - goto changed; - } - - if (memcmp(&w1->style, &w2->style, sizeof(w1->style))) { - goto changed; - } - - if (memcmp(&w1->curr_pen, &w2->curr_pen, sizeof(w1->curr_pen))) { - goto changed; - } - - if (w1->row_count != w2->row_count) { - goto changed; - } - - if (w1->column_count != w2->column_count) { - goto changed; - } - - if (w1->visible != w2->visible) { - goto changed; - } - } - - return; -changed: - for (i = 0; i < cnt; i ++) { - ds->old_window[i] = *win[i]; - } - ds->old_win_cnt = cnt; event.type = VBI_EVENT_CAPTION; event.ev.caption.pgno = ds - dc->service + 1 + 8/*after 8 cc channels*/; @@ -2488,7 +2444,8 @@ dtvcc_put_char (struct dtvcc_decoder * dc, dw->curr_row = row; dw->curr_column = column; - dtvcc_render(dc, ds); + if (dw->visible) + dtvcc_render(dc, ds); return TRUE; } @@ -2677,6 +2634,9 @@ dtvcc_clear_windows (struct dtvcc_decoder * dc, dw->streamed = 0; + if(dw->visible) + dtvcc_render(dc, ds); + /* FIXME CEA 708-C Section 7.1.4 (Form Feed) and 8.10.5.3 confuse me. */ if (0) { @@ -2685,8 +2645,6 @@ dtvcc_clear_windows (struct dtvcc_decoder * dc, } } - dtvcc_render(dc, ds); - return TRUE; } @@ -2905,6 +2863,8 @@ dtvcc_display_windows (struct dtvcc_decoder * dc, } } + dtvcc_render(dc, ds); + return TRUE; } @@ -3138,6 +3098,9 @@ dtvcc_delete_windows (struct dtvcc_decoder * dc, if (ds->curr_window == dw) ds->curr_window = NULL; + if (dw->visible) + dtvcc_render(dc, ds); + dw->visible = 0; memset(dw->buffer, 0, sizeof(dw->buffer)); } @@ -3145,8 +3108,6 @@ dtvcc_delete_windows (struct dtvcc_decoder * dc, ds->created &= ~window_map; - dtvcc_render(dc, ds); - return TRUE; } diff --git a/src/dtvcc.h b/src/dtvcc.h index 88f22e6..2557a36 100644 --- a/src/dtvcc.h +++ b/src/dtvcc.h @@ -381,8 +381,6 @@ struct dtvcc_service { /* Interpretation Layer. */ struct dtvcc_window window[8]; - struct dtvcc_window old_window[8]; - int old_win_cnt; int update; struct dtvcc_window * curr_window; |