On 5/16/2019 7:29 PM, Andreas Rheinhardt wrote: > When the new incremental parser was introduced, the old parser was > kept, because the new parser was unable to handle the way SSA packets > are put into Matroska. But since 2014 (since c7d8dbad) this is no > longer needed, so that the old parser can be completely removed. > > Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@gmail.com> > --- > libavformat/matroskadec.c | 72 ++++++--------------------------------- > 1 file changed, 10 insertions(+), 62 deletions(-) > > diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c > index e01f1703e7..c0767c3529 100644 > --- a/libavformat/matroskadec.c > +++ b/libavformat/matroskadec.c > @@ -362,9 +362,6 @@ typedef struct MatroskaDemuxContext { > int64_t current_cluster_pos; > MatroskaCluster current_cluster; > > - /* File has SSA subtitles which prevent incremental cluster parsing. */ > - int contains_ssa; > - > /* WebM DASH Manifest live flag */ > int is_live; > > @@ -709,25 +706,7 @@ static const EbmlSyntax matroska_blockgroup[] = { > { 0 } > }; > > -static const EbmlSyntax matroska_cluster[] = { > - { MATROSKA_ID_CLUSTERTIMECODE, EBML_UINT, 0, > offsetof(MatroskaCluster, timecode) }, > - { MATROSKA_ID_BLOCKGROUP, EBML_NEST, sizeof(MatroskaBlock), > offsetof(MatroskaCluster, blocks), { .n = matroska_blockgroup } }, > - { MATROSKA_ID_SIMPLEBLOCK, EBML_PASS, sizeof(MatroskaBlock), > offsetof(MatroskaCluster, blocks), { .n = matroska_blockgroup } }, > - { MATROSKA_ID_CLUSTERPOSITION, EBML_NONE }, > - { MATROSKA_ID_CLUSTERPREVSIZE, EBML_NONE }, > - { 0 } > -}; > - > -static const EbmlSyntax matroska_clusters[] = { > - { MATROSKA_ID_CLUSTER, EBML_NEST, 0, 0, { .n = matroska_cluster } }, > - { MATROSKA_ID_INFO, EBML_NONE }, > - { MATROSKA_ID_CUES, EBML_NONE }, > - { MATROSKA_ID_TAGS, EBML_NONE }, > - { MATROSKA_ID_SEEKHEAD, EBML_NONE }, > - { 0 } > -}; > - > -static const EbmlSyntax matroska_cluster_incremental_parsing[] = { > +static const EbmlSyntax matroska_cluster_parsing[] = { > { MATROSKA_ID_CLUSTERTIMECODE, EBML_UINT, 0, > offsetof(MatroskaCluster, timecode) }, > { MATROSKA_ID_BLOCKGROUP, EBML_NEST, sizeof(MatroskaBlock), > offsetof(MatroskaCluster, blocks), { .n = matroska_blockgroup } }, > { MATROSKA_ID_SIMPLEBLOCK, EBML_PASS, sizeof(MatroskaBlock), > offsetof(MatroskaCluster, blocks), { .n = matroska_blockgroup } }, > @@ -741,7 +720,7 @@ static const EbmlSyntax > matroska_cluster_incremental_parsing[] = { > { 0 } > }; > > -static const EbmlSyntax matroska_cluster_incremental[] = { > +static const EbmlSyntax matroska_cluster[] = { > { MATROSKA_ID_CLUSTERTIMECODE, EBML_UINT, 0, offsetof(MatroskaCluster, > timecode) }, > { MATROSKA_ID_BLOCKGROUP, EBML_STOP }, > { MATROSKA_ID_SIMPLEBLOCK, EBML_STOP }, > @@ -750,8 +729,8 @@ static const EbmlSyntax matroska_cluster_incremental[] = { > { 0 } > }; > > -static const EbmlSyntax matroska_clusters_incremental[] = { > - { MATROSKA_ID_CLUSTER, EBML_NEST, 0, 0, { .n = > matroska_cluster_incremental } }, > +static const EbmlSyntax matroska_clusters[] = { > + { MATROSKA_ID_CLUSTER, EBML_NEST, 0, 0, { .n = matroska_cluster } }, > { MATROSKA_ID_INFO, EBML_NONE }, > { MATROSKA_ID_CUES, EBML_NONE }, > { MATROSKA_ID_TAGS, EBML_NONE }, > @@ -2648,8 +2627,6 @@ static int matroska_parse_tracks(AVFormatContext *s) > } > } else if (track->type == MATROSKA_TRACK_TYPE_SUBTITLE) { > st->codecpar->codec_type = AVMEDIA_TYPE_SUBTITLE; > - if (st->codecpar->codec_id == AV_CODEC_ID_ASS) > - matroska->contains_ssa = 1; > } > } > > @@ -3520,19 +3497,19 @@ end: > return res; > } > > -static int matroska_parse_cluster_incremental(MatroskaDemuxContext *matroska) > +static int matroska_parse_cluster(MatroskaDemuxContext *matroska) > { > EbmlList *blocks_list; > MatroskaBlock *blocks; > int i, res; > res = ebml_parse(matroska, > - matroska_cluster_incremental_parsing, > + matroska_cluster_parsing, > &matroska->current_cluster); > if (res == 1) { > /* New Cluster */ > if (matroska->current_cluster_pos) > ebml_level_end(matroska); > - ebml_free(matroska_cluster, &matroska->current_cluster); > + ebml_free(matroska_cluster_parsing, &matroska->current_cluster); > memset(&matroska->current_cluster, 0, sizeof(MatroskaCluster)); > matroska->current_cluster_num_blocks = 0; > matroska->current_cluster_pos = avio_tell(matroska->ctx->pb); > @@ -3540,12 +3517,12 @@ static int > matroska_parse_cluster_incremental(MatroskaDemuxContext *matroska) > if (matroska->current_id) > matroska->current_cluster_pos -= 4; > res = ebml_parse(matroska, > - matroska_clusters_incremental, > + matroska_clusters, > &matroska->current_cluster); > /* Try parsing the block again. */ > if (res == 1) > res = ebml_parse(matroska, > - matroska_cluster_incremental_parsing, > + matroska_cluster_parsing, > &matroska->current_cluster); > } > > @@ -3576,35 +3553,6 @@ static int > matroska_parse_cluster_incremental(MatroskaDemuxContext *matroska) > return res; > } > > -static int matroska_parse_cluster(MatroskaDemuxContext *matroska) > -{ > - MatroskaCluster cluster = { 0 }; > - EbmlList *blocks_list; > - MatroskaBlock *blocks; > - int i, res; > - int64_t pos; > - > - if (!matroska->contains_ssa) > - return matroska_parse_cluster_incremental(matroska); > - pos = avio_tell(matroska->ctx->pb); > - if (matroska->current_id) > - pos -= 4; /* sizeof the ID which was already read */ > - res = ebml_parse(matroska, matroska_clusters, &cluster); > - blocks_list = &cluster.blocks; > - blocks = blocks_list->elem; > - for (i = 0; i < blocks_list->nb_elem; i++) > - if (blocks[i].bin.size > 0 && blocks[i].bin.data) { > - int is_keyframe = blocks[i].non_simple ? blocks[i].reference == > INT64_MIN : -1; > - res = matroska_parse_block(matroska, blocks[i].bin.buf, > blocks[i].bin.data, > - blocks[i].bin.size, blocks[i].bin.pos, > - cluster.timecode, blocks[i].duration, > - is_keyframe, NULL, 0, 0, pos, > - blocks[i].discard_padding); > - } > - ebml_free(matroska_cluster, &cluster); > - return res; > -} > - > static int matroska_read_packet(AVFormatContext *s, AVPacket *pkt) > { > MatroskaDemuxContext *matroska = s->priv_data; > @@ -3699,7 +3647,7 @@ static int matroska_read_close(AVFormatContext *s) > for (n = 0; n < matroska->tracks.nb_elem; n++) > if (tracks[n].type == MATROSKA_TRACK_TYPE_AUDIO) > av_freep(&tracks[n].audio.buf); > - ebml_free(matroska_cluster, &matroska->current_cluster); > + ebml_free(matroska_cluster_parsing, &matroska->current_cluster); > ebml_free(matroska_segment, matroska); > > return 0;
Applied. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".