From patchwork Wed Mar 27 11:18:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Diego Felix de Souza via ffmpeg-devel X-Patchwork-Id: 12479 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 40AF9448DC9 for ; Wed, 27 Mar 2019 13:21:16 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2FEBC68A942; Wed, 27 Mar 2019 13:21:16 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3F64F6801D9 for ; Wed, 27 Mar 2019 13:21:13 +0200 (EET) Received: by mail-wm1-f68.google.com with SMTP id z24so13100805wmi.5 for ; Wed, 27 Mar 2019 04:21:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ey2cl9az8fE6XBZ67b8sxxbnAN14Zp+D5Z4U3+3KDHY=; b=q0Ef9MxgX+8V/1ZTxn23xf0wJIq4WrDdkXDlHUl5DU41+bQAMM920ouacf0u3cARtG P6bLll6tOjJM3Nubl1nGG/lAi6ujSXVf4+mPRiWivrZLH/uwYA0Wy+TFUfH0sWZ20Evk FsiMhr4L3XqaPbYsBB4GddwWzEH5/3uIT2mzHoIUx0BMmEapMj0a8yeTQwRzmFR62MJf kEGdgLTc9n689WYO2lfxEdKONF0RElb2xPvs/7GrrdvVW99BnpPz6gLumAeMLz7FJViK NMWfBQJvHf35maWwTKDnmYee3QmVav7CJYh0F3GsyFlL5mM+ksBVNub2VyZiu+LG4wTf o4/g== X-Gm-Message-State: APjAAAXhvia+w27Ktkarze1JW/SYiF/+aR2wmx6remPTJ3Xm+VZbBfnz A6x1uW+Sexphs2M5kPiyidLvTIxsDnM= X-Google-Smtp-Source: APXvYqwP5OQ5tjrGa/0UVYn4Vv1f5E5co7wyrTfgtnRmOIb4c3MNTHKDrQCiJDdOhlrBfZ8zJFjaQQ== X-Received: by 2002:a1c:1d81:: with SMTP id d123mr11479679wmd.59.1553685672531; Wed, 27 Mar 2019 04:21:12 -0700 (PDT) Received: from localhost.localdomain (ipbcc08c44.dynamic.kabel-deutschland.de. [188.192.140.68]) by smtp.googlemail.com with ESMTPSA id h10sm31745448wrs.27.2019.03.27.04.21.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 27 Mar 2019 04:21:11 -0700 (PDT) To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Mar 2019 12:18:40 +0100 Message-Id: <20190327111852.3784-10-andreas.rheinhardt@googlemail.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190327111852.3784-1-andreas.rheinhardt@googlemail.com> References: <20190308092604.3752-1-andreas.rheinhardt@googlemail.com> <20190327111852.3784-1-andreas.rheinhardt@googlemail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 09/21] avformat/matroskadec: Remove non-incremental parsing of clusters X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Andreas Rheinhardt via ffmpeg-devel From: Diego Felix de Souza via ffmpeg-devel Reply-To: FFmpeg development discussions and patches Cc: Andreas Rheinhardt , robux4@ycbcr.xyz Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" 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 c7d8dbad14ed5fa3c217a4fc1790021d6c0b6416) this is no longer needed, so that the old parser can be completely removed. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 72 ++++++--------------------------------- 1 file changed, 10 insertions(+), 62 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index aa2266384a..9198fa1bea 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -360,9 +360,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; @@ -707,25 +704,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 } }, @@ -739,7 +718,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 }, @@ -748,8 +727,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 }, @@ -2592,8 +2571,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; } } @@ -3464,19 +3441,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); @@ -3484,12 +3461,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); } @@ -3520,35 +3497,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; @@ -3643,7 +3591,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;