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 <[email protected]> > --- > 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 [email protected] https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email [email protected] with subject "unsubscribe".
