On Wed, Jul 03, 2019 at 06:16:51PM +0200, Lars Kiesow wrote: > This patch adds a new option to the scale filter which ensures that the > output resolution is divisible by the given integer similar to using -n > in the `w` and `h` options. But this works even if the > `force_original_aspect_ratio` is used. > > 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 <lkie...@uos.de> > --- > doc/filters.texi | 5 +++++ > libavfilter/vf_scale.c | 9 ++++++--- > 2 files changed, 11 insertions(+), 3 deletions(-)
commit message should begin with a prefix like avfilter/vf_scale: ... > > diff --git a/doc/filters.texi b/doc/filters.texi > index 700a76f239..1694fdda28 100644 > --- a/doc/filters.texi > +++ b/doc/filters.texi > @@ -15215,6 +15215,11 @@ 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. > > +@item force_divisible_by > +Ensures that the output resolution is divisible by the given integer similar > +to using -n in the @option{w} and @option{h} options. But this works even if > +the @option{force_original_aspect_ratio} is used. > + > @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 f741419e7e..d1b486f3d6 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,10 +238,11 @@ 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); > + int tmp_w = av_rescale(h, inlink->w, inlink->h) / > scale->force_divisible_by * scale->force_divisible_by; > + int tmp_h = av_rescale(w, inlink->h, inlink->w) / > scale->force_divisible_by * scale->force_divisible_by; what does this feature have to do with force_original_aspect_ratio ? i think it should not be under this if() also the rounding is always down, it probably should be rounding to closest (for n=2 it doesnt matter but for larger divisibility like 16 rounding down by 15 instead of rounding up by 1 seems not ideal [...] thx -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Awnsering whenever a program halts or runs forever is On a turing machine, in general impossible (turings halting problem). On any real computer, always possible as a real computer has a finite number of states N, and will either halt in less than N cycles or never halt.
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".