Merge commit 'c3ecd968f0e78da6e77f0c06c2f785b266d83cf1'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 20 Feb 2014 01:01:13 +0000 (02:01 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 20 Feb 2014 01:01:13 +0000 (02:01 +0100)
* commit 'c3ecd968f0e78da6e77f0c06c2f785b266d83cf1':
  AVOptions: add flags for read/read-only options

Conflicts:
libavutil/opt.c
libavutil/opt.h
libavutil/version.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
doc/APIchanges
libavutil/opt.c
libavutil/opt.h
libavutil/version.h

diff --cc doc/APIchanges
Simple merge
diff --cc libavutil/opt.c
@@@ -367,13 -213,9 +367,16 @@@ int av_opt_set(void *obj, const char *n
      const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj);
      if (!o || !target_obj)
          return AVERROR_OPTION_NOT_FOUND;
 -    if (!val || o->flags & AV_OPT_FLAG_READONLY)
 +    if (!val && (o->type != AV_OPT_TYPE_STRING &&
 +                 o->type != AV_OPT_TYPE_PIXEL_FMT && o->type != AV_OPT_TYPE_SAMPLE_FMT &&
 +                 o->type != AV_OPT_TYPE_IMAGE_SIZE && o->type != AV_OPT_TYPE_VIDEO_RATE &&
 +                 o->type != AV_OPT_TYPE_DURATION && o->type != AV_OPT_TYPE_COLOR &&
 +                 o->type != AV_OPT_TYPE_CHANNEL_LAYOUT))
 +        return AVERROR(EINVAL);
 +
++    if (o->flags & AV_OPT_FLAG_READONLY)
+         return AVERROR(EINVAL);
      dst = ((uint8_t*)target_obj) + o->offset;
      switch (o->type) {
      case AV_OPT_TYPE_STRING:   return set_string(obj, o, val, dst);
@@@ -502,11 -289,11 +508,11 @@@ int av_opt_set_bin(void *obj, const cha
      if (!o || !target_obj)
          return AVERROR_OPTION_NOT_FOUND;
  
-     if (o->type != AV_OPT_TYPE_BINARY)
+     if (o->type != AV_OPT_TYPE_BINARY || o->flags & AV_OPT_FLAG_READONLY)
          return AVERROR(EINVAL);
  
 -    ptr = av_malloc(len);
 -    if (!ptr)
 +    ptr = len ? av_malloc(len) : NULL;
 +    if (len && !ptr)
          return AVERROR(ENOMEM);
  
      dst = (uint8_t **)(((uint8_t *)target_obj) + o->offset);
@@@ -1130,21 -508,11 +1138,25 @@@ int av_opt_show2(void *obj, void *av_lo
  
  void av_opt_set_defaults(void *s)
  {
 +#if FF_API_OLD_AVOPTIONS
 +    av_opt_set_defaults2(s, 0, 0);
 +}
 +
 +void av_opt_set_defaults2(void *s, int mask, int flags)
 +{
 +#endif
 +    const AVClass *class = *(AVClass **)s;
      const AVOption *opt = NULL;
      while ((opt = av_opt_next(s, opt)) != NULL) {
 +        void *dst = ((uint8_t*)s) + opt->offset;
 +#if FF_API_OLD_AVOPTIONS
 +        if ((opt->flags & mask) != flags)
 +            continue;
 +#endif
++
+         if (opt->flags & AV_OPT_FLAG_READONLY)
+             continue;
          switch (opt->type) {
              case AV_OPT_TYPE_CONST:
                  /* Nothing to be done here */
diff --cc libavutil/opt.h
@@@ -288,7 -268,15 +288,16 @@@ typedef struct AVOption 
  #define AV_OPT_FLAG_AUDIO_PARAM     8
  #define AV_OPT_FLAG_VIDEO_PARAM     16
  #define AV_OPT_FLAG_SUBTITLE_PARAM  32
+ /**
+  * The option is inteded for exporting values to the caller.
+  */
+ #define AV_OPT_FLAG_EXPORT          64
+ /**
+  * The option may not be set through the AVOptions API, only read.
+  * This flag only makes sense when AV_OPT_FLAG_EXPORT is also set.
+  */
+ #define AV_OPT_FLAG_READONLY        128
 +#define AV_OPT_FLAG_FILTERING_PARAM (1<<16) ///< a generic parameter which can be set by the user for filtering
  //FIXME think about enc-audio, ... style flags
  
      /**
@@@ -55,9 -53,9 +55,9 @@@
   * @{
   */
  
 -#define LIBAVUTIL_VERSION_MAJOR 53
 -#define LIBAVUTIL_VERSION_MINOR  4
 -#define LIBAVUTIL_VERSION_MICRO  0
 +#define LIBAVUTIL_VERSION_MAJOR  52
- #define LIBAVUTIL_VERSION_MINOR  64
- #define LIBAVUTIL_VERSION_MICRO 101
++#define LIBAVUTIL_VERSION_MINOR  65
++#define LIBAVUTIL_VERSION_MICRO 100
  
  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                 LIBAVUTIL_VERSION_MINOR, \