From patchwork Wed Jun 15 12:01:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36240 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1a22:b0:84:42e0:ad30 with SMTP id cj34csp318511pzb; Wed, 15 Jun 2022 05:02:11 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sI7JPEd0m/SL/tcU9Nni59jn2IcCH7C9TBTpaURbHP2qfC1OIH3ve8aauzi7hWQSjPcl+U X-Received: by 2002:a05:6402:40d6:b0:42e:3d4:4406 with SMTP id z22-20020a05640240d600b0042e03d44406mr12193215edb.387.1655294531496; Wed, 15 Jun 2022 05:02:11 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id o13-20020a170906974d00b00718cce808fesi9519079ejy.486.2022.06.15.05.02.03; Wed, 15 Jun 2022 05:02:11 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=BbEHooOn; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4305468B737; Wed, 15 Jun 2022 15:01:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2017.outbound.protection.outlook.com [40.92.89.17]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4357F68B71A for ; Wed, 15 Jun 2022 15:01:43 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=O1f4pX5nalm23TTZLGW1vQHwsCGoBWpRgqDv5VczQRNBuJI86CC4VUAfMfwQZjLkP2rFpRgMSqVKrqt00LyUQxvje0uV7Z7c2fOS4YtrudihHvNnSgrMDWjt+v5eI/GfSnOh6qxEqkmm5N9KYSz+k6WfBXtHgUCAcCqFPD6npZwwXHTENAOUM8kWLrQa+qUBU4G2x2ZCv5mCARi+FLEnoJoxwBjuSq8Hy+x53+f1v4+bDzbaHcvQ0O120+vPAF851depu4ii2E3MQi9qIDdU/G1kYSSphAcaL9aJDD9ikRJ+EZe6aNEMD7nAHCtqW3+DSKK0yhxbVxVBWi+RgPGqEg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=BjOVFQ12/CftPmrONQTNUbufIGf0/ZwzFB2kZ7fpc14=; b=acxFnX6ZzBxPJIfobyiSrpgd+EQUg3l4POP2+gdmQ+Rvg4kIDOb9TeKMBlUuEZ5xVvn/9zqt/r04OXiX5rcJXfMWIyJq38fXLL+T9Q8lAMMedvxTjPzGu30TemzQelPS6WCJfVMAPQ4C6p5P9rM3KhX3nRaUJ3+LvpkHmIzID/v6DNFvpP8nD/tHgLARM7u7SXQhFXmZrZpVx9NHIQXJdprJIiB5Rtr8yXlHmeM+JlWxlT8t5rs3rxowrwq9ko5fsD1cuj8FPsuXxxO3w5EhORBJ1CB9P45ZW2D/DC/QJNphLyc+ZigRh4LnVVB56+kcwfIxBhJ4msz+1HsxnS8rOA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BjOVFQ12/CftPmrONQTNUbufIGf0/ZwzFB2kZ7fpc14=; b=BbEHooOn9v2SkffItN4saG4U8gN+T6i1WAzzY4AuWdtSDnuEeisP3R+AB4SezLyLrH8zW8Ps/wNul7w9Aou4bcZ1WsBcWckkU/z4FEzPATTRJJhd+Vm35zVJWLEpc0bAEJD+m7b8i3HuLf4TnbBVQ0DLqvX722ObwmVLRS3FKvYyMTWnf+MLhR4e0dk4kMCcubdWQShS3yLUUzP2Ac+4NrEPv0a7f4b9ZwGyJsdFniT/PnNl0NyGCqAlX1jCrAKcnwhRIGVCEzcu0qYHRZAU7HvOxU37PUIzFwCFxNsHr0+YYajeLAASS2e75IIrW+8kVso/nMFVEQeYsee2hUDR9w== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by PA4PR01MB9139.eurprd01.prod.exchangelabs.com (2603:10a6:102:2ae::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5332.20; Wed, 15 Jun 2022 12:01:39 +0000 Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c]) by DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c%10]) with mapi id 15.20.5332.021; Wed, 15 Jun 2022 12:01:39 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 15 Jun 2022 14:01:15 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [wo87yHbg7y4TSDJyfQpeGMRyFYyiFJaB] X-ClientProxiedBy: ZR0P278CA0117.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:20::14) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220615120116.2983646-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a9f94ad5-e5bf-4fd6-6f0d-08da4ec6cdff X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQr1rwG6sv1IMnfYhbo6dHxrjZ9RH00BcmMDtr9lsoJgPKwojKw4vxpiN20v0SXiqgEn9AWQS24Fvq0j/s6E2vUzXgofKP9Nf3SPlTPEn56YQY1twTQAmtly/vzI4lzQqW3z4WyZuKuhjf4Tn0p46ZWZ85YC/mWXILOJneZM2r+4Vwf+ihOnkxbVEkhMLp496j6f12PlNXxhXX1vg42z0fiWLIqS61xMdh1FZHxCW9owng+xZpESBIsjzMqhUBBnWM4+ECV3sVtqXv9dX3+KGkK0xE0rIQXYvKFYROWl66gAxzvyS+vyAzxdXfOPbLCDkY/tmvnyTq+joJhyKV164Fl84ugQCFGy0YE4ksXWMNuhQr1GV7nG78K9dC7KxNnLiVqiOLJziAkMaYCVD1yLzNpi9zgWXmoSAuoUXdJXbZmKIyDPmEewJxgBKq+znl6A2au/6Caq5/5P6gkm/4t/MPJx9uBl3zvgbxWnZclVWV+Pv8z0vADHz6cQzOT6nJDxHv7R+MXtlMuQVmDwO9kxandjRkwMSkET/vJRPmYW5f9t1SxnSLJvFipqt1NsTfHAc4p/awh5Pnh6jVVRSclqUEv81S39Xe5aE8AbiT/E8gK/mCKE9XE+schmFVKiN8eBlRdENkQjl7ZjWvoM1eEf5zxaT5kD3RlVBesI8JH3SGimDxYd0oLLUfQNC4ZFPoq9I910t2ZOrB2eJ2r9mKZ0dWnDI3+jndDXAu3pTnQKe/pBH+8yaguPJqZe68tBT4VhFI= X-MS-TrafficTypeDiagnostic: PA4PR01MB9139:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 45QEH7453gsLmsiVB/YWWes5HjQ7cSoCcjlQJvU8B4eCND/fFZl3UcZR1xI8AHcz12SAIMxcQM4M0/ei7gKpkK5o8xad0rQ5iaeA4inkxi2WyLChhJyZziAEzowsRRBBgScpSIxWR6q60R6YMGwnA1DfG5uG44q4HxEfK6QpvVeLjzgaDmKGBqdcysnVgyw3W0YNqp7ECHMDBKwseyJIOqCbK8XvVQDgPRjWOOrwtSA1NjIWuvum/EeitAITwPvh+QPxgqHuYBKON+T2Qs0YETNE08pRxQPLF4vqCn8g1jm3a/1WVhuwO/Nc0K4VvOGNTHGrPVNEUuWQyUNslP6Wpub7Zp9xTM7j3PN85cuYxmWh1wuczLUsxf9qzNCZS6DJrDBhFTVhgu6CR5NWgAC1zV2sWtwnJe4D9LkUN9V0TdP5hd30hL+NeOPMvXWEo7PyMP8NOMhwwfKwwDRVQVnWsJNSgSO7I3spwdztHKRBwVOxwj9tRD5NvKoAY7JobVTmQU+585sROM6HqWpHOqFet6y6z05/PjVKQDtFELgIHIGsyOWwyL62elXseu1JeCxq5VXDBf873OYvmC9Czk6qYA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Lkkr0TPYYqusRUpHK21GE8f2kfSZuN1skiBybZGMxwEQRfA+54vMiRHc1uRpyY+NUGfQF+46G9q8+BrUW4RsNVE8IEggkM87GAaYHUWrsbQ3ZUeu2v5wCDMojMiZleRLninOfTRKx698lX7Qr4RlFe8jnrfiG/mIhPgudrQVBo0jKKsSkLzmwmjmCZ7zWCJIkusQRoTFTlhIQ9IyTPzLsO2fpILnBrX9Go4nPBwAk3DMoW93s3t9/Ta2EuBzKHI/T5sgZpJVX3vzSxmKVI12gc0zPUpl5uRQ21QE4+IZ4m7MgE0ivC2gjBk7yrfT4k/6EFoiTwc1AzWiysYtwESImx4PtXaZftDSeDb5gzro9FWxc/Asyj1GliQVQLAj0sPPEnCOER9DBQ+Z2L1IYUh9PPuy/waWeiFDs4qtPrpjQq/komsT62WXEEeST8OmGfx6tl03lmJN3Ca5Dec/LzXyrx9R6cR/aYzauqlsJgbZ1aQkPAxaBVH+tCVyERMgA/iR/baILLuur0dHDDVOclL01Hj17kiuuOUos2Jy6oRafn+a0yUaUL2toIe5VtHwETSG2lF+tfgwl/hT74v9Eq2C8tu4uO/Qqo6ehlmDixT+Ir+QkT3YPf/XQcAvFVT8obAa46BFJQHiX3+rEi2MpKwtWvIJ1nbxvu799POHim8Q/dkooetHDceklDVS9VMFaofw6MH4sdUeex6sOcvlqRM5FOvyKrXbkJGnXKZFu3174YgTTLlSrD3Xq2lgiw0NaOt4TCk0P98FDA3nX++cKv9uKy9piHZHcfElGTtab+dhpCXLaUlwDdEdjpcoLj69sJiiC7kC/+55yB6+Acl8G3acTWOQU9fUtgnUd88ouYrJW0Tw3uwbKbxIAefuCO3GQ4BB/Uc8siVOuanwTKWz19MKYJVFXEAXBwE6gklQYbSboVKTOvrQzttq6HSgauNRzEIa//BrqMWPXkOm0fGqK6rXvP9SbzGUo8KOGL2J0WLqXB12XiOQFy0P8djpoebGLHoBpWOwSQ2LyMecWW/d6bCUNQiRxD9s1KWswNAQz0LsM0tagE0+q6iSzuj4WSyycZK0hy8Hus9FJ57LV6n43EEc7MghDTIXzjuKJ/wGU7Qql+wHl+VUV5mQqaAXF6F+4iTLc86pdHrAP4iRb7PRBQTG1XDWF/R1EJQ+phH6QxmFjo40SPb7RrHdejqO/E6+8ginFdTnn3+AGS9JpgdHBpLBTr9aFz7x6D9Qg3SxfW1DN1gi2Gpow06jDLepoqooEd+iD5DvE4V1acis1g7OfVpGyrR0U1NVI7n95vYVW5F9FEkoFKNX6EgNKgUHZ282Si2m8Ar6aXSlPdGHu5WvHS8O7SsnJJn+UYln3lP8AYX5ogG0H2jV2l3bZ6RuWf+aRcaf/33qTrhjPvc+bslZvDHX+Nssh2hi1rTsAaj0J0/J48vs20QFvIrwA+1j/zD2dXv/LENovO5NTLP+jv7qIFKb9A== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a9f94ad5-e5bf-4fd6-6f0d-08da4ec6cdff X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2022 12:01:39.5407 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR01MB9139 Subject: [FFmpeg-devel] [PATCH 3/4] avformat/matroskaenc: Don't check twice whether to write tags X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: GODgJY5ojvAm Because not all metadata is written as tags, the Matroska muxer filters out the tags that are not written as tags. Therefore the code first checks whether a Tag master element needs to be opened for a given stream/chapter/attachment/global metadata. If the answer turns out to be yes, it is checked again whether a given AVDictionaryEntry is written as a tag. This commit changes this: The Tag element is opened unconditionally and in case it turns out that it was unneeded, it is discarded again. This is possible because the Tag element is written into its own dynamic buffer. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 40 +++++++++++---------------------------- 1 file changed, 11 insertions(+), 29 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 404fbdf579..f1385c6b21 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -1953,7 +1953,7 @@ static int mkv_write_tag(MatroskaMuxContext *mkv, const AVDictionary *m, const AVDictionaryEntry *t = NULL; AVIOContext *const tmp_bc = mkv->tmp_bc; uint8_t *buf; - int ret, size; + int ret = 0, size, tag_written = 0; mkv_write_tag_targets(mkv, tmp_bc, elementid, uid); @@ -1962,10 +1962,13 @@ static int mkv_write_tag(MatroskaMuxContext *mkv, const AVDictionary *m, ret = mkv_write_simpletag(tmp_bc, t); if (ret < 0) goto end; + tag_written = 1; } } if (reserved_size) put_ebml_void(tmp_bc, reserved_size); + else if (!tag_written) + goto end; size = avio_get_dyn_buf(tmp_bc, &buf); if (tmp_bc->error) { @@ -1984,17 +1987,6 @@ end: return ret; } -static int mkv_check_tag(const AVDictionary *m, uint32_t elementid) -{ - const AVDictionaryEntry *t = NULL; - - while ((t = av_dict_get(m, "", t, AV_DICT_IGNORE_SUFFIX))) - if (mkv_check_tag_name(t->key, elementid)) - return 1; - - return 0; -} - static int mkv_write_tags(AVFormatContext *s) { MatroskaMuxContext *mkv = s->priv_data; @@ -2004,11 +1996,9 @@ static int mkv_write_tags(AVFormatContext *s) ff_metadata_conv_ctx(s, ff_mkv_metadata_conv, NULL); - if (mkv_check_tag(s->metadata, 0)) { - ret = mkv_write_tag(mkv, s->metadata, &mkv->tags.bc, 0, 0, 0); - if (ret < 0) - return ret; - } + ret = mkv_write_tag(mkv, s->metadata, &mkv->tags.bc, 0, 0, 0); + if (ret < 0) + return ret; for (i = 0; i < s->nb_streams; i++) { const AVStream *st = s->streams[i]; @@ -2017,9 +2007,6 @@ static int mkv_write_tags(AVFormatContext *s) if (st->codecpar->codec_type == AVMEDIA_TYPE_ATTACHMENT) continue; - if (!seekable && !mkv_check_tag(st->metadata, MATROSKA_ID_TAGTARGETS_TRACKUID)) - continue; - ret = mkv_write_tag(mkv, st->metadata, &mkv->tags.bc, seekable ? DURATION_SIMPLETAG_SIZE : 0, MATROSKA_ID_TAGTARGETS_TRACKUID, track->uid); @@ -2037,9 +2024,6 @@ static int mkv_write_tags(AVFormatContext *s) if (st->codecpar->codec_type != AVMEDIA_TYPE_ATTACHMENT) continue; - if (!mkv_check_tag(st->metadata, MATROSKA_ID_TAGTARGETS_ATTACHUID)) - continue; - ret = mkv_write_tag(mkv, st->metadata, &mkv->tags.bc, 0, MATROSKA_ID_TAGTARGETS_ATTACHUID, track->uid); if (ret < 0) @@ -2124,12 +2108,10 @@ static int mkv_write_chapters(AVFormatContext *s) if (tags) { ff_metadata_conv(&c->metadata, ff_mkv_metadata_conv, NULL); - if (mkv_check_tag(c->metadata, MATROSKA_ID_TAGTARGETS_CHAPTERUID)) { - ret = mkv_write_tag(mkv, c->metadata, tags, 0, - MATROSKA_ID_TAGTARGETS_CHAPTERUID, uid); - if (ret < 0) - goto fail; - } + ret = mkv_write_tag(mkv, c->metadata, tags, 0, + MATROSKA_ID_TAGTARGETS_CHAPTERUID, uid); + if (ret < 0) + goto fail; } } end_ebml_master(dyn_cp, editionentry);