[MPlayer-dev-eng] [PATCH] vf_eq2 default parameter fix
Diego Biurrun
diego at biurrun.de
Wed Dec 24 20:05:14 CET 2003
Hi!
Hey, it's Christmas time. I have a very reasonable wish for a
present: Somebody please tell me if I should apply the patch or not.
I'm just asking for the few seconds of your time it takes to write two
or three letters. Say "yes" for patch application or "no" for patch
rejection.
Please make me happy
Diego
Diego Biurrun writes:
> 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
> >
> >
>
> _______________________________________________
> 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