From d2bea3802e14994297b6d28e3093d1a667de2ef3 Mon Sep 17 00:00:00 2001 From: Amey Jain Date: Mon, 20 Mar 2017 14:03:41 +0530 Subject: [PATCH] In ref. to issue 699. 20 ms timing mis-match. modified: src/lib_ccx/general_loop.c modified: src/lib_ccx/telxcc.c --- src/lib_ccx/general_loop.c | 8 +++++--- src/lib_ccx/telxcc.c | 7 ++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/lib_ccx/general_loop.c b/src/lib_ccx/general_loop.c index f77e162b..527591f1 100644 --- a/src/lib_ccx/general_loop.c +++ b/src/lib_ccx/general_loop.c @@ -1102,7 +1102,7 @@ int rcwt_loop(struct lib_ccx_ctx *ctx) int caps = 0; LLONG result; struct encoder_ctx *enc_ctx = update_encoder_list(ctx); - + struct Teletext *telctx; // As BUFSIZE is a macro this is just a reminder if (BUFSIZE < (3*0xFFFF + 10)) fatal (CCX_COMMON_EXIT_BUG_BUG, "BUFSIZE too small for RCWT caption block.\n"); @@ -1143,6 +1143,7 @@ int rcwt_loop(struct lib_ccx_ctx *ctx) dec_ctx->private_data = telxcc_init(); } dec_sub = &dec_ctx->dec_sub; + telctx =dec_ctx->private_data; /* Set minimum and current pts since rcwt has correct time */ dec_ctx->timing->min_pts = 0; @@ -1155,9 +1156,10 @@ int rcwt_loop(struct lib_ccx_ctx *ctx) { result = buffered_read(ctx->demux_ctx, buf, TELETEXT_CHUNK_LEN); ctx->demux_ctx->past += result; - if (result != TELETEXT_CHUNK_LEN) + if (result != TELETEXT_CHUNK_LEN){ + telxcc_dump_prev_page(telctx,dec_sub); break; - + } tlt_read_rcwt(dec_ctx->private_data, buf, dec_sub); if(dec_sub->got_output == CCX_TRUE) { diff --git a/src/lib_ccx/telxcc.c b/src/lib_ccx/telxcc.c index 9f3b979e..85414787 100644 --- a/src/lib_ccx/telxcc.c +++ b/src/lib_ccx/telxcc.c @@ -1002,18 +1002,19 @@ void process_telx_packet(struct TeletextCtx *ctx, data_unit_t data_unit_id, tele ctx->transmission_mode = (transmission_mode_t) (unham_8_4(packet->data[7]) & 0x01); // FIXME: Well, this is not ETS 300 706 kosher, however we are interested in DATA_UNIT_EBU_TELETEXT_SUBTITLE only - if ((ctx->transmission_mode == TRANSMISSION_MODE_PARALLEL) && (data_unit_id != DATA_UNIT_EBU_TELETEXT_SUBTITLE)) return; + if ((ctx->transmission_mode == TRANSMISSION_MODE_PARALLEL) && (data_unit_id != DATA_UNIT_EBU_TELETEXT_SUBTITLE)/* && (ctx->page_buffer.tainted == NO)*/) return; if ((ctx->receiving_data == YES) && ( ((ctx->transmission_mode == TRANSMISSION_MODE_SERIAL) && (PAGE(page_number) != PAGE(tlt_config.page))) || ((ctx->transmission_mode == TRANSMISSION_MODE_PARALLEL) && (PAGE(page_number) != PAGE(tlt_config.page)) && (m == MAGAZINE(tlt_config.page))))) { ctx->receiving_data = NO; - return; + if(ctx->page_buffer.tainted == NO) + return; } // Page transmission is terminated, however now we are waiting for our new page - if (page_number != tlt_config.page) + if (page_number != tlt_config.page && ctx->page_buffer.tainted == NO) return;