@ -220,13 +220,18 @@ static void sub2video_push_ref(InputStream *ist, int64_t pts)
{
AVFrame * frame = ist - > sub2video . frame ;
int i ;
int ret ;
av_assert1 ( frame - > data [ 0 ] ) ;
ist - > sub2video . last_pts = frame - > pts = pts ;
for ( i = 0 ; i < ist - > nb_filters ; i + + )
av_buffersrc_add_frame_flags ( ist - > filters [ i ] - > filter , frame ,
AV_BUFFERSRC_FLAG_KEEP_REF |
AV_BUFFERSRC_FLAG_PUSH ) ;
for ( i = 0 ; i < ist - > nb_filters ; i + + ) {
ret = av_buffersrc_add_frame_flags ( ist - > filters [ i ] - > filter , frame ,
AV_BUFFERSRC_FLAG_KEEP_REF |
AV_BUFFERSRC_FLAG_PUSH ) ;
if ( ret ! = AVERROR_EOF & & ret < 0 )
av_log ( NULL , AV_LOG_WARNING , " Error while add the frame to buffer source(%s). \n " ,
av_err2str ( ret ) ) ;
}
}
void sub2video_update ( InputStream * ist , AVSubtitle * sub )
@ -295,11 +300,15 @@ static void sub2video_heartbeat(InputStream *ist, int64_t pts)
static void sub2video_flush ( InputStream * ist )
{
int i ;
int ret ;
if ( ist - > sub2video . end_pts < INT64_MAX )
sub2video_update ( ist , NULL ) ;
for ( i = 0 ; i < ist - > nb_filters ; i + + )
av_buffersrc_add_frame ( ist - > filters [ i ] - > filter , NULL ) ;
for ( i = 0 ; i < ist - > nb_filters ; i + + ) {
ret = av_buffersrc_add_frame ( ist - > filters [ i ] - > filter , NULL ) ;
if ( ret ! = AVERROR_EOF & & ret < 0 )
av_log ( NULL , AV_LOG_WARNING , " Flush the frame error. \n " ) ;
}
}
/* end of sub2video hack */
@ -327,13 +336,14 @@ static int main_return_code = 0;
static void
sigterm_handler ( int sig )
{
int ret ;
received_sigterm = sig ;
received_nb_signals + + ;
term_exit_sigsafe ( ) ;
if ( received_nb_signals > 3 ) {
write ( 2 /*STDERR_FILENO*/ , " Received > 3 system signals, hard exiting \n " ,
strlen ( " Received > 3 system signals, hard exiting \n " ) ) ;
ret = write ( 2 /*STDERR_FILENO*/ , " Received > 3 system signals, hard exiting \n " ,
strlen ( " Received > 3 system signals, hard exiting \n " ) ) ;
if ( ret < 0 ) { /* Do nothing */ } ;
exit ( 123 ) ;
}
}