[FFmpeg-cvslog] lavfi/removelogo: switch to an AVOptions-based system.

Clément Bœsch git at videolan.org
Thu Apr 11 18:51:47 CEST 2013


ffmpeg | branch: master | Clément Bœsch <ubitux at gmail.com> | Thu Apr 11 18:49:46 2013 +0200| [c1907bd732c026ad5b9464d3fd41ae7ebad0ee59] | committer: Clément Bœsch

lavfi/removelogo: switch to an AVOptions-based system.

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

 doc/filters.texi            |   12 ++++++++----
 libavfilter/avfilter.c      |    1 -
 libavfilter/vf_removelogo.c |   20 +++++++++++++++++---
 3 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index 097d3bc..3438308 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -4800,10 +4800,14 @@ Suppress a TV station logo, using an image file to determine which
 pixels comprise the logo. It works by filling in the pixels that
 comprise the logo with neighboring pixels.
 
-This filter requires one argument which specifies the filter bitmap
-file, which can be any image format supported by libavformat. The
-width and height of the image file must match those of the video
-stream being processed.
+The filters accept the following options:
+
+ at table @option
+ at item filename, f
+Set the filter bitmap file, which can be any image format supported by
+libavformat. The width and height of the image file must match those of the
+video stream being processed.
+ at end table
 
 Pixels in the provided bitmap image with a value of zero are not
 considered part of the logo, non-zero pixels are considered part of
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index 64d9e93..1af15ca 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -681,7 +681,6 @@ static const char *const filters_left_to_update[] = {
     "hue",
     "mp",
     "pan",
-    "removelogo",
     "scale",
     "setdar",
     "setsar",
diff --git a/libavfilter/vf_removelogo.c b/libavfilter/vf_removelogo.c
index e3da197..7ca7f30 100644
--- a/libavfilter/vf_removelogo.c
+++ b/libavfilter/vf_removelogo.c
@@ -70,6 +70,7 @@
  */
 
 #include "libavutil/imgutils.h"
+#include "libavutil/opt.h"
 #include "avfilter.h"
 #include "formats.h"
 #include "internal.h"
@@ -79,6 +80,8 @@
 #include "lswsutils.h"
 
 typedef struct {
+    const AVClass *class;
+    char *filename;
     /* Stores our collection of masks. The first is for an array of
        the second for the y axis, and the third for the x axis. */
     int ***mask;
@@ -91,6 +94,16 @@ typedef struct {
     FFBoundingBox half_mask_bbox;
 } RemovelogoContext;
 
+#define OFFSET(x) offsetof(RemovelogoContext, x)
+#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
+static const AVOption removelogo_options[] = {
+    { "filename", "set bitmap filename", OFFSET(filename), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
+    { "f",        "set bitmap filename", OFFSET(filename), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
+    { NULL }
+};
+
+AVFILTER_DEFINE_CLASS(removelogo);
+
 /**
  * Choose a slightly larger mask size to improve performance.
  *
@@ -272,13 +285,13 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
     int a, b, c, w, h;
     int full_max_mask_size, half_max_mask_size;
 
-    if (!args) {
-        av_log(ctx, AV_LOG_ERROR, "An image file must be specified as argument\n");
+    if (!removelogo->filename) {
+        av_log(ctx, AV_LOG_ERROR, "The bitmap file name is mandatory\n");
         return AVERROR(EINVAL);
     }
 
     /* Load our mask image. */
-    if ((ret = load_mask(&removelogo->full_mask_data, &w, &h, args, ctx)) < 0)
+    if ((ret = load_mask(&removelogo->full_mask_data, &w, &h, removelogo->filename, ctx)) < 0)
         return ret;
     removelogo->mask_w = w;
     removelogo->mask_h = h;
@@ -564,4 +577,5 @@ AVFilter avfilter_vf_removelogo = {
     .query_formats = query_formats,
     .inputs        = removelogo_inputs,
     .outputs       = removelogo_outputs,
+    .priv_class    = &removelogo_class,
 };



More information about the ffmpeg-cvslog mailing list