|
|
@@ -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; |
|
|
|