[FFmpeg-devel] [PATCH 3/5] metadata: add av_metadata_clone_ctx() function

Anton Khirnov anton
Sun Oct 3 21:14:24 CEST 2010


From: Anton Khirnov <wyskas at gmail.com>

---
 libavformat/avformat.h |    7 +++++++
 libavformat/metadata.c |   17 +++++++++++++++++
 2 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index a9fb39f..ab4cf05 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -214,6 +214,13 @@ int av_metadata_clone(AVMetadata **src, AVMetadata **dst, const AVMetadataConv *
                       const char *pattern, int flags);
 
 /**
+ * Clone all (global, per-stream, per-program, per-chapter) metadata from src to
+ * dst. Parameters have the same meaning as for av_metadata_clone().
+ */
+void av_metadata_clone_ctx(struct AVFormatContext *src, struct AVFormatContext *dst,
+                           const AVMetadataConv *dst_fmt, const uint8_t *pattern, int flags);
+
+/**
  * Free all the memory allocated for an AVMetadata struct.
  */
 void av_metadata_free(AVMetadata **m);
diff --git a/libavformat/metadata.c b/libavformat/metadata.c
index 2a91219..16ddb34 100644
--- a/libavformat/metadata.c
+++ b/libavformat/metadata.c
@@ -211,3 +211,20 @@ int av_metadata_clone(AVMetadata **src, AVMetadata **dst, const AVMetadataConv *
 
     return 0;
 }
+
+void av_metadata_clone_ctx(AVFormatContext *src, AVFormatContext *dst, const AVMetadataConv *dst_fmt,
+                           const uint8_t *pattern, int flags)
+{
+    int i;
+    av_metadata_clone(&src->metadata, &dst->metadata, dst_fmt, pattern, flags);
+    for (i = 0; i < FFMIN(src->nb_streams, dst->nb_streams); i++)
+        av_metadata_clone(&src->streams[i]->metadata, &dst->streams[i]->metadata,
+                          dst_fmt, pattern, flags);
+    for (i = 0; i < FFMIN(src->nb_chapters, dst->nb_chapters); i++)
+        av_metadata_clone(&src->chapters[i]->metadata, &dst->chapters[i]->metadata,
+                          dst_fmt, pattern, flags);
+    for (i = 0; i < FFMIN(src->nb_programs, dst->nb_programs); i++)
+        av_metadata_clone(&src->programs[i]->metadata, &dst->programs[i]->metadata,
+                          dst_fmt, pattern, flags);
+
+}
-- 
1.7.1




More information about the ffmpeg-devel mailing list