[FFmpeg-devel] [PATCH] Fix opt_default()

Stefano Sabatini stefano.sabatini-lala
Tue Dec 16 01:49:50 CET 2008


On date Tuesday 2008-12-16 00:31:02 +0100, Stefano Sabatini encoded:
[...]
> > > Index: ffmpeg/libavcodec/opt.h
> > > ===================================================================
> > > --- ffmpeg.orig/libavcodec/opt.h	2008-12-14 23:17:27.000000000 +0100
> > > +++ ffmpeg/libavcodec/opt.h	2008-12-14 23:21:18.000000000 +0100
> > 
> > > @@ -105,6 +105,14 @@
> > >  attribute_deprecated const AVOption *av_set_string(void *obj, const char *name, const char *val);
> > >  
> > >  /**
> > > + * @return a pointer to the AVOption corresponding to the field set or
> > > + * NULL if no matching AVOption exists, or if the value \p val is not
> > > + * valid
> > > + * @see av_set_string3()
> > > + */
> > > +const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc);
> > > +
> > 
> > this should be under #ifdefs to remove it with the next major bump
> 
> So I think it should be deprecated and ifdeffed at the same time. See
> the attached patches (unfortunately there is still a warning which I
> think we cannot avoid).

No, that wasn't true.

> > > +/**
> > >   * Sets the field of obj with the given name to value.
> > >   *
> > >   * @param[in] obj A struct whose first element is a pointer to an
> > > @@ -120,14 +128,15 @@
> > >   * scalars or named flags separated by '+' or '-'. Prefixing a flag
> > >   * with '+' causes it to be set without affecting the other flags;
> > >   * similarly, '-' unsets a flag.
> > > - * @return a pointer to the AVOption corresponding to the field set or
> > > - * NULL if no matching AVOption exists, or if the value \p val is not
> > > - * valid
> > 
> > > + * @param[in,out] o_out if non-NULL put here a pointer to the AVOption
> > > + * found
> > 
> > id say this is just [out]
> 
> Fixed.

[...]
> Index: ffmpeg/libavcodec/opt.c
> ===================================================================
> --- ffmpeg.orig/libavcodec/opt.c	2008-12-15 23:38:55.000000000 +0100
> +++ ffmpeg/libavcodec/opt.c	2008-12-15 23:46:35.000000000 +0100
> @@ -107,10 +107,16 @@
>      return -1;
>  }
>  
> -const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc){
> +int av_set_string3(void *obj, const char *name, const char *val, int alloc, const AVOption **o_out){
> +    int ret;
>      const AVOption *o= av_find_opt(obj, name, NULL, 0, 0);
> -    if(!o || !val || o->offset<=0)
> -        return NULL;
> +    if (o_out)
> +        *o_out = o;
> +    if(!o)
> +        return AVERROR(ENOENT);
> +    if(!val || o->offset<=0)
> +        return AVERROR(EINVAL);
> +
>      if(o->type == FF_OPT_TYPE_BINARY){
>          uint8_t **dst = (uint8_t **)(((uint8_t*)obj) + o->offset);
>          int *lendst = (int *)(dst + 1);
> @@ -118,7 +124,7 @@
>          int len = strlen(val);
>          av_freep(dst);
>          *lendst = 0;
> -        if (len & 1) return NULL;
> +        if (len & 1) return AVERROR(EINVAL);
>          len /= 2;
>          ptr = bin = av_malloc(len);
>          while (*val) {
> @@ -126,13 +132,13 @@
>              int b = hexchar2int(*val++);
>              if (a < 0 || b < 0) {
>                  av_free(bin);
> -                return NULL;
> +                return AVERROR(EINVAL);
>              }
>              *ptr++ = (a << 4) | b;
>          }
>          *dst = bin;
>          *lendst = len;
> -        return o;
> +        return 0;
>      }
>      if(o->type != FF_OPT_TYPE_STRING){
>          int notfirst=0;
> @@ -163,7 +169,7 @@
>                  else {
>                      if (error)
>                          av_log(NULL, AV_LOG_ERROR, "Unable to parse option value \"%s\": %s\n", val, error);
> -                    return NULL;
> +                    return AVERROR(EINVAL);
>                  }
>              }
>              if(o->type == FF_OPT_TYPE_FLAGS){
> @@ -174,14 +180,14 @@
>                  else if(cmd=='-') d= notfirst*av_get_double(obj, name, NULL) - d;
>              }
>  
> -            if (!av_set_number(obj, name, d, 1, 1))
> -                return NULL;
> +            if ((ret = av_set_number2(obj, name, d, 1, 1, o_out)) < 0)
> +                return ret;
>              val+= i;
>              if(!*val)
> -                return o;
> +                return 0;
>              notfirst=1;
>          }
> -        return NULL;
> +        return AVERROR(EINVAL);
>      }
>  
>      if(alloc){
> @@ -190,6 +196,13 @@
>      }
>  
>      memcpy(((uint8_t*)obj) + o->offset, &val, sizeof(val));
> +    return 0;
> +}
> +
> +const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc){
> +    const AVOption *o;
> +    if (av_set_string3(obj, name, val, 0, &o) < 0)
                                          ^
Ooops...

New patchset attached.

Regards.
-- 
FFmpeg = Forgiving & Furious Multimedia Powered Enchanting Guru
-------------- next part --------------
A non-text attachment was scrubbed...
Name: implement-av-set-string3.patch
Type: text/x-diff
Size: 4617 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20081216/06a63c9b/attachment.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fix-opt-default.patch
Type: text/x-diff
Size: 1881 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20081216/06a63c9b/attachment-0001.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: use-av-set-string3.patch
Type: text/x-diff
Size: 1892 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20081216/06a63c9b/attachment-0002.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: replace-o2.patch
Type: text/x-diff
Size: 551 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20081216/06a63c9b/attachment-0003.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ifdef-av-set-string12.patch
Type: text/x-diff
Size: 1420 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20081216/06a63c9b/attachment-0004.patch>



More information about the ffmpeg-devel mailing list