mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
matroskadec: export language of metadata tags when available
Originally committed as revision 17334 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
0334f79994
commit
f702df396d
@ -176,6 +176,8 @@ typedef struct {
|
||||
typedef struct {
|
||||
char *name;
|
||||
char *string;
|
||||
char *lang;
|
||||
uint64_t def;
|
||||
EbmlList sub;
|
||||
} MatroskaTag;
|
||||
|
||||
@ -418,9 +420,9 @@ static EbmlSyntax matroska_index[] = {
|
||||
static EbmlSyntax matroska_simpletag[] = {
|
||||
{ MATROSKA_ID_TAGNAME, EBML_UTF8, 0, offsetof(MatroskaTag,name) },
|
||||
{ MATROSKA_ID_TAGSTRING, EBML_UTF8, 0, offsetof(MatroskaTag,string) },
|
||||
{ MATROSKA_ID_TAGLANG, EBML_STR, 0, offsetof(MatroskaTag,lang), {.s="und"} },
|
||||
{ MATROSKA_ID_TAGDEFAULT, EBML_UINT, 0, offsetof(MatroskaTag,def) },
|
||||
{ MATROSKA_ID_SIMPLETAG, EBML_NEST, sizeof(MatroskaTag), offsetof(MatroskaTag,sub), {.n=matroska_simpletag} },
|
||||
{ MATROSKA_ID_TAGLANG, EBML_NONE },
|
||||
{ MATROSKA_ID_TAGDEFAULT, EBML_NONE },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
@ -990,11 +992,21 @@ static void matroska_convert_tag(AVFormatContext *s, EbmlList *list,
|
||||
int i;
|
||||
|
||||
for (i=0; i < list->nb_elem; i++) {
|
||||
const char *lang = strcmp(tags[i].lang, "und") ? tags[i].lang : NULL;
|
||||
if (prefix) snprintf(key, sizeof(key), "%s/%s", prefix, tags[i].name);
|
||||
else av_strlcpy(key, tags[i].name, sizeof(key));
|
||||
if (tags[i].def || !lang) {
|
||||
av_metadata_set(metadata, key, tags[i].string);
|
||||
if (tags[i].sub.nb_elem)
|
||||
matroska_convert_tag(s, &tags[i].sub, metadata, key);
|
||||
}
|
||||
if (lang) {
|
||||
av_strlcat(key, "-", sizeof(key));
|
||||
av_strlcat(key, lang, sizeof(key));
|
||||
av_metadata_set(metadata, key, tags[i].string);
|
||||
if (tags[i].sub.nb_elem)
|
||||
matroska_convert_tag(s, &tags[i].sub, metadata, key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user