@ -2284,6 +2284,7 @@ static int transcode(AVFormatContext **output_files,
ost = ost_table [ i ] ;
if ( ost - > encoding_needed ) {
AVCodec * codec = i < nb_output_codecs ? output_codecs [ i ] : NULL ;
AVCodecContext * dec = ist_table [ ost - > source_index ] - > st - > codec ;
if ( ! codec )
codec = avcodec_find_encoder ( ost - > st - > codec - > codec_id ) ;
if ( ! codec ) {
@ -2292,6 +2293,15 @@ static int transcode(AVFormatContext **output_files,
ret = AVERROR ( EINVAL ) ;
goto dump_format ;
}
if ( dec - > subtitle_header ) {
ost - > st - > codec - > subtitle_header = av_malloc ( dec - > subtitle_header_size ) ;
if ( ! ost - > st - > codec - > subtitle_header ) {
ret = AVERROR ( ENOMEM ) ;
goto dump_format ;
}
memcpy ( ost - > st - > codec - > subtitle_header , dec - > subtitle_header , dec - > subtitle_header_size ) ;
ost - > st - > codec - > subtitle_header_size = dec - > subtitle_header_size ;
}
if ( avcodec_open ( ost - > st - > codec , codec ) < 0 ) {
snprintf ( error , sizeof ( error ) , " Error while opening encoder for output stream #%d.%d - maybe incorrect parameters such as bit_rate, rate, width or height " ,
ost - > file_index , ost - > index ) ;
@ -2690,6 +2700,7 @@ static int transcode(AVFormatContext **output_files,
}
av_fifo_free ( ost - > fifo ) ; /* works even if fifo is not
initialized but set to zero */
av_freep ( & ost - > st - > codec - > subtitle_header ) ;
av_free ( ost - > pict_tmp . data [ 0 ] ) ;
av_free ( ost - > forced_kf_pts ) ;
if ( ost - > video_resample )