summaryrefslogtreecommitdiff
authorKe 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)
commitfda3625ec15c54885fd6f42aa658c2d52a6842c6 (patch)
treeac22335a7cc7b3f9709389fd48494b4534d7e000
parentcaa77f9b419655b05fdfdfaff61beb56f424f81b (diff)
downloadlibzvbi-fda3625ec15c54885fd6f42aa658c2d52a6842c6.zip
libzvbi-fda3625ec15c54885fd6f42aa658c2d52a6842c6.tar.gz
libzvbi-fda3625ec15c54885fd6f42aa658c2d52a6842c6.tar.bz2
update display when window is visible
Change-Id: Ie089f42c9ad431ac96adada152e23b3c2723bd2c
Diffstat
-rw-r--r--src/dtvcc.c59
-rw-r--r--src/dtvcc.h2
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;