]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
Add a metadata compatibility layer, so that when a user application set
authoraurel <aurel@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Tue, 6 Jan 2009 00:09:23 +0000 (00:09 +0000)
committeraurel <aurel@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Tue, 6 Jan 2009 00:09:23 +0000 (00:09 +0000)
metadata using old API, it is automatically converted to new API before
muxing.

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@16447 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavformat/metadata.c
libavformat/metadata.h
libavformat/utils.c

index fec80d98222b5ff5c9d4c2d7c655c8fe1485190a..8a25782f29ee4636b12ca7a12783f1feb4d814bf 100644 (file)
@@ -73,3 +73,40 @@ int av_metadata_set(AVMetadata **pm, AVMetadataTag elem)
 
     return 0;
 }
+
+#if LIBAVFORMAT_VERSION_MAJOR < 53
+#define FILL_METADATA(s, key, value) {                                        \
+    if (value && *value &&                                                    \
+        !av_metadata_get(s->metadata, #key, NULL, AV_METADATA_IGNORE_CASE))   \
+        av_metadata_set(&s->metadata, (const AVMetadataTag){#key, value});    \
+    }
+#define FILL_METADATA_STR(s, key)  FILL_METADATA(s, key, s->key)
+#define FILL_METADATA_INT(s, key) {                                           \
+    char number[10];                                                          \
+    snprintf(number, sizeof(number), "%d", s->key);                           \
+    FILL_METADATA(s, key, number) }
+
+void ff_metadata_sync_compat(AVFormatContext *ctx)
+{
+    int i;
+
+    FILL_METADATA_STR(ctx, title);
+    FILL_METADATA_STR(ctx, author);
+    FILL_METADATA_STR(ctx, copyright);
+    FILL_METADATA_STR(ctx, comment);
+    FILL_METADATA_STR(ctx, album);
+    FILL_METADATA_INT(ctx, year);
+    FILL_METADATA_INT(ctx, track);
+    FILL_METADATA_STR(ctx, genre);
+    for (i=0; i<ctx->nb_chapters; i++)
+        FILL_METADATA_STR(ctx->chapters[i], title);
+    for (i=0; i<ctx->nb_programs; i++) {
+        FILL_METADATA_STR(ctx->programs[i], name);
+        FILL_METADATA_STR(ctx->programs[i], provider_name);
+    }
+    for (i=0; i<ctx->nb_streams; i++) {
+        FILL_METADATA_STR(ctx->streams[i], language);
+        FILL_METADATA_STR(ctx->streams[i], filename);
+    }
+}
+#endif
index 515b6cdb3b0814f99a04a1ea5f0767f8d30a6f9f..2826ecc72e3ae65545d257d4cf52ac6d817ed180 100644 (file)
@@ -35,4 +35,8 @@ struct AVMetadata{
     AVMetadataTag *elems;
 };
 
+#if LIBAVFORMAT_VERSION_MAJOR < 53
+void ff_metadata_sync_compat(AVFormatContext *s);
+#endif
+
 #endif /* AVFORMAT_METADATA_H */
index 68cb0da6c43e0bf54465906ab79d929197001d46..e3fdd7f74498369a90d4e526e50c85e7b2b0e88f 100644 (file)
@@ -2501,6 +2501,10 @@ int av_write_header(AVFormatContext *s)
             return AVERROR(ENOMEM);
     }
 
+#if LIBAVFORMAT_VERSION_MAJOR < 53
+    ff_metadata_sync_compat(s);
+#endif
+
     if(s->oformat->write_header){
         ret = s->oformat->write_header(s);
         if (ret < 0)