From patchwork Sun Jan 16 23:03:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33622 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2273108iog; Sun, 16 Jan 2022 15:05:45 -0800 (PST) X-Google-Smtp-Source: ABdhPJx/VGmvFiQ6lTE+qXLtkuB0YvfdsN+4mB4O1UzDTlStAqJVT1JKDluUCtIoqbvknVpfZedf X-Received: by 2002:a05:6402:26c8:: with SMTP id x8mr18223681edd.305.1642374345623; Sun, 16 Jan 2022 15:05:45 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e2si5367103edj.443.2022.01.16.15.05.45; Sun, 16 Jan 2022 15:05:45 -0800 (PST) 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="WHon8/ho"; 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 363DB68AF2B; Mon, 17 Jan 2022 01:05:08 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-oln040092073103.outbound.protection.outlook.com [40.92.73.103]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EF70E68AEE9 for ; Mon, 17 Jan 2022 01:05:01 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TyKMEtUcvfOjB4Rkv97OD4bf3AXlRZl74EL1tkdEVcXVFO2NP3asR8pvNCxzuCmmRVKdFJy2dUgdftAcq32JCT2QnEu3BRH4gAuELU8rdrY8S1QwoymjFVpe/RUBgRckmbxKuZLjShWPZ1e6gbjkOddHENwaxEeQ220V6yTgw1VLDiTneVemsvgqlkdmsIem9cyIaHo1M+9I6ZnwBYJC4De38dYWw54oU6hdq3/wJXpFRWV7CVyaSbano600VptylPrOQ65gED/cCeBUkeIsUfrQYVtjXqnbbGF/Tlwmvy/AnvbpkkMz49g26+XIet1NtvIObX9o5OBpjbj1uq51Ag== 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=h74oCAJry7xX0gmhy/4OQd7FOH2p9wpQloZaF5dMgc0=; b=mUzc+IJX47/RTexNZwYFR9JBNYp2UJ+EQliVAa+R2gYTlVNRmXDeO0/UtxXnJ7uTMMsPWup9ksZP39pvz4YUVzdB2eB+09IhgsRA6hcVO/SpuG3pwLYgPLZRyFgPkIPKaAN8nn7cvGEbhu7/h4eUUREoaSUHNpZagkJg454Bl3tN8K85N51Er6+bJrfM5dK7FwjqfyQN/vAUpoC2f2ITQzPjqzunznfdOo9JI2je6ptJYrPKOFw+hEignJFE409ASfXYc4SkDSxU4vBpxgJ9Rnf5LpbhgwaCCCTjmj3xmXgmj3ahG7lih7LZDFqwrQ1jVtHbzfFLnM6uGxJIU7dTjA== 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=h74oCAJry7xX0gmhy/4OQd7FOH2p9wpQloZaF5dMgc0=; b=WHon8/hoFUsioabcwpN7ewqpadk1+Nv/eEhkg8O5ETXFHGNbdwWLFrw7TGFeJUVX2QiYG55JbyL0auZxti64dYTtYwZq1bcuQ9g9jSU8KInnHzswvbfcLLOq5j6BFQvzaLAQW9KLRS/cFMVA9qze15S0JDq3BJrOUzMjtWwTp8A+S4HWxBhGieJagC9jr207yVcmRK9Sp2TpWQj57PmsMtirjQ0viwtbJYAThRLuS/iXxLZhrc0P6HJsC5Kk57tMLrOLm7dW2n/L8H3p9ny2ghYqeWp/Rh5SWEqCWY7AHRppp2qMouwQ+dFF3VEi6v9jP3MnFwVm/cxfgPj0XoomLA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AS8PR03MB7704.eurprd03.prod.outlook.com (2603:10a6:20b:403::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.10; Sun, 16 Jan 2022 23:05:00 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5%9]) with mapi id 15.20.4888.013; Sun, 16 Jan 2022 23:05:00 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:50 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [5bthLPGP4DvpaUxXwVqRZbsIUBbHErUT] X-ClientProxiedBy: AM0PR10CA0070.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:15::23) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220116230405.194506-9-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 22863027-a6fd-4d71-c200-08d9d9449f86 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPns4Wv1yLenCemITwOL96x+u4EAEYZNUPtfpB8s7pdZZhfHUaQcAzlBtjn455zTPqpeclNB9PfxFhwQpnoUYt64rooA/Wl/OtB57lx9DJi6aWWH94kweKRCWkpJL619I0NNy8rImPOP84qjgIDmuAEwvmCLrEKL3d5oD5Z6ps+Ys2/4UwngWPvYlgkYg80SrPgBYFhn9Eq10N6LaR5PZgqetxkZ5otrgNsN5Se++ThiozSxn90p5GF4am8bA61gtQlKf6b7r47hy53KzZQdu60r8qOf2+bVBlX74hx6WKHcxseU6Wv/A5KdW5/LSsnc2d6gsx6MIHPasJPGVfA0H5OUloERunWutFWUEbcHPauc/ZRr2q9U3kCS4BNjLDX6Br+SK6SCaU3S53rUMATCbgdUg1qoSIgkQslSVnKiRbPubRLky8tVbJNgGkPOglfqmxD3h54P2tKiOYRs6Od//jPNpfFcnBsvNdBo1RyaJuwKjoVEOoVYXyVfkQcGNtNNCcEsI3LNTFIpZFpMAndLodSIonXMZeYdi9ax8Rl/QJfRNMgj/9L7f8JIH8LA6VXTr3WgCXVcjJWKLySKf6WEkj5Fbm4NcyqZrT4MUqkoy5jlks2i9UBr0n07If1sZVE7Z5rjho6J/Ng87Ie0VFuBT/YOJo+OmcXbbKtMX1Yq/tufwlF5vDXIAiNBqp3HZji/iRk6N7TAT2L+n6SHZSl29GKMxtFynxMRlZ4sxK+gbZfvzaM= X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: cC/vEiqfsfrFw5e64qvTmi36d1OotyiSVDY8XJvcMpwx8lMWH5tUhhcYINR4uBt1vPAZE+thMuDlH0hzgvRGVc/5U0M8tp+9Nvn3TaAh23UezNg16/HEZKtYdrEiTe3+Ukgy5I7bjsrD+iLw00zDGlWEhMYrSp65svoDOu6nmIsoBf+PCs9iEWdYA4Vc7ehUDVIn2FdAKMbdCNry7NJmStd8k4Gfa9ldGnmi1VcDzk9E36od0LZw1S6SBSLni1l4gHSQH9sIA3M7yGWmcD+WjVhtEUMJJY2Cvk4EjmfjcXiQjNyeCXjyhXpg/VQpb9kfR75d5gTgFh8Ufll6RVrB1GwdAvXPTprZM9ygwhm9WLjv140Cm3/+e+AOksWQFFjNCK6omr0B60/rpoqv1X4gQine8jw9G7S/ch3qNyF2jwvqYUMA612Wi3VTJUKhCwXW5vrKyhjuk8/Y2Oy8O384yqcAkLvqq/etRKb9Oxrc7SfkczsKI0YqqYnCzY4sqMArT+4ZeK0RGIIemrFhZQdwRkkaiufFsjkMPOXtcHVsjzK1lUaluNyrggVSWlEsatIvH5doN1QMdjtCkAdtTKRViw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Ly8/17AbreMprvDT7P28YN1YfN0Xuf/UNjuSPKqlKni4amQ6A/4Eg8fupVQ8nyzavG2maKDvC66MHWZCWhIY6EeqyR2GTnSOPHrD/oHtPWqOUcEHgYJoU5jP/eRG1SubOGpqw6vrPH8fd+YMYdfkMlIzsxy51hviVmvRvIQxKiA9eVp/qZjNzGNo8KXHw+AghTb+kQ/3nPWn18NGyNnjnKimM3huF1Z137dI2y8qAVhoSsvy7u1CY2J/7qI0Ri7QZ277YIuAE0plAWdXZPx7iuyvH4hGGwjaA9kOkhPT2eH2gaZlEYLIeU1VLvjlzZDjPwy+vPXwtY+QdAMdXbihkbOtUv/4fbrRGt6LVzI59nqE9MF90AtMJAyVr72lRWfnZlhUbXVkFSaAaB2YvqKsnnlrToRZa4XZtE2ln+HGTE99ZMYVdKjgssmmw0XTglytdEvX2z/CjgoXdkNAjro8q8gjSFxKzuXV/ExVd8LHO65dQ8IiTdxJdOA/dDeldZS7qjIBQKNmL8sUtKOa7g6mDk4OKBPWOG4KGOxPqfeMTg6IF9RsnWPdRSdUeZvw1eHnMX2JXvlsNgIBGv6ROJUSW7TiaDAkaIf8h0OSFpg93ab2ccMogV6wYYgJ6mQFjvMGDDU2luqD9TVOdUo9DrwkK6tAdcdDvMrPRT8d/RKNckED5IelACqUQbk9WXNVD8bRI98BJlNd1UCMKjjlSM66mkKaGHcMoe5zCNP1t37Poz+5NwuymF4bw+KEHma4cg+kc8T9pCoVUdF29HyMNq3umjhPEeyVXbA89pOguPSO8YHC7YelaqW6zlco6QnnkW3T6Qs41kllttYDU4rUaH7SdyFwkNL122cZags1FbUnUwfJcC/CMgZ49QLX+m0cEDt06y4AVS9TDjuEWdHW7DPTWlDtrPs4i6TeaVIisutT5O71uQTinjuiF06l2y+joWYH/wM+Cv1xKkADNv43vgHF5Q== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 22863027-a6fd-4d71-c200-08d9d9449f86 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jan 2022 23:05:00.8777 (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: AS8PR03MB7704 Subject: [FFmpeg-devel] [PATCH 10/25] avformat/matroskaenc: Factor writing Info out 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: f2TZdV+GR+Tt Avoids the surprise of using pb for the main AVIOContext at the beginning and end of mkv_write_header() and for for the dynamic buffer opened for the Info element in the middle of mkv_write_header(). Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 64 +++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 29 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index fa58f1e171..fb790ebe8b 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2175,36 +2175,13 @@ static void ebml_write_header(AVIOContext *pb, ebml_writer_write(&writer, pb); } -static int mkv_write_header(AVFormatContext *s) +static int mkv_write_info(AVFormatContext *s) { MatroskaMuxContext *mkv = s->priv_data; - AVIOContext *pb = s->pb; const AVDictionaryEntry *tag; - int ret, i, version = 2; int64_t creation_time; - - if (!IS_WEBM(mkv) || - av_dict_get(s->metadata, "stereo_mode", NULL, 0) || - av_dict_get(s->metadata, "alpha_mode", NULL, 0)) - version = 4; - - for (i = 0; i < s->nb_streams; i++) { - if (s->streams[i]->codecpar->codec_id == AV_CODEC_ID_OPUS || - av_dict_get(s->streams[i]->metadata, "stereo_mode", NULL, 0) || - av_dict_get(s->streams[i]->metadata, "alpha_mode", NULL, 0)) - version = 4; - } - - ebml_write_header(pb, s->oformat->name, version); - put_ebml_id(pb, MATROSKA_ID_SEGMENT); - put_ebml_size_unknown(pb, 8); - mkv->segment_offset = avio_tell(pb); - - // We write a SeekHead at the beginning to point to all other level - // one elements (except Clusters). - mkv_start_seekhead(mkv, pb); - - ret = start_ebml_master_crc32(&mkv->info.bc, mkv); + AVIOContext *pb; + int ret = start_ebml_master_crc32(&mkv->info.bc, mkv); if (ret < 0) return ret; pb = mkv->info.bc; @@ -2253,11 +2230,40 @@ static int mkv_write_header(AVFormatContext *s) put_ebml_void(pb, 11); // assumes double-precision float to be written } } - ret = end_ebml_master_crc32_tentatively(s->pb, &mkv->info, - mkv, MATROSKA_ID_INFO); + return end_ebml_master_crc32_tentatively(s->pb, &mkv->info, + mkv, MATROSKA_ID_INFO); +} + +static int mkv_write_header(AVFormatContext *s) +{ + MatroskaMuxContext *mkv = s->priv_data; + AVIOContext *pb = s->pb; + int ret, version = 2; + + if (!IS_WEBM(mkv) || + av_dict_get(s->metadata, "stereo_mode", NULL, 0) || + av_dict_get(s->metadata, "alpha_mode", NULL, 0)) + version = 4; + + for (unsigned i = 0; i < s->nb_streams; i++) { + if (s->streams[i]->codecpar->codec_id == AV_CODEC_ID_OPUS || + av_dict_get(s->streams[i]->metadata, "stereo_mode", NULL, 0) || + av_dict_get(s->streams[i]->metadata, "alpha_mode", NULL, 0)) + version = 4; + } + + ebml_write_header(pb, s->oformat->name, version); + put_ebml_id(pb, MATROSKA_ID_SEGMENT); + put_ebml_size_unknown(pb, 8); + mkv->segment_offset = avio_tell(pb); + + // We write a SeekHead at the beginning to point to all other level + // one elements (except Clusters). + mkv_start_seekhead(mkv, pb); + + ret = mkv_write_info(s); if (ret < 0) return ret; - pb = s->pb; ret = mkv_write_tracks(s); if (ret < 0)