[FFmpeg-devel] [PATCH 1/4] lavfi: add metadata to buffer ref.

Stefano Sabatini stefasab at gmail.com
Thu Oct 11 11:34:24 CEST 2012


On date Wednesday 2012-10-10 00:55:10 +0200, Clément Bœsch encoded:
> From: Thomas Kühnel <kuehnelth at googlemail.com>
> 
> Signed-off-by: Thomas Kühnel <kuehnelth at googlemail.com>
> Signed-off-by: Clément Bœsch <ubitux at gmail.com>
> ---
>  libavfilter/avcodec.c  | 6 ++++++
>  libavfilter/avfilter.h | 2 ++
>  libavfilter/buffer.c   | 8 ++++++++
>  3 files changed, 16 insertions(+)
> 
> diff --git a/libavfilter/avcodec.c b/libavfilter/avcodec.c
> index a0f8b69..411f1dd 100644
> --- a/libavfilter/avcodec.c
> +++ b/libavfilter/avcodec.c
> @@ -33,6 +33,9 @@ int avfilter_copy_frame_props(AVFilterBufferRef *dst, const AVFrame *src)
>      dst->pos    = av_frame_get_pkt_pos(src);
>      dst->format = src->format;
>  

> +    dst->metadata = NULL;
> +    av_dict_copy(&dst->metadata, src->metadata, 0);
> +

leak if dst->metadata is already defined?

>      switch (dst->type) {
>      case AVMEDIA_TYPE_VIDEO:
>          dst->video->w                   = src->width;
> @@ -121,6 +124,9 @@ int avfilter_copy_buf_props(AVFrame *dst, const AVFilterBufferRef *src)
>      dst->format  = src->format;
>      av_frame_set_pkt_pos(dst, src->pos);
>  
> +    dst->metadata = NULL;
> +    av_dict_copy(&dst->metadata, src->metadata, 0);
> +
>      switch (src->type) {
>      case AVMEDIA_TYPE_VIDEO:
>          av_assert0(src->video);
> diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h
> index 510f28a..c171826 100644
> --- a/libavfilter/avfilter.h
> +++ b/libavfilter/avfilter.h
> @@ -180,6 +180,8 @@ typedef struct AVFilterBufferRef {
>      int perms;                  ///< permissions, see the AV_PERM_* flags
>  
>      enum AVMediaType type;      ///< media type of buffer data
> +
> +    AVDictionary *metadata;

Missing doxy, explaining what it this all about (a line should be enough).

>  } AVFilterBufferRef;
>  
>  /**
> diff --git a/libavfilter/buffer.c b/libavfilter/buffer.c
> index fc65b82..ae1867f 100644
> --- a/libavfilter/buffer.c
> +++ b/libavfilter/buffer.c
> @@ -54,6 +54,10 @@ AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask)
>      if (!ret)
>          return NULL;
>      *ret = *ref;
> +
> +    ret->metadata = NULL;
> +    av_dict_copy(&ret->metadata, ref->metadata, 0);
> +
>      if (ref->type == AVMEDIA_TYPE_VIDEO) {
>          ret->video = av_malloc(sizeof(AVFilterBufferRefVideoProps));
>          if (!ret->video) {
> @@ -172,6 +176,7 @@ void avfilter_unref_buffer(AVFilterBufferRef *ref)
>          av_freep(&ref->video->qp_table);
>      av_freep(&ref->video);
>      av_freep(&ref->audio);
> +    av_dict_free(&ref->metadata);
>      av_free(ref);
>  }
>  
> @@ -197,6 +202,9 @@ void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilterBufferRef *s
>      case AVMEDIA_TYPE_AUDIO: *dst->audio = *src->audio; break;
>      default: break;
>      }
> +
> +    av_dict_free(&dst->metadata);
> +    av_dict_copy(&dst->metadata, src->metadata, 0);
>  }
>  
>  AVFilterBufferRef *ff_copy_buffer_ref(AVFilterLink *outlink,

TODO: APIChanges entry, lavfi minor bump.

LGTM otherwise, thanks.
-- 
FFmpeg = Fast and Fabulous Multimedia Problematic Encoding/decoding Guide


More information about the ffmpeg-devel mailing list