@ -209,17 +209,29 @@ static void sub2video_update(InputStream *ist, AVSubtitle *sub)
AVFilterBufferRef * ref = ist - > sub2video . ref ;
int8_t * dst ;
int dst_linesize ;
int i ;
int64_t pts = av_rescale_q ( sub - > pts , AV_TIME_BASE_Q , ist - > st - > time_base ) ;
int num_rects , i ;
int64_t pts , end_pts ;
if ( ! ref )
return ;
if ( sub ) {
pts = av_rescale_q ( sub - > pts + sub - > start_display_time * 1000 ,
AV_TIME_BASE_Q , ist - > st - > time_base ) ;
end_pts = av_rescale_q ( sub - > pts + sub - > end_display_time * 1000 ,
AV_TIME_BASE_Q , ist - > st - > time_base ) ;
num_rects = sub - > num_rects ;
} else {
pts = ist - > sub2video . end_pts ;
end_pts = INT64_MAX ;
num_rects = 0 ;
}
dst = ref - > data [ 0 ] ;
dst_linesize = ref - > linesize [ 0 ] ;
memset ( dst , 0 , h * dst_linesize ) ;
for ( i = 0 ; i < sub - > num_rects ; i + + )
for ( i = 0 ; i < num_rects ; i + + )
sub2video_copy_rect ( dst , dst_linesize , w , h , sub - > rects [ i ] ) ;
sub2video_push_ref ( ist , pts ) ;
ist - > sub2video . end_pts = end_pts ;
}
static void sub2video_heartbeat ( InputStream * ist , int64_t pts )
@ -242,6 +254,8 @@ static void sub2video_heartbeat(InputStream *ist, int64_t pts)
/* do not send the heartbeat frame if the subtitle is already ahead */
if ( pts2 < = ist2 - > sub2video . last_pts )
continue ;
if ( pts2 > = ist2 - > sub2video . end_pts )
sub2video_update ( ist2 , NULL ) ;
for ( j = 0 , nb_reqs = 0 ; j < ist2 - > nb_filters ; j + + )
nb_reqs + = av_buffersrc_get_nb_failed_requests ( ist2 - > filters [ j ] - > filter ) ;
if ( nb_reqs )