On Mon, Jul 15, 2019 at 06:38:35PM +0800, Linjie Fu wrote: > Currently, ffmpeg inserts scale filter by default in the filter graph > to force the whole decoded stream to scale into the same size with the > first frame. It's not quite make sense in resolution changing cases if > user wants the rawvideo without any scale. > > Using autoscale/noautoscale to indicate whether auto inserting the scale > filter in the filter graph: > -noautoscale or -autoscale 0: > disable the default auto scale filter inserting. > > Signed-off-by: Linjie Fu <linjie...@intel.com> > --- > fftools/ffmpeg.c | 1 + > fftools/ffmpeg.h | 4 ++++ > fftools/ffmpeg_filter.c | 2 +- > fftools/ffmpeg_opt.c | 5 +++++ > 4 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c > index 01f04103cf..5d52430b1e 100644 > --- a/fftools/ffmpeg.c > +++ b/fftools/ffmpeg.c > @@ -2133,6 +2133,7 @@ static int ifilter_send_frame(InputFilter *ifilter, > AVFrame *frame) > > /* determine if the parameters for this input changed */ > need_reinit = ifilter->format != frame->format; > + fg->autoscale = ifilter->ist->autoscale; > > switch (ifilter->ist->st->codecpar->codec_type) { > case AVMEDIA_TYPE_AUDIO: > diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h > index 7b6f802082..1602406581 100644 > --- a/fftools/ffmpeg.h > +++ b/fftools/ffmpeg.h > @@ -133,6 +133,8 @@ typedef struct OptionsContext { > int nb_hwaccel_output_formats; > SpecifierOpt *autorotate; > int nb_autorotate; > + SpecifierOpt *autoscale; > + int nb_autoscale; > > /* output options */ > StreamMap *stream_maps; > @@ -285,6 +287,7 @@ typedef struct FilterGraph { > > AVFilterGraph *graph; > int reconfiguration; > + int autoscale; > > InputFilter **inputs; > int nb_inputs; > @@ -335,6 +338,7 @@ typedef struct InputStream { > int guess_layout_max; > > int autorotate; > + int autoscale; > > int fix_sub_duration; > struct { /* previous decoded subtitle and related variables */ > diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c > index 72838de1e2..2a2eb080eb 100644 > --- a/fftools/ffmpeg_filter.c > +++ b/fftools/ffmpeg_filter.c > @@ -469,7 +469,7 @@ static int configure_output_video_filter(FilterGraph *fg, > OutputFilter *ofilter, > if (ret < 0) > return ret; > > - if (ofilter->width || ofilter->height) { > + if ((ofilter->width || ofilter->height) && fg->autoscale) { > char args[255]; > AVFilterContext *filter; > AVDictionaryEntry *e = NULL; > diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c > index f5ca18aa64..47f90c22aa 100644 > --- a/fftools/ffmpeg_opt.c > +++ b/fftools/ffmpeg_opt.c > @@ -742,7 +742,9 @@ static void add_input_streams(OptionsContext *o, > AVFormatContext *ic) > MATCH_PER_STREAM_OPT(ts_scale, dbl, ist->ts_scale, ic, st); > > ist->autorotate = 1; > + ist->autoscale = 1; > MATCH_PER_STREAM_OPT(autorotate, i, ist->autorotate, ic, st); > + MATCH_PER_STREAM_OPT(autoscale, i, ist->autoscale, ic, st); > > MATCH_PER_STREAM_OPT(codec_tags, str, codec_tag, ic, st); > if (codec_tag) {
> @@ -3640,6 +3642,9 @@ const OptionDef options[] = { > { "autorotate", HAS_ARG | OPT_BOOL | OPT_SPEC | > OPT_EXPERT | OPT_INPUT, > { .off = OFFSET(autorotate) }, > "automatically insert correct rotate filters" }, > + { "autoscale", HAS_ARG | OPT_BOOL | OPT_SPEC | > + OPT_EXPERT | OPT_INPUT, > { .off = OFFSET(autoscale) }, > + "automatically insert correct scale filters" }, I think this description is inadequate to understand what the option does. Scale filters are inserted at various places (for example within a filter graph). This option here affects a specific case. [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Those who would give up essential Liberty, to purchase a little temporary Safety, deserve neither Liberty nor Safety -- Benjamin Franklin
signature.asc
Description: PGP signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".