> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-boun...@ffmpeg.org> On Behalf Of
> Gyan Doshi
> Sent: Tuesday, February 18, 2020 01:44
> To: ffmpeg-devel@ffmpeg.org
> Subject: Re: [FFmpeg-devel] [PATCH] fftools/ffmpeg_filter: add -autoscale
> to disable/enable the default scale
> 
> 
> 
> On 17-02-2020 11:07 pm, Fu, Linjie wrote:
> >> -----Original Message-----
> >> From: ffmpeg-devel <ffmpeg-devel-boun...@ffmpeg.org> On Behalf Of
> >> Gyan Doshi
> >> Sent: Tuesday, February 18, 2020 01:33
> >> To: ffmpeg-devel@ffmpeg.org
> >> Subject: Re: [FFmpeg-devel] [PATCH] fftools/ffmpeg_filter: add -
> autoscale
> >> to disable/enable the default scale
> >>
> >>
> >>
> >> On 17-02-2020 10:57 pm, Fu, Linjie wrote:
> >>>> -----Original Message-----
> >>>> From: ffmpeg-devel <ffmpeg-devel-boun...@ffmpeg.org> On Behalf
> Of
> >>>> Gyan Doshi
> >>>> Sent: Tuesday, February 18, 2020 00:53
> >>>> To: ffmpeg-devel@ffmpeg.org
> >>>> Subject: Re: [FFmpeg-devel] [PATCH] fftools/ffmpeg_filter: add -
> >> autoscale
> >>>> to disable/enable the default scale
> >>>>
> >>>>
> >>>>
> >>>> On 17-02-2020 09:13 pm, Fu, Linjie wrote:
> >>>>>> -----Original Message-----
> >>>>>> From: Fu, Linjie <linjie...@intel.com>
> >>>>>> Sent: Sunday, February 16, 2020 00:13
> >>>>>> To: ffmpeg-devel@ffmpeg.org
> >>>>>> Cc: Fu, Linjie <linjie...@intel.com>; Eoff, Ullysses A
> >>>>>> <ullysses.a.e...@intel.com>
> >>>>>> Subject: [PATCH] fftools/ffmpeg_filter: add -autoscale to
> >> disable/enable
> >>>> the
> >>>>>> default scale
> >>>>>>
> >>>>>> 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 as an output option to indicate
> whether
> >> auto
> >>>>>> inserting the scale filter in the filter graph:
> >>>>>>        -noautoscale or -autoscale 0:
> >>>>>>        disable the default auto scale filter inserting.
> >>>>>>
> >>>>>> ffmpeg -y input.mp4 out1.yuv -noautoscale out2.yuv -autoscale 0
> >>>> out3.yuv
> >>>>>> Update docs.
> >>>>>>
> >>>>>> Signed-off-by: U. Artie Eoff <ullysses.a.e...@intel.com>
> >>>>>> Signed-off-by: Linjie Fu <linjie...@intel.com>
> >>>>>> ---
> >>>>>>     doc/ffmpeg.texi         | 16 ++++++++++++----
> >>>>>>     fftools/ffmpeg.h        |  3 +++
> >>>>>>     fftools/ffmpeg_filter.c |  2 +-
> >>>>>>     fftools/ffmpeg_opt.c    |  5 +++++
> >>>>>>     4 files changed, 21 insertions(+), 5 deletions(-)
> >>>>>>
> >>>>>> diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi
> >>>>>> index 29753f0..aebafb3 100644
> >>>>>> --- a/doc/ffmpeg.texi
> >>>>>> +++ b/doc/ffmpeg.texi
> >>>>>> @@ -734,10 +734,6 @@ ffmpeg -dump_attachment:t "" -i INPUT
> >>>>>>     Technical note -- attachments are implemented as codec extradata,
> >> so
> >>>> this
> >>>>>>     option can actually be used to extract extradata from any stream,
> not
> >>>> just
> >>>>>>     attachments.
> >>>>>> -
> >>>>>> -@item -noautorotate
> >>>>>> -Disable automatically rotating video based on file metadata.
> >>>>>> -
> >>>>>>     @end table
> >>>>>>
> >>>>>>     @section Video Options
> >>>>>> @@ -819,6 +815,18 @@ Create the filtergraph specified by
> >>>> @var{filtergraph}
> >>>>>> and use it to
> >>>>>>     filter the stream.
> >>>>>>
> >>>>>>     This is an alias for @code{-filter:v}, see the 
> >>>>>> @ref{filter_option,,-
> filter
> >>>> option}.
> >>>>>> +
> >>>>>> +@item -autorotate
> >>>>>> +Automatically rotate the video according to file metadata. Enabled
> by
> >>>>>> +default, use @option{-noautorotate} to disable it.
> >>>>>> +
> >>>>>> +@item -autoscale
> >>>>>> +Automatically scale the video according to the resolution of first
> frame.
> >>>>>> +Enabled by default, use @option{-noautoscale} to disable it. When
> >>>>>> autoscale is
> >>>>>> +disabled, all output frames of filter graph might not be in the same
> >>>>>> resolution
> >>>>>> +and may be inadequate for some encoder/muxer. Therefore, it is
> not
> >>>>>> recommended
> >>>>>> +to disable it unless you really know what you are doing.
> >>>>>> +Disable autoscale at your own risk.
> >>>>>>     @end table
> >>>>>>
> >>>>>>     @section Advanced Video options
> >>>>>> diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h
> >>>>>> index 7b6f802..8beba6c 100644
> >>>>>> --- a/fftools/ffmpeg.h
> >>>>>> +++ b/fftools/ffmpeg.h
> >>>>>> @@ -230,6 +230,8 @@ typedef struct OptionsContext {
> >>>>>>         int        nb_time_bases;
> >>>>>>         SpecifierOpt *enc_time_bases;
> >>>>>>         int        nb_enc_time_bases;
> >>>>>> +    SpecifierOpt *autoscale;
> >>>>>> +    int        nb_autoscale;
> >>>>>>     } OptionsContext;
> >>>>>>
> >>>>>>     typedef struct InputFilter {
> >>>>>> @@ -479,6 +481,7 @@ typedef struct OutputStream {
> >>>>>>         int force_fps;
> >>>>>>         int top_field_first;
> >>>>>>         int rotate_overridden;
> >>>>>> +    int autoscale;
> >>>>>>         double rotate_override_value;
> >>>>>>
> >>>>>>         AVRational frame_aspect_ratio;
> >>>>>> diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
> >>>>>> index 40cc4c1..46c8ea8 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) && 
> >>>>>> ofilter->ost->autoscale) {
> >>>>>>             char args[255];
> >>>>>>             AVFilterContext *filter;
> >>>>>>             AVDictionaryEntry *e = NULL;
> >>>>>> diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c
> >>>>>> index 12d4488..a6f4216 100644
> >>>>>> --- a/fftools/ffmpeg_opt.c
> >>>>>> +++ b/fftools/ffmpeg_opt.c
> >>>>>> @@ -1405,6 +1405,8 @@ static OutputStream
> >>>>>> *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
> >>>>>>             ost->encoder_opts  = filter_codec_opts(o->g->codec_opts,
> ost-
> >>>>> enc-
> >>>>>>> id, oc, st, ost->enc);
> >>>>>>             MATCH_PER_STREAM_OPT(presets, str, preset, oc, st);
> >>>>>> +        ost->autoscale = 1;
> >>>>>> +        MATCH_PER_STREAM_OPT(autoscale, i, ost->autoscale, oc, st);
> >>>>>>             if (preset && (!(ret = get_preset_file_2(preset, ost->enc-
> >name,
> >>>> &s))))
> >>>>>> {
> >>>>>>                 do  {
> >>>>>>                     buf = get_line(s);
> >>>>>> @@ -3650,6 +3652,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_OUTPUT,                    
> >>>>>>            { .off =
> >>>>>> OFFSET(autoscale) },
> >>>>>> +        "automatically insert a scale filter at the end of the filter
> graph" },
> >>>>>>
> >>>>>>         /* audio options */
> >>>>>>         { "aframes",        OPT_AUDIO | HAS_ARG  | OPT_PERFILE |
> >>>> OPT_OUTPUT,
> >>>>>> { .func_arg = opt_audio_frames },
> >>>>>> --
> >>>>>> 2.7.4
> >>>> What happens if user disables autoscale and the frame sizes do vary
> but
> >>>> the encoder doesn't support changing props?
> >>> That's the point. Currently they would fail without specific notifications
> for
> >> this usage.
> >>> One of the solutions is to declare
> >> AV_CODEC_CAP_VARIABLE_DIMENSIONS  capability for encoders [1],
> >>> and prompt an error information [2] to indicate " Dynamic resolution
> >> encode is not supported by this encoder."
> >>> The further work would be providing dynamic encoding support for
> some
> >> encoders [3].
> >>> So this patch is the first step.
> >> Is this patch intended to be applied first, before the codec flag is
> >> added and checked?
> > Considering it won't impact the default behavior, IMHO yes it could be.
> 
> So, my question still stands. If it is applied tomorrow, and a user
> disables autoscale, and ends up feeding frames of varying sizes to, say,
> x264 or aom, what happens?
> 

Failed without specific notifications for wrongly disabling autoscale.

Taking x264 as an example to transcode clips with resolution changing
from 352x288 to 240x196:

[libx264 @ 0x5559143d51c0] Input picture width (352) is greater than stride 
(256)
Video encoding failed
(This differs according to the encoder.)

BTW, it would be great if the patch set for codec flag and check could be 
applied at
the same time.


_______________________________________________
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".

Reply via email to