[FFmpeg-devel] [PATCH] avfilter: add eval video filter

Paul B Mahol onemda at gmail.com
Sun Nov 17 12:33:13 EET 2019


I do not feel like going to look at all of this, so I'm for applying
this filter.

On 11/2/19, Michael Niedermayer <michael at niedermayer.cc> wrote:
> On Fri, Nov 01, 2019 at 09:38:39PM +0100, Paul B Mahol wrote:
>> On 11/1/19, Michael Niedermayer <michael at niedermayer.cc> wrote:
>> > On Fri, Nov 01, 2019 at 04:50:38PM +0100, Paul B Mahol wrote:
>> >> On 11/1/19, Michael Niedermayer <michael at niedermayer.cc> wrote:
>> >> > On Fri, Nov 01, 2019 at 01:09:24PM +0100, Paul B Mahol wrote:
>> >> >> Signed-off-by: Paul B Mahol <onemda at gmail.com>
>> >> >> ---
>> >> >>  doc/filters.texi         |  78 +++++
>> >> >>  libavfilter/Makefile     |   1 +
>> >> >>  libavfilter/allfilters.c |   1 +
>> >> >>  libavfilter/vf_eval.c    | 687
>> >> >> +++++++++++++++++++++++++++++++++++++++
>> >> >>  4 files changed, 767 insertions(+)
>> >> >>  create mode 100644 libavfilter/vf_eval.c
>> >> >
>> >> > This looks like it duplicates code from vf_geq.c
>> >> > also this should be integrated with or in vf_geq.c
>> >> >
>> >> > IIUC this was written because geq is GPL, but i had already agreed
>> >> > to
>> >> > relicense the code in it i wrote to LGPL, so iam not sure why you
>> >> > wrote
>> >> > this.
>> >> >
>> >> > Who disagreed to relicnce their contribution to geq to avoid this
>> >> > extra
>> >> > work you did ?
>> >> > Or did noone disagree ? then i do not understand why you wrote a
>> >> > seperate
>> >> > filter
>> >>
>> >> Do I need to contact all on blame list of vf_geq? or also mplayer devs
>> >> that touched geq in mplayer?
>> >
>> > all who touched it MINUS anyone who made a change that is totally not
>> > in the current version (there are several developers in mplayer who
>> > made auch changes)
>> > also in case of mplayer you may need to look at the commit messages
>> > some developers did apply patches from others.
>> >
>> > I took a quick look and these are the people i saw
>> > carl, ubitux, ivan, ods15, Alexis Ballier, derek, Marc-Antoine Arnaud,
>> > Nicolas George, Stefano and Paul
>> > reimar, zuxy and diego
>>
>> I do not think I can contact ods15.
>
> His change was this below (the others seems obviously not in the ffmpeg geq
> code)
> i didnt check the one below before because its big.
> But if we cannot contact him, then this should be checked
>
> Does any of this prevail in the ffmpeg geq code ?
> (if so tell me what and ill rewrite that)
>
> Thanks
>
> commit dd09bf52982fef6b29acfbcd5fa5c7cb46994c3b
> Author: ods15 <ods15 at b3059339-0415-0410-9bf9-f77b7e298cf2>
> Date:   Fri Oct 27 19:40:48 2006 +0000
>
>     update vf_geq to new ff_eval API
>
>
>     git-svn-id: svn://git.mplayerhq.hu/mplayer/trunk@20471
> b3059339-0415-0410-9bf9-f77b7e298cf2
>
> diff --git a/libmpcodecs/vf_geq.c b/libmpcodecs/vf_geq.c
> index da33eac71..e8b8c0918 100644
> --- a/libmpcodecs/vf_geq.c
> +++ b/libmpcodecs/vf_geq.c
> @@ -27,18 +27,12 @@
>  #include "mp_msg.h"
>  #include "cpudetect.h"
>
> -#if 1
> -double ff_eval(char *s, double *const_value, const char **const_name,
> -               double (**func1)(void *, double), const char **func1_name,
> -               double (**func2)(void *, double, double), char
> **func2_name,
> -               void *opaque);
> -#endif
> -
>  // Needed to bring in lrintf.
>  #define HAVE_AV_CONFIG_H
>
>  #include "libavcodec/avcodec.h"
>  #include "libavcodec/dsputil.h"
> +#include "libavcodec/eval.h"
>  #include "libavutil/common.h"
>
>  /* FIXME: common.h defines printf away when HAVE_AV_CONFIG
> @@ -57,7 +51,7 @@ double ff_eval(char *s, double *const_value, const char
> **const_name,
>
>
>  struct vf_priv_s {
> -       char eq[3][2000];
> +        AVEvalExpr * e[3];
>          int framenum;
>          mp_image_t *mpi;
>  };
> @@ -120,25 +114,6 @@ static double cr(struct vf_instance_s* vf, double x,
> double y){
>  static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double
> pts){
>         mp_image_t *dmpi;
>          int x,y, plane;
> -        static const char *const_names[]={
> -            "PI",
> -            "E",
> -            "X",
> -            "Y",
> -            "W",
> -            "H",
> -            "N",
> -            "SW",
> -            "SH",
> -            NULL
> -        };
> -        static const char *func2_names[]={
> -            "lum",
> -            "cb",
> -            "cr",
> -            "p",
> -            NULL
> -        };
>
>         if(!(mpi->flags&MP_IMGFLAG_DIRECT)){
>                 // no DR, so get a new image! hope we'll get DR buffer:
> @@ -157,13 +132,6 @@ static int put_image(struct vf_instance_s* vf,
> mp_image_t *mpi, double pts){
>              int h= mpi->h >> (plane ? mpi->chroma_y_shift : 0);
>              uint8_t *dst  = dmpi->planes[plane];
>              int dst_stride= dmpi->stride[plane];
> -            double (*func2[])(void *, double, double)={
> -                lum,
> -                cb,
> -                cr,
> -                plane==0 ? lum : (plane==1 ? cb : cr),
> -                NULL
> -            };
>              double const_values[]={
>                  M_PI,
>                  M_E,
> @@ -176,11 +144,12 @@ static int put_image(struct vf_instance_s* vf,
> mp_image_t *mpi, double pts){
>                  h/(double)mpi->h,
>                  0
>              };
> +            if (!vf->priv->e[plane]) continue;
>              for(y=0; y<h; y++){
>                  const_values[3]=y;
>                  for(x=0; x<w; x++){
>                      const_values[2]=x;
> -                    dst[x+y* dst_stride]= ff_eval(vf->priv->eq[plane],
> const_values, const_names, NULL, NULL, func2, func2_names, vf);
> +                    dst[x+y* dst_stride]= ff_parse_eval(vf->priv->e[plane],
> const_values, vf);
>                  }
>              }
>          }
> @@ -199,6 +168,9 @@ static void uninit(struct vf_instance_s* vf){
>
> //===========================================================================//
>  static int open(vf_instance_t *vf, char* args){
> +    char eq[3][2000] = { { 0 }, { 0 }, { 0 } };
> +    int plane;
> +
>      vf->config=config;
>      vf->put_image=put_image;
>  //    vf->get_image=get_image;
> @@ -206,10 +178,45 @@ static int open(vf_instance_t *vf, char* args){
>      vf->priv=av_malloc(sizeof(struct vf_priv_s));
>      memset(vf->priv, 0, sizeof(struct vf_priv_s));
>
> -    if (args) sscanf(args, "%1999s:%1999s:%1999s", vf->priv->eq[0],
> vf->priv->eq[1], vf->priv->eq[2]);
> +    if (args) sscanf(args, "%1999s:%1999s:%1999s", eq[0], eq[1], eq[2]);
> +
> +    if (!eq[1][0]) strncpy(eq[1], eq[0], sizeof(eq[0])-1);
> +    if (!eq[2][0]) strncpy(eq[2], eq[1], sizeof(eq[0])-1);
>
> -    if(!vf->priv->eq[1][0]) strncpy(vf->priv->eq[1], vf->priv->eq[0],
> sizeof(vf->priv->eq[0])-1);
> -    if(!vf->priv->eq[2][0]) strncpy(vf->priv->eq[2], vf->priv->eq[1],
> sizeof(vf->priv->eq[0])-1);
> +    for(plane=0; plane<3; plane++){
> +        static const char *const_names[]={
> +            "PI",
> +            "E",
> +            "X",
> +            "Y",
> +            "W",
> +            "H",
> +            "N",
> +            "SW",
> +            "SH",
> +            NULL
> +        };
> +        static const char *func2_names[]={
> +            "lum",
> +            "cb",
> +            "cr",
> +            "p",
> +            NULL
> +        };
> +        double (*func2[])(void *, double, double)={
> +            lum,
> +            cb,
> +            cr,
> +            plane==0 ? lum : (plane==1 ? cb : cr),
> +            NULL
> +        };
> +        char * a;
> +        vf->priv->e[plane] = ff_parse(eq[plane], const_names, NULL, NULL,
> func2, func2_names, &a);
> +
> +        if (!vf->priv->e[plane]) {
> +            mp_msg(MSGT_VFILTER, MSGL_ERR, "geq: error loading equation
> `%s': %s\n", eq[plane], a);
> +        }
> +    }
>
>      return 1;
>  }
>
>
>
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> In fact, the RIAA has been known to suggest that students drop out
> of college or go to community college in order to be able to afford
> settlements. -- The RIAA
>


More information about the ffmpeg-devel mailing list