@ -30,7 +30,7 @@
# define UNSET_FLAG(var, val) ( (var) &= ~( 1 << (val)) )
# define CHECK_FLAG(var, val) ( (var) & ( 1 << (val)) )
static const AVRational as s_tb = { 1 , 100 } ;
static const AVRational m s_tb = { 1 , 10 00 } ;
/*
* TODO list
@ -723,6 +723,7 @@ static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avp
{
CCaptionSubContext * ctx = avctx - > priv_data ;
AVSubtitle * sub = data ;
const int64_t start_time = sub - > pts ;
uint8_t * bptr = NULL ;
int len = avpkt - > size ;
int ret = 0 ;
@ -747,7 +748,7 @@ static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avp
if ( cc_type = = 1 )
continue ;
else
process_cc608 ( ctx , avpkt - > pts , * ( bptr + i + 1 ) & 0x7f , * ( bptr + i + 2 ) & 0x7f ) ;
process_cc608 ( ctx , start_time , * ( bptr + i + 1 ) & 0x7f , * ( bptr + i + 2 ) & 0x7f ) ;
if ( ! ctx - > buffer_changed )
continue ;
@ -759,21 +760,21 @@ static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avp
ret = ff_ass_add_rect ( sub , ctx - > buffer . str , ctx - > readorder + + , 0 , NULL , NULL ) ;
if ( ret < 0 )
return ret ;
sub - > pts = av_rescale_q ( ctx - > start_time , avctx - > time_base , AV_TIME_BASE_Q ) ;
sub - > pts = ctx - > start_time ;
if ( ! ctx - > real_time )
sub - > end_display_time = av_rescale_q ( ctx - > end_time - ctx - > start_time ,
avctx - > time_base , av_make_q ( 1 , 1000 ) ) ;
AV_TIME_BASE_Q , ms_tb ) ;
else
sub - > end_display_time = - 1 ;
ctx - > buffer_changed = 0 ;
ctx - > last_real_time = avpkt - > pts ;
ctx - > last_real_time = sub - > pts ;
ctx - > screen_touched = 0 ;
}
}
if ( ctx - > real_time & & ctx - > screen_touched & &
avpkt - > pts > ctx - > last_real_time + av_rescale_q ( 20 , ass_tb , avctx - > time_base ) ) {
ctx - > last_real_time = avpkt - > pts ;
sub - > pts > ctx - > last_real_time + av_rescale_q ( 200 , ms_tb , AV_TIME_BASE_Q ) ) {
ctx - > last_real_time = sub - > pts ;
ctx - > screen_touched = 0 ;
capture_screen ( ctx ) ;