|
|
|
@ -123,7 +123,7 @@ typedef struct CCaptionSubContext { |
|
|
|
|
uint8_t cursor_color; |
|
|
|
|
uint8_t cursor_font; |
|
|
|
|
AVBPrint buffer; |
|
|
|
|
int screen_changed; |
|
|
|
|
int buffer_changed; |
|
|
|
|
int rollup; |
|
|
|
|
enum cc_mode mode; |
|
|
|
|
int64_t start_time; |
|
|
|
@ -365,7 +365,7 @@ static void handle_edm(CCaptionSubContext *ctx, int64_t pts) |
|
|
|
|
|
|
|
|
|
reap_screen(ctx, pts); |
|
|
|
|
screen->row_used = 0; |
|
|
|
|
ctx->screen_changed = 1; |
|
|
|
|
ctx->buffer_changed = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void handle_eoc(CCaptionSubContext *ctx, int64_t pts) |
|
|
|
@ -458,7 +458,7 @@ static void process_cc608(CCaptionSubContext *ctx, int64_t pts, uint8_t hi, uint |
|
|
|
|
ff_dlog(ctx, "carriage return\n"); |
|
|
|
|
reap_screen(ctx, pts); |
|
|
|
|
roll_up(ctx); |
|
|
|
|
ctx->screen_changed = 1; |
|
|
|
|
ctx->buffer_changed = 1; |
|
|
|
|
ctx->cursor_column = 0; |
|
|
|
|
break; |
|
|
|
|
case 0x2f: |
|
|
|
@ -512,7 +512,7 @@ static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avp |
|
|
|
|
continue; |
|
|
|
|
else |
|
|
|
|
process_cc608(ctx, avpkt->pts, *(bptr + i + 1) & 0x7f, *(bptr + i + 2) & 0x7f); |
|
|
|
|
if (ctx->screen_changed && *ctx->buffer.str) |
|
|
|
|
if (ctx->buffer_changed && *ctx->buffer.str) |
|
|
|
|
{ |
|
|
|
|
int start_time = av_rescale_q(ctx->start_time, avctx->time_base, ass_tb); |
|
|
|
|
int end_time = av_rescale_q(ctx->end_time, avctx->time_base, ass_tb); |
|
|
|
@ -521,7 +521,7 @@ static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avp |
|
|
|
|
if (ret < 0) |
|
|
|
|
return ret; |
|
|
|
|
sub->pts = av_rescale_q(ctx->start_time, avctx->time_base, AV_TIME_BASE_Q); |
|
|
|
|
ctx->screen_changed = 0; |
|
|
|
|
ctx->buffer_changed = 0; |
|
|
|
|
av_bprint_clear(&ctx->buffer); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|