Add a metadata compatibility layer, so that when a user application set
metadata using old API, it is automatically converted to new API before muxing. Originally committed as revision 16447 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
e232c2529e
commit
176aee8282
@ -73,3 +73,40 @@ int av_metadata_set(AVMetadata **pm, AVMetadataTag elem)
|
|||||||
|
|
||||||
return 0;
|
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
|
||||||
|
@ -35,4 +35,8 @@ struct AVMetadata{
|
|||||||
AVMetadataTag *elems;
|
AVMetadataTag *elems;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if LIBAVFORMAT_VERSION_MAJOR < 53
|
||||||
|
void ff_metadata_sync_compat(AVFormatContext *s);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* AVFORMAT_METADATA_H */
|
#endif /* AVFORMAT_METADATA_H */
|
||||||
|
@ -2501,6 +2501,10 @@ int av_write_header(AVFormatContext *s)
|
|||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LIBAVFORMAT_VERSION_MAJOR < 53
|
||||||
|
ff_metadata_sync_compat(s);
|
||||||
|
#endif
|
||||||
|
|
||||||
if(s->oformat->write_header){
|
if(s->oformat->write_header){
|
||||||
ret = s->oformat->write_header(s);
|
ret = s->oformat->write_header(s);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user