[FFmpeg-devel] [PATCH 4/5] metadata: deprecate old conversion API
Anton Khirnov
anton
Sun Oct 3 21:14:25 CEST 2010
From: Anton Khirnov <wyskas at gmail.com>
also remove internal func metadata_conv() and replace it with
av_metadata_clone().
---
doc/APIchanges | 4 +++
libavformat/asfdec.c | 2 +
libavformat/avformat.h | 12 +++++++---
libavformat/avidec.c | 2 +
libavformat/flacdec.c | 2 +
libavformat/matroskadec.c | 2 +
libavformat/metadata.c | 49 +++++++++++----------------------------------
libavformat/metadata.h | 3 --
libavformat/mp3.c | 2 +
libavformat/nutdec.c | 2 +
libavformat/oggdec.c | 2 +
libavformat/oma.c | 2 +
libavformat/utils.c | 5 +---
13 files changed, 41 insertions(+), 48 deletions(-)
diff --git a/doc/APIchanges b/doc/APIchanges
index 81fd08d..fcb7f20 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -13,6 +13,10 @@ libavutil: 2009-03-08
API changes, most recent first:
+2010-10-xx - r25xxx - lavf 52.80.0 - metadata API
+ Add new metadata conversion API (av_metadata_clone()),
+ deprecate old API.
+
2010-09-27 - r25236 - lavu 50.31.0 - av_set_options_string()
Move av_set_options_string() from libavfilter/parseutils.h to
libavutil/opt.h.
diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c
index 59b075c..0bb7c79 100644
--- a/libavformat/asfdec.c
+++ b/libavformat/asfdec.c
@@ -1237,5 +1237,7 @@ AVInputFormat asf_demuxer = {
asf_read_close,
asf_read_seek,
asf_read_pts,
+#if FF_API_OLD_METADATA
.metadata_conv = ff_asf_metadata_conv,
+#endif
};
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index ab4cf05..e36ac05 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -22,7 +22,7 @@
#define AVFORMAT_AVFORMAT_H
#define LIBAVFORMAT_VERSION_MAJOR 52
-#define LIBAVFORMAT_VERSION_MINOR 79
+#define LIBAVFORMAT_VERSION_MINOR 80
#define LIBAVFORMAT_VERSION_MICRO 0
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
@@ -186,6 +186,7 @@ attribute_deprecated int av_metadata_set(AVMetadata **pm, const char *key, const
*/
int av_metadata_set2(AVMetadata **pm, const char *key, const char *value, int flags);
+#if FF_API_OLD_METADATA
/**
* Convert all the metadata sets from ctx according to the source and
* destination conversion tables. If one of the tables is NULL, then
@@ -194,8 +195,9 @@ int av_metadata_set2(AVMetadata **pm, const char *key, const char *value, int fl
* @param d_conv destination tags format conversion table
* @param s_conv source tags format conversion table
*/
-void av_metadata_conv(struct AVFormatContext *ctx, const AVMetadataConv *d_conv,
- const AVMetadataConv *s_conv);
+attribute_deprecated void av_metadata_conv(struct AVFormatContext *ctx, const AVMetadataConv *d_conv,
+ const AVMetadataConv *s_conv);
+#endif // FF_API_OLD_METADATA
/**
* Copy metadata from src to dst, converting between their respective formats.
@@ -457,7 +459,9 @@ typedef struct AVInputFormat {
*/
int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags);
- const AVMetadataConv *metadata_conv;
+#if FF_API_OLD_METADATA
+ attribute_deprecated const AVMetadataConv *metadata_conv;
+#endif
/* private fields */
struct AVInputFormat *next;
diff --git a/libavformat/avidec.c b/libavformat/avidec.c
index 6bd4fd9..521f48d 100644
--- a/libavformat/avidec.c
+++ b/libavformat/avidec.c
@@ -1333,5 +1333,7 @@ AVInputFormat avi_demuxer = {
avi_read_packet,
avi_read_close,
avi_read_seek,
+#if FF_API_OLD_METADATA
.metadata_conv = ff_avi_metadata_conv,
+#endif
};
diff --git a/libavformat/flacdec.c b/libavformat/flacdec.c
index e54fb39..63761ee 100644
--- a/libavformat/flacdec.c
+++ b/libavformat/flacdec.c
@@ -147,5 +147,7 @@ AVInputFormat flac_demuxer = {
.flags= AVFMT_GENERIC_INDEX,
.extensions = "flac",
.value = CODEC_ID_FLAC,
+#if FF_API_OLD_METADATA
.metadata_conv = ff_vorbiscomment_metadata_conv,
+#endif
};
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 964ed8c..74c9eba 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -1925,5 +1925,7 @@ AVInputFormat matroska_demuxer = {
matroska_read_packet,
matroska_read_close,
matroska_read_seek,
+#if FF_API_OLD_METADATA
.metadata_conv = ff_mkv_metadata_conv,
+#endif
};
diff --git a/libavformat/metadata.c b/libavformat/metadata.c
index 16ddb34..0ce78e6 100644
--- a/libavformat/metadata.c
+++ b/libavformat/metadata.c
@@ -107,51 +107,26 @@ void av_metadata_free(AVMetadata **pm)
av_freep(pm);
}
-void metadata_conv(AVMetadata **pm, const AVMetadataConv *d_conv,
- const AVMetadataConv *s_conv)
-{
- /* TODO: use binary search to look up the two conversion tables
- if the tables are getting big enough that it would matter speed wise */
- const AVMetadataConv *sc, *dc;
- AVMetadataTag *mtag = NULL;
- AVMetadata *dst = NULL;
- const char *key;
-
- if (d_conv == s_conv)
- return;
-
- while((mtag=av_metadata_get(*pm, "", mtag, AV_METADATA_IGNORE_SUFFIX))) {
- key = mtag->key;
- if (s_conv)
- for (sc=s_conv; sc->native; sc++)
- if (!strcasecmp(key, sc->native)) {
- key = sc->generic;
- break;
- }
- if (d_conv)
- for (dc=d_conv; dc->native; dc++)
- if (!strcasecmp(key, dc->generic)) {
- key = dc->native;
- break;
- }
- av_metadata_set2(&dst, key, mtag->value, 0);
- }
- av_metadata_free(pm);
- *pm = dst;
-}
-
+#if FF_API_OLD_METADATA
void av_metadata_conv(AVFormatContext *ctx, const AVMetadataConv *d_conv,
const AVMetadataConv *s_conv)
{
int i;
- metadata_conv(&ctx->metadata, d_conv, s_conv);
+ if (ctx->metadata)
+ ctx->metadata->cur_fmt = s_conv;
for (i=0; i<ctx->nb_streams ; i++)
- metadata_conv(&ctx->streams [i]->metadata, d_conv, s_conv);
+ if (ctx->streams[i]->metadata)
+ ctx->streams[i]->metadata->cur_fmt = s_conv;
for (i=0; i<ctx->nb_chapters; i++)
- metadata_conv(&ctx->chapters[i]->metadata, d_conv, s_conv);
+ if (ctx->chapters[i]->metadata)
+ ctx->chapters[i]->metadata->cur_fmt = s_conv;
for (i=0; i<ctx->nb_programs; i++)
- metadata_conv(&ctx->programs[i]->metadata, d_conv, s_conv);
+ if (ctx->programs[i]->metadata)
+ ctx->programs[i]->metadata->cur_fmt = s_conv;
+
+ av_metadata_clone_ctx(ctx, ctx, d_conv, NULL, 0);
}
+#endif
int av_metadata_clone(AVMetadata **src, AVMetadata **dst, const AVMetadataConv *dst_fmt,
const char *pattern, int flags)
diff --git a/libavformat/metadata.h b/libavformat/metadata.h
index 4e54904..48825a0 100644
--- a/libavformat/metadata.h
+++ b/libavformat/metadata.h
@@ -46,7 +46,4 @@ void ff_metadata_demux_compat(AVFormatContext *s);
void ff_metadata_mux_compat(AVFormatContext *s);
#endif
-void metadata_conv(AVMetadata **pm, const AVMetadataConv *d_conv,
- const AVMetadataConv *s_conv);
-
#endif /* AVFORMAT_METADATA_H */
diff --git a/libavformat/mp3.c b/libavformat/mp3.c
index c1622a3..1a9e590 100644
--- a/libavformat/mp3.c
+++ b/libavformat/mp3.c
@@ -199,7 +199,9 @@ AVInputFormat mp3_demuxer = {
mp3_read_packet,
.flags= AVFMT_GENERIC_INDEX,
.extensions = "mp2,mp3,m2a", /* XXX: use probe */
+#if FF_API_OLD_METADATA
.metadata_conv = ff_id3v2_metadata_conv,
+#endif
};
#endif
diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c
index 3dc608f..4fc2c9d 100644
--- a/libavformat/nutdec.c
+++ b/libavformat/nutdec.c
@@ -936,7 +936,9 @@ AVInputFormat nut_demuxer = {
nut_read_close,
read_seek,
.extensions = "nut",
+#if FF_API_OLD_METADATA
.metadata_conv = ff_nut_metadata_conv,
+#endif
.codec_tag = (const AVCodecTag * const []) { ff_codec_bmp_tags, ff_nut_video_tags, ff_codec_wav_tags, ff_nut_subtitle_tags, 0 },
};
#endif
diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c
index 4c9a43a..b20fe8d 100644
--- a/libavformat/oggdec.c
+++ b/libavformat/oggdec.c
@@ -641,6 +641,8 @@ AVInputFormat ogg_demuxer = {
ogg_read_seek,
ogg_read_timestamp,
.extensions = "ogg",
+#if FF_API_OLD_METADATA
.metadata_conv = ff_vorbiscomment_metadata_conv,
+#endif
.flags = AVFMT_GENERIC_INDEX,
};
diff --git a/libavformat/oma.c b/libavformat/oma.c
index cdf1106..51f3410 100644
--- a/libavformat/oma.c
+++ b/libavformat/oma.c
@@ -201,6 +201,8 @@ AVInputFormat oma_demuxer = {
.flags= AVFMT_GENERIC_INDEX,
.extensions = "oma,aa3",
.codec_tag= (const AVCodecTag* const []){codec_oma_tags, 0},
+#if FF_API_OLD_METADATA
.metadata_conv = ff_id3v2_metadata_conv,
+#endif
};
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 5985511..995b8ba 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -2727,14 +2727,11 @@ int av_write_header(AVFormatContext *s)
/* set muxer identification string */
if (!(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT)) {
AVMetadata *m;
- AVMetadataTag *t;
if (!(m = av_mallocz(sizeof(AVMetadata))))
return AVERROR(ENOMEM);
av_metadata_set2(&m, "encoder", LIBAVFORMAT_IDENT, 0);
- metadata_conv(&m, s->oformat->metadata_conv, NULL);
- if ((t = av_metadata_get(m, "", NULL, AV_METADATA_IGNORE_SUFFIX)))
- av_metadata_set2(&s->metadata, t->key, t->value, 0);
+ av_metadata_clone(&m, &s->metadata, s->oformat->metadata_conv, NULL, AV_METADATA_IGNORE_SUFFIX);
av_metadata_free(&m);
}
--
1.7.1
More information about the ffmpeg-devel
mailing list