[FFmpeg-devel] [PATCH] libavfilter/vf_scale: Ensure scaled video is divisible by n

Lars Kiesow lkiesow at uos.de
Fri Aug 9 11:16:17 EEST 2019


Well… then, can anyone merge this patch?
Best regards,
Lars

On Mon, 5 Aug 2019 14:31:43 +0200
Paul B Mahol <onemda at gmail.com> wrote:

> On Mon, Aug 5, 2019 at 1:31 PM Lars Kiesow <lkiesow at uos.de> wrote:
> 
> > Hi everyone,
> > this is now open for nearly a month with no more comments or change
> > requests. Anything else I should do to get this merged?
> > Best regards,
> >  
> 
> Yes, ping it more frequently, until its merged.
> Waiting for months will not help as people are busy.
> 
> 
> > Lars
> >
> >
> > On Mon,  8 Jul 2019 17:43:40 +0200
> > Lars Kiesow <lkiesow at uos.de> wrote:
> >  
> > > This patch adds a new option to the scale filter which ensures
> > > that the output resolution is divisible by the given integer when
> > > used together with `force_original_aspect_ratio`. This works
> > > similar to using `-n` in the `w` and `h` options.
> > >
> > > This option respects the value set for
> > > `force_original_aspect_ratio`, increasing or decreasing the
> > > resolution accordingly.
> > >
> > > The use case for this is to set a fixed target resolution using
> > > `w` and `h`, to use the `force_original_aspect_ratio` option to
> > > make sure that the video always fits in the defined bounding box
> > > regardless of aspect ratio, but to also make sure that the
> > > calculated output resolution is divisible by n so in can be
> > > encoded with certain encoders/options if that is required.
> > >
> > > Signed-off-by: Lars Kiesow <lkiesow at uos.de>
> > > ---
> > >  doc/filters.texi       | 12 ++++++++++++
> > >  libavfilter/vf_scale.c | 13 ++++++++++++-
> > >  2 files changed, 24 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/doc/filters.texi b/doc/filters.texi
> > > index ee6a93ffbf..2de71d9820 100644
> > > --- a/doc/filters.texi
> > > +++ b/doc/filters.texi
> > > @@ -15231,6 +15231,18 @@ Please note that this is a different
> > > thing than specifying -1 for @option{w} or @option{h}, you still
> > > need to specify the output resolution for this option to work.
> > >
> > > + at item force_divisible_by Ensures that the output resolution is
> > > divisible by the +given integer when used together with
> > > @option{force_original_aspect_ratio}. This +works similar to
> > > using -n in the @option{w} and @option{h} options. +
> > > +This option respects the value set for
> > > @option{force_original_aspect_ratio}, +increasing or decreasing
> > > the resolution accordingly. This may slightly modify +the video's
> > > aspect ration. +
> > > +This can be handy, for example, if you want to have a video fit
> > > within a defined +resolution using the
> > > @option{force_original_aspect_ratio} option but have +encoder
> > > restrictions when it comes to width or height. +
> > >  @end table
> > >
> > >  The values of the @option{w} and @option{h} options are
> > > expressions diff --git a/libavfilter/vf_scale.c
> > > b/libavfilter/vf_scale.c index 7aebf56ad8..3ce6cdd1d5 100644
> > > --- a/libavfilter/vf_scale.c
> > > +++ b/libavfilter/vf_scale.c
> > > @@ -86,6 +86,7 @@ typedef struct ScaleContext {
> > >      int in_v_chr_pos;
> > >
> > >      int force_original_aspect_ratio;
> > > +    int force_divisible_by;
> > >
> > >      int nb_slices;
> > >
> > > @@ -237,7 +238,8 @@ static int config_props(AVFilterLink *outlink)
> > >          goto fail;
> > >
> > >      /* Note that force_original_aspect_ratio may overwrite the
> > > previous set
> > > -     * dimensions so that it is not divisible by the set factors
> > > anymore. */
> > > +     * dimensions so that it is not divisible by the set factors
> > > anymore
> > > +     * unless force_divisible_by is defined as well */
> > >      if (scale->force_original_aspect_ratio) {
> > >          int tmp_w = av_rescale(h, inlink->w, inlink->h);
> > >          int tmp_h = av_rescale(w, inlink->h, inlink->w);
> > > @@ -245,9 +247,17 @@ static int config_props(AVFilterLink
> > > *outlink) if (scale->force_original_aspect_ratio == 1) {
> > >               w = FFMIN(tmp_w, w);
> > >               h = FFMIN(tmp_h, h);
> > > +             if (scale->force_divisible_by > 1) {
> > > +                 w = w / scale->force_divisible_by *
> > > scale->force_divisible_by;
> > > +                 h = h / scale->force_divisible_by *
> > > scale->force_divisible_by;
> > > +             }
> > >          } else {
> > >               w = FFMAX(tmp_w, w);
> > >               h = FFMAX(tmp_h, h);
> > > +             if (scale->force_divisible_by > 1) {
> > > +                 w = ceil(w / (float)scale->force_divisible_by) *
> > > scale->force_divisible_by;
> > > +                 h = ceil(h / (float)scale->force_divisible_by) *
> > > scale->force_divisible_by;
> > > +             }
> > >          }
> > >      }
> > >
> > > @@ -600,6 +610,7 @@ static const AVOption scale_options[] = {
> > >      { "disable",  NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, 0, 0,
> > > FLAGS, "force_oar" }, { "decrease", NULL, 0, AV_OPT_TYPE_CONST,
> > > {.i64 = 1 }, 0, 0, FLAGS, "force_oar" }, { "increase", NULL, 0,
> > > AV_OPT_TYPE_CONST, {.i64 = 2 }, 0, 0, FLAGS, "force_oar" },
> > > +    { "force_divisible_by", "enforce that the output resolution
> > > is divisible by a defined integer when
> > > force_original_aspect_ratio is used", OFFSET(force_divisible_by),
> > > AV_OPT_TYPE_INT, { .i64 = 1}, 1, 256, FLAGS }, { "param0",
> > > "Scaler param 0", OFFSET(param[0]),  AV_OPT_TYPE_DOUBLE, { .dbl =
> > > SWS_PARAM_DEFAULT  }, INT_MIN, INT_MAX, FLAGS }, { "param1",
> > > "Scaler param 1", OFFSET(param[1]),  AV_OPT_TYPE_DOUBLE, { .dbl =
> > > SWS_PARAM_DEFAULT  }, INT_MIN, INT_MAX, FLAGS }, { "nb_slices",
> > > "set the number of slices (debug purpose only)",
> > > OFFSET(nb_slices), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX,
> > > FLAGS },  
> >
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel at ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> >
> > To unsubscribe, visit link above, or email
> > ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".  
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list