aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2019-05-17 00:30:10 +0200
committerJames Almer <jamrial@gmail.com>2019-07-16 16:16:59 -0300
commit38255cdcf815ff44bb0ab10cb16b96e409f2eeed (patch)
tree46671810be459c859377aed61fb3006f91608560
parenta9f051519e2ad3e4ea3062d2fd437209dc865eb8 (diff)
downloadffmpeg-38255cdcf815ff44bb0ab10cb16b96e409f2eeed.tar.gz
avformat/matroskadec: Combine arrays
By including SimpleBlocks and BlockGroups twice in the same EbmlSyntax array (with different semantics), one can reduce the duplication of the other values. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
-rw-r--r--libavformat/matroskadec.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index d2db3e5f0b..19eb5b0041 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -716,26 +716,21 @@ static const EbmlSyntax matroska_blockgroup[] = {
CHILD_OF(matroska_cluster_parsing)
};
+// The following array contains SimpleBlock and BlockGroup twice
+// in order to reuse the other values for matroska_cluster_enter.
static const EbmlSyntax matroska_cluster_parsing[] = {
- { MATROSKA_ID_CLUSTERTIMECODE, EBML_UINT, 0, offsetof(MatroskaCluster, timecode) },
- { MATROSKA_ID_BLOCKGROUP, EBML_NEST, 0, 0, { .n = matroska_blockgroup } },
{ MATROSKA_ID_SIMPLEBLOCK, EBML_BIN, 0, offsetof(MatroskaBlock, bin) },
- { MATROSKA_ID_CLUSTERPOSITION, EBML_NONE },
- { MATROSKA_ID_CLUSTERPREVSIZE, EBML_NONE },
- CHILD_OF(matroska_segment)
-};
-
-static const EbmlSyntax matroska_cluster_initial[] = {
+ { MATROSKA_ID_BLOCKGROUP, EBML_NEST, 0, 0, { .n = matroska_blockgroup } },
{ MATROSKA_ID_CLUSTERTIMECODE, EBML_UINT, 0, offsetof(MatroskaCluster, timecode) },
- { MATROSKA_ID_BLOCKGROUP, EBML_STOP },
{ MATROSKA_ID_SIMPLEBLOCK, EBML_STOP },
+ { MATROSKA_ID_BLOCKGROUP, EBML_STOP },
{ MATROSKA_ID_CLUSTERPOSITION, EBML_NONE },
{ MATROSKA_ID_CLUSTERPREVSIZE, EBML_NONE },
CHILD_OF(matroska_segment)
};
static const EbmlSyntax matroska_cluster_enter[] = {
- { MATROSKA_ID_CLUSTER, EBML_NEST, 0, 0, { .n = matroska_cluster_initial } },
+ { MATROSKA_ID_CLUSTER, EBML_NEST, 0, 0, { .n = &matroska_cluster_parsing[2] } },
{ 0 }
};
@@ -1063,6 +1058,9 @@ static int ebml_parse(MatroskaDemuxContext *matroska,
static EbmlSyntax *ebml_parse_id(EbmlSyntax *syntax, uint32_t id)
{
int i;
+
+ // Whoever touches this should be aware of the duplication
+ // existing in matroska_cluster_parsing.
for (i = 0; syntax[i].id; i++)
if (id == syntax[i].id)
break;