changeset 10816:e9dc9b0b16fa

added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
author alex
date Fri, 05 Sep 2003 16:04:40 +0000
parents 58c6f2998afa
children 59ac254c2541
files libmpcodecs/vf_delogo.c
diffstat 1 files changed, 39 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/libmpcodecs/vf_delogo.c	Fri Sep 05 15:31:32 2003 +0000
+++ b/libmpcodecs/vf_delogo.c	Fri Sep 05 16:04:40 2003 +0000
@@ -37,30 +37,22 @@
 #include "vf.h"
 #include "../libvo/fastmemcpy.h"
 
+#include "m_option.h"
+#include "m_struct.h"
+
 //===========================================================================//
 
-struct vf_priv_s {
+static struct vf_priv_s {
     unsigned int outfmt;
     int xoff, yoff, lw, lh, band, show;
+} vf_priv_dflt = {
+    0,
+    0, 0, 0, 0, 0, 0
 };
 
 #define MIN(a,b) (((a) < (b)) ? (a) : (b))
 #define MAX(a,b) (((a) > (b)) ? (a) : (b))
 
-static inline void *my_memcpy_pic(void * dst, void * src, int bytesPerLine, int height, int dstStride, int srcStride)
-{
-    int i;
-    void *retval = dst;
-
-    for (i = 0; i < height; i++) {
-	memcpy(dst, src, bytesPerLine);
-	src += srcStride;
-	dst += dstStride;
-    }                                    
-
-    return retval;
-}
-
 static void delogo(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int width, int height,
 		   int logo_x, int logo_y, int logo_w, int logo_h, int band, int show, int direct) {
     int y, x;
@@ -85,7 +77,7 @@
     topright = src+logo_x1*srcStride+logo_x2-1;
     botleft = src+(logo_y2-1)*srcStride+logo_x1;
 
-    if (!direct) my_memcpy_pic(dst, src, width, height, dstStride, srcStride);
+    if (!direct) memcpy_pic(dst, src, width, height, dstStride, srcStride);
 
     dst += (logo_y1+1)*dstStride;
     src += (logo_y1+1)*srcStride;
@@ -216,24 +208,25 @@
     vf->get_image=get_image;
     vf->query_format=query_format;
     vf->uninit=uninit;
-    vf->priv=malloc(sizeof(struct vf_priv_s));
-    memset(vf->priv, 0, sizeof(struct vf_priv_s));
+    if (!vf->priv)
+    {
+        vf->priv=malloc(sizeof(struct vf_priv_s));
+	memset(vf->priv, 0, sizeof(struct vf_priv_s));
+    }
 
     if (args) res = sscanf(args, "%d:%d:%d:%d:%d",
 			   &vf->priv->xoff, &vf->priv->yoff,
 			   &vf->priv->lw, &vf->priv->lh,
 			   &vf->priv->band);
-
-    if (res != 5) {
-	mp_msg(MSGT_VFILTER, MSGL_ERR, "deLogo: syntax is \"delogo=xoff:yoff:width:height:band\"\n");
+    if (args && (res != 5)) {
 	uninit(vf);
-	return 0;
+	return 0; // bad syntax
     }
 
-    mp_msg(MSGT_VFILTER, MSGL_INFO, "deLogo: %d x %d, %d ; %d ; band = %d\n",
-	   &vf->priv->lw, &vf->priv->lh,
-	   &vf->priv->xoff, &vf->priv->yoff,
-	   &vf->priv->band);
+    mp_msg(MSGT_VFILTER, MSGL_V, "delogo: %d x %d, %d x %d, band = %d\n",
+	   vf->priv->xoff, vf->priv->yoff,
+	   vf->priv->lw, vf->priv->lh,
+	   vf->priv->band);
 
     vf->priv->show = 0;
 
@@ -259,13 +252,31 @@
     return 1;
 }
 
+#define ST_OFF(f) M_ST_OFF(struct vf_priv_s,f)
+static m_option_t vf_opts_fields[] = {
+    { "x", ST_OFF(xoff), CONF_TYPE_INT, 0, 0, 0, NULL },
+    { "y", ST_OFF(yoff), CONF_TYPE_INT, 0, 0, 0, NULL },
+    { "w", ST_OFF(lw), CONF_TYPE_INT, 0, 0, 0, NULL },
+    { "h", ST_OFF(lh), CONF_TYPE_INT, 0, 0, 0, NULL },
+    { "t", ST_OFF(band), CONF_TYPE_INT, 0, 0, 0, NULL },
+    { "band", ST_OFF(band), CONF_TYPE_INT, 0, 0, 0, NULL }, // alias
+    { NULL, NULL, 0, 0, 0, 0, NULL }
+};
+
+static m_struct_t vf_opts = {
+    "delogo",
+    sizeof(struct vf_priv_s),
+    &vf_priv_dflt,
+    vf_opts_fields
+};
+
 vf_info_t vf_info_delogo = {
     "simple logo remover",
     "delogo",
-    "Jindrich Makovicka",
+    "Jindrich Makovicka, Alex Beregszaszi",
     "",
     open,
-    NULL
+    &vf_opts
 };
 
 //===========================================================================//