[FFmpeg-cvslog] lavfi/vignette: add aspect option.

Clément Bœsch git at videolan.org
Thu May 30 20:53:36 CEST 2013


ffmpeg | branch: master | Clément Bœsch <ubitux at gmail.com> | Thu May 30 20:27:55 2013 +0200| [2886e8065e635141db1df0a5236c2551573babaa] | committer: Clément Bœsch

lavfi/vignette: add aspect option.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2886e8065e635141db1df0a5236c2551573babaa
---

 doc/filters.texi          |    7 +++++++
 libavfilter/vf_vignette.c |    9 +++++++--
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index 5894257..04c9646 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -7005,6 +7005,13 @@ Default value is @samp{init}.
 @item dither
 Set dithering to reduce the circular banding effects. Default is @code{1}
 (enabled).
+
+ at item aspect
+Set vignette aspect. This setting allows to adjust the shape of the vignette.
+Setting this value to the SAR of the input will make a rectangular vignetting
+following the dimensions of the video.
+
+Default is @code{1/1}.
 @end table
 
 @subsection Expressions
diff --git a/libavfilter/vf_vignette.c b/libavfilter/vf_vignette.c
index f3af68d..568ecc5 100644
--- a/libavfilter/vf_vignette.c
+++ b/libavfilter/vf_vignette.c
@@ -18,6 +18,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include <float.h>  /* DBL_MAX */
+
 #include "libavutil/opt.h"
 #include "libavutil/eval.h"
 #include "libavutil/avassert.h"
@@ -65,6 +67,8 @@ typedef struct {
     float xscale, yscale;
     uint32_t dither;
     int do_dither;
+    AVRational aspect;
+    AVRational scale;
 } VignetteContext;
 
 #define OFFSET(x) offsetof(VignetteContext, x)
@@ -81,6 +85,7 @@ static const AVOption vignette_options[] = {
          { "init",  "eval expressions once during initialization", 0, AV_OPT_TYPE_CONST, {.i64=EVAL_MODE_INIT},  .flags = FLAGS, .unit = "eval" },
          { "frame", "eval expressions for each frame",             0, AV_OPT_TYPE_CONST, {.i64=EVAL_MODE_FRAME}, .flags = FLAGS, .unit = "eval" },
     { "dither", "set dithering", OFFSET(do_dither), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, FLAGS },
+    { "aspect", "set aspect ratio", OFFSET(aspect), AV_OPT_TYPE_RATIONAL, {.dbl = 1}, 0, DBL_MAX, .flags = FLAGS },
     { NULL }
 };
 
@@ -281,10 +286,10 @@ static int config_props(AVFilterLink *inlink)
     if (!sar.num || !sar.den)
         sar.num = sar.den = 1;
     if (sar.num > sar.den) {
-        s->xscale = av_q2d(sar);
+        s->xscale = av_q2d(av_div_q(sar, s->aspect));
         s->yscale = 1;
     } else {
-        s->yscale = av_q2d(av_inv_q(sar));
+        s->yscale = av_q2d(av_div_q(s->aspect, sar));
         s->xscale = 1;
     }
     s->dmax = hypot(inlink->w / 2., inlink->h / 2.);



More information about the ffmpeg-cvslog mailing list