diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2019-05-17 00:30:10 +0200 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2019-07-16 16:16:59 -0300 |
commit | 38255cdcf815ff44bb0ab10cb16b96e409f2eeed (patch) | |
tree | 46671810be459c859377aed61fb3006f91608560 | |
parent | a9f051519e2ad3e4ea3062d2fd437209dc865eb8 (diff) | |
download | ffmpeg-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.c | 18 |
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; |