-rw-r--r-- | Android.mk | 4 | ||||
-rwxr-xr-x | ntsc_decode/am_vbi.c | 26 | ||||
-rw-r--r-- | src/caption.c | 656 | ||||
-rw-r--r-- | src/cc.h | 15 | ||||
-rw-r--r-- | src/dtvcc.c | 893 | ||||
-rw-r--r-- | src/dtvcc.h | 45 | ||||
-rwxr-xr-x[-rw-r--r--] | src/event.h | 26 | ||||
-rw-r--r-- | src/exp-gfx.c | 65 | ||||
-rwxr-xr-x[-rw-r--r--] | src/libzvbi.h | 20 | ||||
-rwxr-xr-x[-rw-r--r--] | src/vbi.c | 2 |
10 files changed, 1393 insertions, 359 deletions
diff --git a/src/dtvcc.h b/src/dtvcc.h index 24f4f58..32a7a7a 100644 --- a/src/dtvcc.h +++ b/src/dtvcc.h @@ -40,6 +40,12 @@ enum cc_mode { CC_MODE_TEXT }; +enum cc_effect_status { + CC_EFFECT_NONE, + CC_EFFECT_DISPLAY, + CC_EFFECT_HIDE +}; + /* EIA 608-B Section 4.1. */ #define VBI_CAPTION_CC1 1 /* primary synchronous caption service (F1) */ #define VBI_CAPTION_CC2 2 /* special non-synchronous use captions (F1) */ @@ -308,6 +314,8 @@ struct dtvcc_pen_style { enum opacity bg_opacity; dtvcc_color edge_color; + vbi_bool fg_flash; + vbi_bool bg_flash; }; struct dtvcc_pen { @@ -327,6 +335,7 @@ struct dtvcc_window_style { dtvcc_color fill_color; enum opacity fill_opacity; + vbi_bool window_flash; enum edge border_type; dtvcc_color border_color; @@ -336,6 +345,8 @@ struct dtvcc_window { /* EIA 708-C window state. */ uint16_t buffer[16][42]; + struct dtvcc_pen_style pen[16][42]; + int row_start[16]; vbi_bool visible; @@ -352,6 +363,7 @@ struct dtvcc_window { vbi_bool row_lock; vbi_bool column_lock; + unsigned int column_no_lock_length; unsigned int curr_row; unsigned int curr_column; @@ -360,6 +372,12 @@ struct dtvcc_window { struct dtvcc_window_style style; + /* Used for fade and swipe */ + struct timespec effect_timer; + /* 0~100 */ + int effect_percent; + enum cc_effect_status effect_status; + /* Our stuff. */ /** @@ -379,8 +397,13 @@ struct dtvcc_window { struct dtvcc_service { /* Interpretation Layer. */ + int id; struct dtvcc_window window[8]; + struct dtvcc_window old_window[8]; + + int old_win_cnt; + int update; struct dtvcc_window * curr_window; @@ -393,6 +416,14 @@ struct dtvcc_service { uint8_t service_data[128]; unsigned int service_data_in; + /* For 0x8D 0x8E delay command + * if delay flag is set, decoder stop decoding + */ + struct timespec delay_timer; + + + int delay; + int delay_cancel; /** The time when we last received data for this service. */ struct cc_timestamp timestamp; @@ -413,6 +444,8 @@ struct dtvcc_decoder { /** The time when we last received data. */ struct cc_timestamp timestamp; + + int flash_state; }; /* ATSC A/53 Part 4:2007 Closed Caption Data decoder. */ @@ -473,6 +506,7 @@ struct tvcc_decoder { struct cc_decoder cc; struct dtvcc_decoder dtvcc; }; +unsigned int dtvcc_unicode (unsigned int c); extern void tvcc_init(struct tvcc_decoder *td); @@ -482,7 +516,7 @@ extern void tvcc_reset(struct tvcc_decoder *td); extern void tvcc_destroy(struct tvcc_decoder *td); -extern void tvcc_fetch_page(struct tvcc_decoder *td, int pgno, int *sub_cnt, struct vbi_page *sub_pages); +extern void tvcc_fetch_page(struct tvcc_decoder *td, int pgno, int *cnt, struct vbi_page *sub_pages); static void dtvcc_init(struct dtvcc_decoder * dc); @@ -496,5 +530,14 @@ extern vbi_bool cc_feed(struct cc_decoder *cd, const uint8_t buffer[2], unsigned extern void cc_reset(struct cc_decoder *cd); +extern void vbi_decode_caption(vbi_decoder *vbi, int line, const uint8_t *buf); + +extern int get_input_offset(); + +extern void update_service_status(struct tvcc_decoder *td); +static vbi_bool dtvcc_carriage_return (struct dtvcc_decoder *dc, struct dtvcc_service * ds); + + + #endif |