@ -151,7 +151,6 @@ static int nb_streamid_map = 0;
static int frame_width = 0 ;
static int frame_height = 0 ;
static float frame_aspect_ratio = 0 ;
static int frame_aspect_ratio_override = 0 ;
static enum PixelFormat frame_pix_fmt = PIX_FMT_NONE ;
static int frame_bits_per_raw_sample = 0 ;
static enum AVSampleFormat audio_sample_fmt = AV_SAMPLE_FMT_NONE ;
@ -287,6 +286,8 @@ typedef struct AVOutputStream {
int resample_width ;
int resample_pix_fmt ;
float frame_aspect_ratio ;
/* full frame size of first frame */
int original_height ;
int original_width ;
@ -431,6 +432,8 @@ static int configure_video_filters(AVInputStream *ist, AVOutputStream *ost)
codec - > width = ost - > output_video_filter - > inputs [ 0 ] - > w ;
codec - > height = ost - > output_video_filter - > inputs [ 0 ] - > h ;
codec - > sample_aspect_ratio = ost - > st - > sample_aspect_ratio =
ost - > frame_aspect_ratio ? // overriden by the -aspect cli option
av_d2q ( ost - > frame_aspect_ratio * codec - > height / codec - > width , 255 ) :
ost - > output_video_filter - > inputs [ 0 ] - > sample_aspect_ratio ;
return 0 ;
@ -1696,7 +1699,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
break ;
case AVMEDIA_TYPE_VIDEO :
# if CONFIG_AVFILTER
if ( ost - > picref - > video )
if ( ost - > picref - > video & & ! ost - > frame_aspect_ratio )
ost - > st - > codec - > sample_aspect_ratio = ost - > picref - > video - > pixel_aspect ;
# endif
do_video_out ( os , ost , ist , & picture , & frame_size ) ;
@ -2243,6 +2246,13 @@ static int transcode(AVFormatContext **output_files,
codec - > width = icodec - > width ;
codec - > height = icodec - > height ;
codec - > has_b_frames = icodec - > has_b_frames ;
if ( ! codec - > sample_aspect_ratio . num ) {
codec - > sample_aspect_ratio =
ost - > st - > sample_aspect_ratio =
ist - > st - > sample_aspect_ratio . num ? ist - > st - > sample_aspect_ratio :
ist - > st - > codec - > sample_aspect_ratio . num ?
ist - > st - > codec - > sample_aspect_ratio : ( AVRational ) { 0 , 1 } ;
}
break ;
case AVMEDIA_TYPE_SUBTITLE :
codec - > width = icodec - > width ;
@ -2904,7 +2914,6 @@ static void opt_frame_aspect_ratio(const char *arg)
ffmpeg_exit ( 1 ) ;
}
frame_aspect_ratio = ar ;
frame_aspect_ratio_override = 1 ;
}
static int opt_metadata ( const char * opt , const char * arg )
@ -3342,12 +3351,6 @@ static void opt_input_file(const char *filename)
set_context_opts ( dec , avcodec_opts [ AVMEDIA_TYPE_VIDEO ] , AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM , input_codecs [ nb_input_codecs - 1 ] ) ;
frame_height = dec - > height ;
frame_width = dec - > width ;
if ( ic - > streams [ i ] - > sample_aspect_ratio . num )
frame_aspect_ratio = av_q2d ( ic - > streams [ i ] - > sample_aspect_ratio ) ;
else
frame_aspect_ratio = av_q2d ( dec - > sample_aspect_ratio ) ;
frame_aspect_ratio * = ( float ) dec - > width / dec - > height ;
frame_aspect_ratio_override = 0 ;
frame_pix_fmt = dec - > pix_fmt ;
rfps = ic - > streams [ i ] - > r_frame_rate . num ;
rfps_base = ic - > streams [ i ] - > r_frame_rate . den ;
@ -3452,7 +3455,6 @@ static void new_video_stream(AVFormatContext *oc, int file_idx)
AVCodecContext * video_enc ;
enum CodecID codec_id = CODEC_ID_NONE ;
AVCodec * codec = NULL ;
int i ;
st = av_new_stream ( oc , oc - > nb_streams < nb_streamid_map ? streamid_map [ oc - > nb_streams ] : 0 ) ;
if ( ! st ) {
@ -3472,15 +3474,9 @@ static void new_video_stream(AVFormatContext *oc, int file_idx)
codec_id = av_guess_codec ( oc - > oformat , NULL , oc - > filename , NULL , AVMEDIA_TYPE_VIDEO ) ;
codec = avcodec_find_encoder ( codec_id ) ;
}
ost - > frame_aspect_ratio = frame_aspect_ratio ;
frame_aspect_ratio = 0 ;
# if CONFIG_AVFILTER
if ( frame_aspect_ratio_override ) {
i = vfilters ? strlen ( vfilters ) : 0 ;
vfilters = av_realloc ( vfilters , i + 100 ) ;
snprintf ( vfilters + i , 100 , " %csetdar=%f \n " , i ? ' , ' : ' ' , frame_aspect_ratio ) ;
frame_aspect_ratio = 0 ;
frame_aspect_ratio_override = 0 ;
}
ost - > avfilter = vfilters ;
vfilters = NULL ;
# endif
@ -3527,7 +3523,6 @@ static void new_video_stream(AVFormatContext *oc, int file_idx)
video_enc - > width = frame_width ;
video_enc - > height = frame_height ;
video_enc - > sample_aspect_ratio = av_d2q ( frame_aspect_ratio * video_enc - > height / video_enc - > width , 255 ) ;
video_enc - > pix_fmt = frame_pix_fmt ;
video_enc - > bits_per_raw_sample = frame_bits_per_raw_sample ;
st - > sample_aspect_ratio = video_enc - > sample_aspect_ratio ;