forked from FFmpeg/FFmpeg
matroskadec: use generic parser to parse tags
Originally committed as revision 14558 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
e5929fdf62
commit
434d496a8a
1 changed files with 6 additions and 35 deletions
|
@ -250,6 +250,11 @@ static EbmlSyntax matroska_index[] = {
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static EbmlSyntax matroska_tags[] = {
|
||||||
|
{ EBML_ID_VOID, EBML_NONE },
|
||||||
|
{ 0 }
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The first few functions handle EBML file parsing. The rest
|
* The first few functions handle EBML file parsing. The rest
|
||||||
* is the document interpretation. Matroska really just is a
|
* is the document interpretation. Matroska really just is a
|
||||||
|
@ -1758,37 +1763,7 @@ matroska_parse_index (MatroskaDemuxContext *matroska)
|
||||||
static int
|
static int
|
||||||
matroska_parse_metadata (MatroskaDemuxContext *matroska)
|
matroska_parse_metadata (MatroskaDemuxContext *matroska)
|
||||||
{
|
{
|
||||||
int res = 0;
|
return ebml_parse(matroska, matroska_tags, matroska, MATROSKA_ID_TAGS, 0);
|
||||||
uint32_t id;
|
|
||||||
|
|
||||||
while (res == 0) {
|
|
||||||
if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
|
|
||||||
res = AVERROR(EIO);
|
|
||||||
break;
|
|
||||||
} else if (matroska->level_up) {
|
|
||||||
matroska->level_up--;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (id) {
|
|
||||||
/* Hm, this is unsupported... */
|
|
||||||
default:
|
|
||||||
av_log(matroska->ctx, AV_LOG_INFO,
|
|
||||||
"Unknown entry 0x%x in metadata header\n", id);
|
|
||||||
/* fall-through */
|
|
||||||
|
|
||||||
case EBML_ID_VOID:
|
|
||||||
res = ebml_read_skip(matroska);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (matroska->level_up) {
|
|
||||||
matroska->level_up--;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -1914,8 +1889,6 @@ matroska_parse_seekhead (MatroskaDemuxContext *matroska)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MATROSKA_ID_TAGS:
|
case MATROSKA_ID_TAGS:
|
||||||
if ((res = ebml_read_master(matroska, &id)) < 0)
|
|
||||||
goto finish;
|
|
||||||
if (!(res = matroska_parse_metadata(matroska)) ||
|
if (!(res = matroska_parse_metadata(matroska)) ||
|
||||||
url_feof(matroska->ctx->pb)) {
|
url_feof(matroska->ctx->pb)) {
|
||||||
matroska->metadata_parsed = 1;
|
matroska->metadata_parsed = 1;
|
||||||
|
@ -2355,8 +2328,6 @@ matroska_read_header (AVFormatContext *s,
|
||||||
/* metadata */
|
/* metadata */
|
||||||
case MATROSKA_ID_TAGS: {
|
case MATROSKA_ID_TAGS: {
|
||||||
if (!matroska->metadata_parsed) {
|
if (!matroska->metadata_parsed) {
|
||||||
if ((res = ebml_read_master(matroska, &id)) < 0)
|
|
||||||
break;
|
|
||||||
res = matroska_parse_metadata(matroska);
|
res = matroska_parse_metadata(matroska);
|
||||||
} else
|
} else
|
||||||
res = ebml_read_skip(matroska);
|
res = ebml_read_skip(matroska);
|
||||||
|
|
Loading…
Add table
Reference in a new issue