[MPlayer-dev-eng] [PATCH] vf_eq2 default parameter fix

Diego Biurrun diego at biurrun.de
Mon Dec 1 04:06:28 CET 2003


Hi!

This patch was never properly accepted or rejected, can we have a
decision on this one?  I think it fixes a real bug and IIUC there is
no cleaner solution available in G1, right?

Diego

Diego Biurrun writes:
 > What's up with this patch?  Arpi and Alex said on IRC that it is ugly
 > but could still be committed (at least that's what I understood).  Is
 > there a better way to give the filter default parameters?  Should it
 > be applied anyway?
 > 
 > Hampa Hug writes:
 >  > Diego Biurrun wrote:
 >  > 
 >  > > g:c:b, the status quo is the way to go.
 >  > 
 >  > A poet ;-)
 >  > 
 >  > Here it is.
 >  > 
 >  > Hampa
 >  > diff -ur mplayer-cvs/libmpcodecs/vf_eq2.c mplayer-dev/libmpcodecs/vf_eq2.c
 >  > --- mplayer-cvs/libmpcodecs/vf_eq2.c	2003-10-21 02:01:23.000000000 +0200
 >  > +++ mplayer-dev/libmpcodecs/vf_eq2.c	2003-10-28 17:31:56.000000000 +0100
 >  > @@ -23,6 +23,9 @@
 >  >  #include "mp_image.h"
 >  >  #include "vf.h"
 >  >  
 >  > +#include "m_option.h"
 >  > +#include "m_struct.h"
 >  > +
 >  >  #ifdef USE_SETLOCALE
 >  >  #include <locale.h>
 >  >  #endif
 >  > @@ -47,8 +50,6 @@
 >  >  } eq2_param_t;
 >  >  
 >  >  typedef struct vf_priv_s {
 >  > -  eq2_param_t param[3];
 >  > -
 >  >    double        contrast;
 >  >    double        brightness;
 >  >    double        saturation;
 >  > @@ -59,12 +60,27 @@
 >  >    double        ggamma;
 >  >    double        bgamma;
 >  >  
 >  > +  eq2_param_t   param[3];
 >  > +
 >  >    unsigned      buf_w[3];
 >  >    unsigned      buf_h[3];
 >  >    unsigned char *buf[3];
 >  >  } vf_eq2_t;
 >  >  
 >  >  
 >  > +static vf_eq2_t vf_eq2_dflt = {
 >  > +  1.0,
 >  > +  0.0,
 >  > +  1.0,
 >  > +  1.0,
 >  > +  1.0,
 >  > +  1.0,
 >  > +  1.0,
 >  > +  1.0
 >  > +  /* remaining fields are initialized at run time */
 >  > +};
 >  > +
 >  > +
 >  >  static
 >  >  void create_lut (eq2_param_t *par)
 >  >  {
 >  > @@ -440,14 +456,17 @@
 >  >  {
 >  >    unsigned i;
 >  >    vf_eq2_t *eq2;
 >  > -  double   par[8];
 >  >  
 >  >    vf->control = control;
 >  >    vf->query_format = query_format;
 >  >    vf->put_image = put_image;
 >  >    vf->uninit = uninit;
 >  >  
 >  > -  vf->priv = (vf_eq2_t *) malloc (sizeof (vf_eq2_t));
 >  > +  if (vf->priv == NULL) {
 >  > +    vf->priv = (vf_eq2_t *) malloc (sizeof (vf_eq2_t));
 >  > +    memcpy (vf->priv, &vf_eq2_dflt, sizeof (vf_eq2_t));
 >  > +  }
 >  > +
 >  >    eq2 = vf->priv;
 >  >  
 >  >    for (i = 0; i < 3; i++) {
 >  > @@ -459,20 +478,13 @@
 >  >      eq2->param[i].c = 1.0;
 >  >      eq2->param[i].b = 0.0;
 >  >      eq2->param[i].g = 1.0;
 >  > +    eq2->param[i].w = 1.0;
 >  >      eq2->param[i].lut_clean = 0;
 >  >    }
 >  >  
 >  > -  eq2->contrast = 1.0;
 >  > -  eq2->brightness = 0.0;
 >  > -  eq2->saturation = 1.0;
 >  > -
 >  > -  eq2->gamma = 1.0;
 >  > -  eq2->gamma_weight = 1.0;
 >  > -  eq2->rgamma = 1.0;
 >  > -  eq2->ggamma = 1.0;
 >  > -  eq2->bgamma = 1.0;
 >  > -
 >  >    if (args != NULL) {
 >  > +    double par[8];
 >  > +
 >  >      par[0] = 1.0;
 >  >      par[1] = 1.0;
 >  >      par[2] = 0.0;
 >  > @@ -491,25 +503,50 @@
 >  >      setlocale (LC_NUMERIC, "");
 >  >  #endif
 >  >  
 >  > +    eq2->gamma = par[0];
 >  > +    eq2->contrast = par[1];
 >  > +    eq2->brightness = par[2];
 >  > +    eq2->saturation = par[3];
 >  > +
 >  >      eq2->rgamma = par[4];
 >  >      eq2->ggamma = par[5];
 >  >      eq2->bgamma = par[6];
 >  >      eq2->gamma_weight = par[7];
 >  > -
 >  > -    set_gamma (eq2, par[0]);
 >  > -    set_contrast (eq2, par[1]);
 >  > -    set_brightness (eq2, par[2]);
 >  > -    set_saturation (eq2, par[3]);
 >  >    }
 >  >  
 >  > +  set_gamma (eq2, eq2->gamma);
 >  > +  set_contrast (eq2, eq2->contrast);
 >  > +  set_brightness (eq2, eq2->brightness);
 >  > +  set_saturation (eq2, eq2->saturation);
 >  > +
 >  >    return 1;
 >  >  }
 >  >  
 >  > +#define ST_OFF(f) M_ST_OFF(struct vf_priv_s,f)
 >  > +static m_option_t vf_opts_fields[] = {
 >  > +  {"gamma", ST_OFF(gamma), CONF_TYPE_DOUBLE, M_OPT_RANGE, 0.001, 1000.0, NULL},
 >  > +  {"contrast", ST_OFF(contrast), CONF_TYPE_DOUBLE, 0, 0.0, 0.0, NULL},
 >  > +  {"brightness", ST_OFF(brightness), CONF_TYPE_DOUBLE, 0, 0.0, 0.0, NULL},
 >  > +  {"saturation", ST_OFF(saturation), CONF_TYPE_DOUBLE, M_OPT_MIN, 0.0, 0.0, NULL},
 >  > +  {"gamma_red", ST_OFF(rgamma), CONF_TYPE_DOUBLE, M_OPT_RANGE, 0.001, 1000.0, NULL},
 >  > +  {"gamma_green", ST_OFF(ggamma), CONF_TYPE_DOUBLE, M_OPT_RANGE, 0.001, 1000.0, NULL},
 >  > +  {"gamma_blue", ST_OFF(bgamma), CONF_TYPE_DOUBLE, M_OPT_RANGE, 0.001, 1000.0, NULL},
 >  > +  {"gamma_weight", ST_OFF(gamma_weight), CONF_TYPE_DOUBLE, M_OPT_RANGE, 0.0, 1.0, NULL},
 >  > +  { NULL, NULL, 0, 0, 0, 0,  NULL }
 >  > +};
 >  > +
 >  > +static m_struct_t vf_opts = {
 >  > +  "eq2",
 >  > +  sizeof (vf_eq2_t),
 >  > +  &vf_eq2_dflt,
 >  > +  vf_opts_fields
 >  > +};
 >  > +
 >  >  vf_info_t vf_info_eq2 = {
 >  >    "Software equalizer",
 >  >    "eq2",
 >  >    "Hampa Hug, Daniel Moreno, Richard Felker",
 >  >    "",
 >  >    &open,
 >  > -  NULL
 >  > +  &vf_opts
 >  >  };
 >  > diff -ur mplayer-cvs/m_option.c mplayer-dev/m_option.c
 >  > --- mplayer-cvs/m_option.c	2003-10-27 12:36:17.000000000 +0100
 >  > +++ mplayer-dev/m_option.c	2003-10-28 17:29:45.000000000 +0100
 >  > @@ -243,6 +243,49 @@
 >  >    NULL
 >  >  };
 >  >  
 >  > +
 >  > +// Double
 >  > +
 >  > +#undef VAL
 >  > +#define VAL(x) (*(double*)(x))
 >  > +
 >  > +static
 >  > +int parse_double (m_option_t *opt, char *name, char *param, void *dst, int src)
 >  > +{
 >  > +  int   r;
 >  > +  float val;
 >  > +
 >  > +  /* parse_double() calls parse_float(). better would be the other way around. */
 >  > +  r = parse_float (opt, name, param, &val, src);
 >  > +
 >  > +  if ((r == 1) && (dst != NULL)) {
 >  > +    VAL(dst) = val;
 >  > +  }
 >  > +
 >  > +  return (r);
 >  > +}
 >  > +
 >  > +static
 >  > +char *print_double (m_option_t *opt, void *val)
 >  > +{
 >  > +  opt = NULL;
 >  > +  return dup_printf ("%f", VAL(val));
 >  > +}
 >  > +
 >  > +m_option_type_t m_option_type_double = {
 >  > +  "Double",
 >  > +  "floating point number or ratio (numerator[:/]denominator)",
 >  > +  sizeof(double),
 >  > +  0,
 >  > +  parse_double,
 >  > +  print_double,
 >  > +  copy_opt,
 >  > +  copy_opt,
 >  > +  NULL,
 >  > +  NULL
 >  > +};
 >  > +
 >  > +
 >  >  ///////////// Position
 >  >  #undef VAL
 >  >  #define VAL(x) (*(off_t*)(x))
 >  > diff -ur mplayer-cvs/m_option.h mplayer-dev/m_option.h
 >  > --- mplayer-cvs/m_option.h	2003-08-27 01:49:19.000000000 +0200
 >  > +++ mplayer-dev/m_option.h	2003-10-28 17:29:45.000000000 +0100
 >  > @@ -11,6 +11,7 @@
 >  >  extern m_option_type_t m_option_type_flag;
 >  >  extern m_option_type_t m_option_type_int;
 >  >  extern m_option_type_t m_option_type_float;
 >  > +extern m_option_type_t m_option_type_double;
 >  >  extern m_option_type_t m_option_type_string;
 >  >  extern m_option_type_t m_option_type_string_list;
 >  >  extern m_option_type_t m_option_type_position;
 >  > @@ -78,6 +79,7 @@
 >  >  #define CONF_TYPE_FLAG		(&m_option_type_flag)
 >  >  #define CONF_TYPE_INT		(&m_option_type_int)
 >  >  #define CONF_TYPE_FLOAT		(&m_option_type_float)
 >  > +#define CONF_TYPE_DOUBLE        (&m_option_type_double)
 >  >  #define CONF_TYPE_STRING	(&m_option_type_string)
 >  >  #define CONF_TYPE_FUNC		(&m_option_type_func)
 >  >  #define CONF_TYPE_FUNC_PARAM	(&m_option_type_func_param)
 >  > _______________________________________________
 >  > MPlayer-dev-eng mailing list
 >  > MPlayer-dev-eng at mplayerhq.hu
 >  > http://mplayerhq.hu/mailman/listinfo/mplayer-dev-eng
 > 
 > _______________________________________________
 > MPlayer-dev-eng mailing list
 > MPlayer-dev-eng at mplayerhq.hu
 > http://mplayerhq.hu/mailman/listinfo/mplayer-dev-eng
 > 
 > 



More information about the MPlayer-dev-eng mailing list