Merge commit '21bc44038491e525335ad763883b0288402ff6a0'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 5 Sep 2012 12:52:52 +0000 (14:52 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 5 Sep 2012 12:52:52 +0000 (14:52 +0200)
* commit '21bc44038491e525335ad763883b0288402ff6a0':
  avopt: Explicitly store rational option defaults in .dbl

Conflicts:
libavfilter/buffersrc.c
libavfilter/vsrc_testsrc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavfilter/buffersrc.c
libavutil/opt.c

@@@ -155,94 -160,42 +155,94 @@@ int av_buffersrc_add_ref(AVFilterContex
      return 0;
  }
  
-     { "time_base",      NULL, OFFSET(time_base),           AV_OPT_TYPE_RATIONAL,   { 0 }, 0, INT_MAX, FLAGS },
-     { "frame_rate",     NULL, OFFSET(frame_rate),          AV_OPT_TYPE_RATIONAL,   { 0 }, 0, INT_MAX, FLAGS },
 +#ifdef FF_API_BUFFERSRC_BUFFER
 +int av_buffersrc_buffer(AVFilterContext *s, AVFilterBufferRef *buf)
 +{
 +    return av_buffersrc_add_ref(s, buf, AV_BUFFERSRC_FLAG_NO_COPY);
 +}
 +#endif
 +
 +unsigned av_buffersrc_get_nb_failed_requests(AVFilterContext *buffer_src)
 +{
 +    return ((BufferSourceContext *)buffer_src->priv)->nb_failed_requests;
 +}
 +
 +#define OFFSET(x) offsetof(BufferSourceContext, x)
 +#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
 +static const AVOption buffer_options[] = {
-     { "pixel_aspect",   NULL, OFFSET(pixel_aspect),        AV_OPT_TYPE_RATIONAL,   { 0 }, 0, INT_MAX, FLAGS },
++    { "time_base",      NULL, OFFSET(time_base),           AV_OPT_TYPE_RATIONAL,   { .dbl = 0 }, 0, INT_MAX, FLAGS },
++    { "frame_rate",     NULL, OFFSET(frame_rate),          AV_OPT_TYPE_RATIONAL,   { .dbl = 0 }, 0, INT_MAX, FLAGS },
 +    { "video_size",     NULL, OFFSET(w),                   AV_OPT_TYPE_IMAGE_SIZE, .flags = FLAGS },
 +    { "pix_fmt",        NULL, OFFSET(pix_fmt),             AV_OPT_TYPE_PIXEL_FMT,  .flags = FLAGS },
++    { "pixel_aspect",   NULL, OFFSET(pixel_aspect),        AV_OPT_TYPE_RATIONAL,   { .dbl = 0 }, 0, INT_MAX, FLAGS },
 +    { "sws_param",      NULL, OFFSET(sws_param),           AV_OPT_TYPE_STRING,     .flags = FLAGS },
 +    { NULL },
 +};
 +#undef FLAGS
 +
 +AVFILTER_DEFINE_CLASS(buffer);
 +
  static av_cold int init_video(AVFilterContext *ctx, const char *args)
  {
      BufferSourceContext *c = ctx->priv;
 -    char pix_fmt_str[128];
 -    int n = 0;
 +    char pix_fmt_str[128], sws_param[256] = "", *colon, *equal;
 +    int ret, n = 0;
  
 -    if (!args ||
 -        (n = sscanf(args, "%d:%d:%127[^:]:%d:%d:%d:%d", &c->w, &c->h, pix_fmt_str,
 -                    &c->time_base.num, &c->time_base.den,
 -                    &c->pixel_aspect.num, &c->pixel_aspect.den)) != 7) {
 -        av_log(ctx, AV_LOG_ERROR, "Expected 7 arguments, but %d found in '%s'\n", n, args);
 +    c->class = &buffer_class;
 +
 +    if (!args) {
 +        av_log(ctx, AV_LOG_ERROR, "Arguments required\n");
          return AVERROR(EINVAL);
      }
 -    if ((c->pix_fmt = av_get_pix_fmt(pix_fmt_str)) == PIX_FMT_NONE) {
 -        char *tail;
 -        c->pix_fmt = strtol(pix_fmt_str, &tail, 10);
 -        if (*tail || c->pix_fmt < 0 || c->pix_fmt >= PIX_FMT_NB) {
 -            av_log(ctx, AV_LOG_ERROR, "Invalid pixel format string '%s'\n", pix_fmt_str);
 -            return AVERROR(EINVAL);
 -        }
 +    colon = strchr(args, ':');
 +    equal = strchr(args, '=');
 +    if (equal && (!colon || equal < colon)) {
 +        av_opt_set_defaults(c);
 +        ret = av_set_options_string(c, args, "=", ":");
 +        if (ret < 0)
 +            goto fail;
 +    } else {
 +    if ((n = sscanf(args, "%d:%d:%127[^:]:%d:%d:%d:%d:%255c", &c->w, &c->h, pix_fmt_str,
 +                    &c->time_base.num, &c->time_base.den,
 +                    &c->pixel_aspect.num, &c->pixel_aspect.den, sws_param)) < 7) {
 +        av_log(ctx, AV_LOG_ERROR, "Expected at least 7 arguments, but only %d found in '%s'\n", n, args);
 +        ret = AVERROR(EINVAL);
 +        goto fail;
      }
 +    av_log(ctx, AV_LOG_WARNING, "Flat options syntax is deprecated, use key=value pairs\n");
  
 -    if (!(c->fifo = av_fifo_alloc(sizeof(AVFilterBufferRef*))))
 -        return AVERROR(ENOMEM);
 +    if ((ret = ff_parse_pixel_format(&c->pix_fmt, pix_fmt_str, ctx)) < 0)
 +        goto fail;
 +    c->sws_param = av_strdup(sws_param);
 +    if (!c->sws_param) {
 +        ret = AVERROR(ENOMEM);
 +        goto fail;
 +    }
 +    }
  
 -    av_log(ctx, AV_LOG_VERBOSE, "w:%d h:%d pixfmt:%s\n", c->w, c->h, av_pix_fmt_descriptors[c->pix_fmt].name);
 +    if (!(c->fifo = av_fifo_alloc(sizeof(AVFilterBufferRef*)))) {
 +        ret = AVERROR(ENOMEM);
 +        goto fail;
 +    }
 +
 +    av_log(ctx, AV_LOG_VERBOSE, "w:%d h:%d pixfmt:%s tb:%d/%d fr:%d/%d sar:%d/%d sws_param:%s\n",
 +           c->w, c->h, av_pix_fmt_descriptors[c->pix_fmt].name,
 +           c->time_base.num, c->time_base.den, c->frame_rate.num, c->frame_rate.den,
 +           c->pixel_aspect.num, c->pixel_aspect.den, (char *)av_x_if_null(c->sws_param, ""));
 +    c->warning_limit = 100;
      return 0;
 +
 +fail:
 +    av_opt_free(c);
 +    return ret;
  }
  
 -#define OFFSET(x) offsetof(BufferSourceContext, x)
 -#define A AV_OPT_FLAG_AUDIO_PARAM
 -static const AVOption audio_options[] = {
 -    { "time_base",      NULL, OFFSET(time_base),           AV_OPT_TYPE_RATIONAL, { .dbl = 0 }, 0, INT_MAX, A },
 -    { "sample_rate",    NULL, OFFSET(sample_rate),         AV_OPT_TYPE_INT,      { .i64 = 0 }, 0, INT_MAX, A },
 -    { "sample_fmt",     NULL, OFFSET(sample_fmt_str),      AV_OPT_TYPE_STRING,             .flags = A },
 -    { "channel_layout", NULL, OFFSET(channel_layout_str),  AV_OPT_TYPE_STRING,             .flags = A },
 +#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_AUDIO_PARAM
 +static const AVOption abuffer_options[] = {
-     { "time_base",      NULL, OFFSET(time_base),           AV_OPT_TYPE_RATIONAL, { 0 }, 0, INT_MAX, FLAGS },
++    { "time_base",      NULL, OFFSET(time_base),           AV_OPT_TYPE_RATIONAL, { .dbl = 0 }, 0, INT_MAX, FLAGS },
 +    { "sample_rate",    NULL, OFFSET(sample_rate),         AV_OPT_TYPE_INT,      { .i64 = 0 }, 0, INT_MAX, FLAGS },
 +    { "sample_fmt",     NULL, OFFSET(sample_fmt_str),      AV_OPT_TYPE_STRING, .flags = FLAGS },
 +    { "channel_layout", NULL, OFFSET(channel_layout_str),  AV_OPT_TYPE_STRING, .flags = FLAGS },
      { NULL },
  };
  
diff --cc libavutil/opt.c
Simple merge