summaryrefslogtreecommitdiff
Diffstat
-rw-r--r--Android.mk4
-rwxr-xr-xntsc_decode/am_vbi.c26
-rw-r--r--src/caption.c656
-rw-r--r--src/cc.h15
-rw-r--r--src/dtvcc.c893
-rw-r--r--src/dtvcc.h45
-rwxr-xr-x[-rw-r--r--]src/event.h26
-rw-r--r--src/exp-gfx.c65
-rwxr-xr-x[-rw-r--r--]src/libzvbi.h20
-rwxr-xr-x[-rw-r--r--]src/vbi.c2
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