[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