From patchwork Tue Mar 21 17:06:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 40763 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp2758672pzb; Tue, 21 Mar 2023 10:07:05 -0700 (PDT) X-Google-Smtp-Source: AK7set/xAeg6+MLUo0TqXGu/Ahj5qX5FvOF45h8kyrKYe5aq53MxRz1rBYio4URrI7AT5XvL1jOI X-Received: by 2002:aa7:d359:0:b0:4fa:b05e:ced5 with SMTP id m25-20020aa7d359000000b004fab05eced5mr3482229edr.36.1679418424901; Tue, 21 Mar 2023 10:07:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679418424; cv=none; d=google.com; s=arc-20160816; b=jy7HAZQLq/Gifn+4W/WCic28GzNCC1TZL3V7aqI3dmHhqY1u0o9yes4MC12G2CPkkk bhymE6EwWB8gOvzcyUDrJ+oAVaGeTC4RKdEM6fzGeFyxnfdjkwoLaC9o8aSlgAtrPsNa DkRfiYAqkBisHf65yMzeUE5FS6eoK8XOoGYcb6umbtnfFNMarSzvqO581RFaLJXCDu3L S5iYN6m2f2L5OZbnMO6sbh2h2lNqOt2Svo8FjF8pjAnQ3Po0D7hx+jvpCfFhmV+x5Smp B7yF7yDGGyKJMq4gpcN6+0hdGcjt79E7ftfqgk6q9miD/eyZxsgjKU00J/Y4tq4k7yuG RJsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=yOKGhrPPhomoQHfCNAKYW9VGvIqhe2krZU+78vntR6w=; b=wntvy+pgzHgYu6HfaTSdwSaXhaJWFzvEjcLK+YesJ+g65iMjGZIv1R6AkeZnVZupkw dlg97rl75tKHN1zgJkcV60LOs2aMBU8JEs3352D1/s5x/ysYy5VqMGuqLyMCr7F5uqxK fLeypV6ZYNapdYsnbqRO8o4P1XBIghTt8Rc7gnpZoKu5qT4kmo42/6zHXf4QZEFH8wWP JXh2273dxWsxboA3NNeie7TOzHx/OYPM9qo+L6u8tNl9Oh2zuYZY1HC429HaNql7UYUT kFM3djMUE8D5hYJUgldYCyrXgDmjSq34491p86GyB7En0gMnNaz+4ZkvV9bw/ZKIlz2M INOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="eLn7iS/b"; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id q20-20020aa7d454000000b004f0f197861bsi13787731edr.310.2023.03.21.10.07.03; Tue, 21 Mar 2023 10:07:04 -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=@gmail.com header.s=20210112 header.b="eLn7iS/b"; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 348B968C1EE; Tue, 21 Mar 2023 19:07:00 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f174.google.com (mail-oi1-f174.google.com [209.85.167.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D060568C1C0 for ; Tue, 21 Mar 2023 19:06:52 +0200 (EET) Received: by mail-oi1-f174.google.com with SMTP id q30so4508860oiw.13 for ; Tue, 21 Mar 2023 10:06:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679418411; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=YHNGPyx2u42vIUhkeIS/rO0A49TDJB37+oj9wAhWw0M=; b=eLn7iS/byezH/wjY/R1OGrT8A9lrAqtPRAUsfhmv1TkISjhZq0e+WSyj6ZPW0v6Hof uIOHNGfkh1c5QlqRTCskIDHek27uHb7UdqjoWuUUdyHyZBEeVrdiRBIrpAvFe0s7Tn3F 1yWOy7tqQMkF9eYHM3JZF/ujRCdt0G164Uv2rvnlHaJhtrfuh4KvKad46g3uPr4hhPif +QnyV0wQekvC1OQsQKAcxrNdLmYekiPr1/oXwmbNL4ZWT3AxJOv+F8IFGhT/a7UPYDLt OJn+dCxwit+yoIf4niThM3BOcF2K9buns1uZ7e3iX87W9/0NNga+fvXfRI+gNOevf4T+ IX4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679418411; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=YHNGPyx2u42vIUhkeIS/rO0A49TDJB37+oj9wAhWw0M=; b=wU/4UwZNy0duaP1vX5dgLWWM3PVSGWD3BdMWjYXpT6wS39sxeQWgMLbbH8kyBnBmTG 4d+dbvkJpCMewLxq9OVGR37ztoEiI0xrzxw/e+RvhPScYgP4zTrh4SGbMSSA/gru/9TB bzhjqUd/u7sz2DAe6c1DYjrl/1AyPCcdsr5Oi08UaxkBVaJmcZxH7idKlj7X+AaMZhOY 9L9RNCPlEY5tsJo0dkxkFvyugE3bb7NVQi7U7JFFTBYc8tdLLo013DyCqzSorzJCOSRf oK0NdpgJRdT8e/OGu9Y65bQJldXksmAYsUJxeWco/M8j3YsT6RNY83Sn3Ebgs5QJvDIx D65A== X-Gm-Message-State: AO0yUKVLebDjFaCccbSHVvqQnBJHMeHjoP7/DfLXROPVQA+VkPlkeHu5 fA9n1WYcx66sOEov82L+TdXVdM/IYr8= X-Received: by 2002:a54:4001:0:b0:386:9691:f115 with SMTP id x1-20020a544001000000b003869691f115mr1296880oie.41.1679418411042; Tue, 21 Mar 2023 10:06:51 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id b11-20020aca1b0b000000b003872148d322sm845876oib.22.2023.03.21.10.06.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Mar 2023 10:06:50 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 21 Mar 2023 14:06:31 -0300 Message-Id: <20230321170637.10907-1-jamrial@gmail.com> X-Mailer: git-send-email 2.40.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/7] avformat/matroskadec: support parsing more than one BlockMore element 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: h0Ez29Ee5VHk Signed-off-by: James Almer --- libavformat/matroskadec.c | 60 ++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 20 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 3a888e3ada..60f9a78fe8 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -349,13 +349,17 @@ typedef struct MatroskaLevel { uint64_t length; } MatroskaLevel; +typedef struct MatroskaBlockMore { + uint64_t additional_id; + EbmlBin additional; +} MatroskaBlockMore; + typedef struct MatroskaBlock { uint64_t duration; CountedElement reference; uint64_t non_simple; EbmlBin bin; - uint64_t additional_id; - EbmlBin additional; + EbmlList blockmore; int64_t discard_padding; } MatroskaBlock; @@ -759,13 +763,13 @@ static EbmlSyntax matroska_segments[] = { }; static EbmlSyntax matroska_blockmore[] = { - { MATROSKA_ID_BLOCKADDID, EBML_UINT, 0, 0, offsetof(MatroskaBlock,additional_id), { .u = 1 } }, - { MATROSKA_ID_BLOCKADDITIONAL, EBML_BIN, 0, 0, offsetof(MatroskaBlock,additional) }, + { MATROSKA_ID_BLOCKADDID, EBML_UINT, 0, 0, offsetof(MatroskaBlockMore,additional_id), { .u = 1 } }, + { MATROSKA_ID_BLOCKADDITIONAL, EBML_BIN, 0, 0, offsetof(MatroskaBlockMore,additional) }, CHILD_OF(matroska_blockadditions) }; static EbmlSyntax matroska_blockadditions[] = { - { MATROSKA_ID_BLOCKMORE, EBML_NEST, 0, 0, 0, {.n = matroska_blockmore} }, + { MATROSKA_ID_BLOCKMORE, EBML_NEST, 0, sizeof(MatroskaBlockMore), offsetof(MatroskaBlock, blockmore), { .n = matroska_blockmore } }, CHILD_OF(matroska_blockgroup) }; @@ -3610,12 +3614,28 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, return 0; } +static int matroska_parse_block_additional(MatroskaDemuxContext *matroska, + AVPacket *pkt, + const uint8_t *data, int size, uint64_t id) +{ + uint8_t *side_data = av_packet_new_side_data(pkt, + AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, + size + 8); + if (!side_data) + return AVERROR(ENOMEM); + + AV_WB64(side_data, id); + memcpy(side_data + 8, data, size); + + return 0; +} + static int matroska_parse_frame(MatroskaDemuxContext *matroska, MatroskaTrack *track, AVStream *st, AVBufferRef *buf, uint8_t *data, int pkt_size, uint64_t timecode, uint64_t lace_duration, int64_t pos, int is_keyframe, - uint8_t *additional, uint64_t additional_id, int additional_size, + MatroskaBlockMore *blockmore, int nb_blockmore, int64_t discard_padding) { uint8_t *pkt_data = data; @@ -3647,7 +3667,7 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, buf = NULL; } - if (!pkt_size && !additional_size) + if (!pkt_size && !nb_blockmore) goto no_output; if (!buf) @@ -3666,16 +3686,18 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, pkt->flags = is_keyframe; pkt->stream_index = st->index; - if (additional_size > 0) { - uint8_t *side_data = av_packet_new_side_data(pkt, - AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, - additional_size + 8); - if (!side_data) { + for (int i = 0; i < nb_blockmore; i++) { + MatroskaBlockMore *more = &blockmore[i]; + + if (!more->additional.size) + continue; + + res = matroska_parse_block_additional(matroska, pkt, more->additional.data, + more->additional.size, more->additional_id); + if (res < 0) { av_packet_unref(pkt); return AVERROR(ENOMEM); } - AV_WB64(side_data, additional_id); - memcpy(side_data + 8, additional, additional_size); } if (discard_padding) { @@ -3721,7 +3743,7 @@ fail: static int matroska_parse_block(MatroskaDemuxContext *matroska, AVBufferRef *buf, uint8_t *data, int size, int64_t pos, uint64_t cluster_time, uint64_t block_duration, int is_keyframe, - uint8_t *additional, uint64_t additional_id, int additional_size, + MatroskaBlockMore *blockmore, int nb_blockmore, int64_t cluster_pos, int64_t discard_padding) { uint64_t timecode = AV_NOPTS_VALUE; @@ -3856,7 +3878,7 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, AVBufferRef *buf res = matroska_parse_frame(matroska, track, st, buf, out_data, out_size, timecode, lace_duration, pos, !n ? is_keyframe : 0, - additional, additional_id, additional_size, + blockmore, nb_blockmore, discard_padding); if (res) return res; @@ -3897,14 +3919,12 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska) if (res >= 0 && block->bin.size > 0) { int is_keyframe = block->non_simple ? block->reference.count == 0 : -1; - uint8_t* additional = block->additional.size > 0 ? - block->additional.data : NULL; res = matroska_parse_block(matroska, block->bin.buf, block->bin.data, block->bin.size, block->bin.pos, cluster->timecode, block->duration, - is_keyframe, additional, block->additional_id, - block->additional.size, cluster->pos, + is_keyframe, block->blockmore.elem, + block->blockmore.nb_elem, cluster->pos, block->discard_padding); } From patchwork Tue Mar 21 17:06:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 40764 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp2758974pzb; Tue, 21 Mar 2023 10:07:28 -0700 (PDT) X-Google-Smtp-Source: AK7set8y91VOdOJDL4rW1hGQBLx37AO0dpvlR1PohJDQIgBkNSAW5PIWL8s68A0AuBCcBt2tjNTA X-Received: by 2002:a05:6402:4d7:b0:4fd:2363:16fa with SMTP id n23-20020a05640204d700b004fd236316famr3511250edw.41.1679418448424; Tue, 21 Mar 2023 10:07:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679418448; cv=none; d=google.com; s=arc-20160816; b=uvHytikOUXZCTvH0arG5U5oh9I6Ee6xpSORqf/VP5sgGaHNGUSrlGn4yJP9y5GzZ1m tuPmuKGK93T6e3JIH0xgaw3z40GJQNbf3gYVn7WQHEK9Fi/VNXsAn1W/44pawvQWH0ml r01T2oxSuzQUpRNi4eFqp08S4kvzzZ2hHYgPgreG6eMUQaJ1p+yqcEQqFhWwENyFlcfB 5sL2yoGsRnbs6QxGx4pKG/1rfms58BpaKpgwh/Utu9GIEMeNYDgu/16nZu1pTAsUTlYl yanOC4WkQjzSzp8IHfsVdbZwGLPVIcdCdOfmqyLGCHtC6/QRXjl1knWp2jwt1O4d303g NqtQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=lz88KgJcFgHgqMT+TuT4Pp19y1NhIpZ8e8NghnBZOBY=; b=T/81RT4oydHK33jT/9jGqYAwAv1GWp5jD+cEZf/4fgyBlTUd7jvvK8/LZie1XjId0k nNxJirPAFiaGRZnE27X0ngy4TO7ZISOTHdsg7UbXAJde5JJp0kL0ZZ6Uu9hpcmlyciW3 9wvyMxaKocV9VIlw1YRwMo3UwXVEGH/lY846YnZX3wo/imLyh+vUbZwdizUFxqSlDx91 Msc0arm+rfC6rQet4UF0190xzu/gcOzTrm4K9YAiFcTy95Yg6OBYK9/kSqxvJk+2dR4m 9vrNzK7VjKmwmvGhQ7qkJrGNB/eXGsVFMiM9MiEE1m1a7EYTizo0+UZSceNPDxqXwkV2 ZUrg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=UyKXEOBY; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id u17-20020aa7d0d1000000b00501dffe7dc3si1908029edo.248.2023.03.21.10.07.14; Tue, 21 Mar 2023 10:07:28 -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=@gmail.com header.s=20210112 header.b=UyKXEOBY; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 576B968C213; Tue, 21 Mar 2023 19:07:02 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f179.google.com (mail-oi1-f179.google.com [209.85.167.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8010568C206 for ; Tue, 21 Mar 2023 19:06:55 +0200 (EET) Received: by mail-oi1-f179.google.com with SMTP id s8so1708260ois.2 for ; Tue, 21 Mar 2023 10:06:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679418413; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=M+27DeYIV5G/B/oM7neJhYdUczINtY6fvgkKSO816kk=; b=UyKXEOBYo38dtUvZp+jGZkZUxwyNINwEfAejkXXUhRSM2xBww30jyluHNsBR1DUxyb FkFp0jid82jLOFVNGJCsTFGdnwKVg4qTPSaqbRTq3NPx4MSaZWgo6yl806u3Xr4IwiAj P2woUnozoOToIusC67NPjNUUvhvsji7mN2Ob3Vz/dhI2Hz/Jm0dpkkezHhnrPyuzAXPV PUnZQNb1JILZhuvxKm8ziF23NgHE08jY3lO26+ayQewcHGhKASImHqmiGAv3XkNW3m9Y 9gb5Zpz9dp2O+/clbpoz187EtJpgxGEeb/j2pg87vSLckbClCdMvDRXNpNe/DUz89BxX QTTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679418413; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=M+27DeYIV5G/B/oM7neJhYdUczINtY6fvgkKSO816kk=; b=tQHLeEuto5o9hU1J5qaZ1MuSFqX6nZGyKu32cpko5YE4X/S/XgseIpiCvC4IZaG1BA W7tWQ6osvIHfv4mw+mnrHxg49WXqrbReqKsw7qzxp/kbQg42BoyEbBxys8EUmfvEoWbN yBigWdG4R9R1x3h9BC5HXMiY1064E9RTUmOCkuwN/jVwD8L2jfDh1y1twD2OnfImgTQb xCu8/UldGx5kMrShBuv+L+L2KL9zrtNVp+txknJgIqheIqyw8AVXcUCBy+PDpSzrgBXu UH4oNST2A4zXKuTUo/PEfh4yTQNGi+GvJFPt1F0plTsHAEWmac655R7GCzvqIDF95L/d VwAA== X-Gm-Message-State: AO0yUKXuFZI9abJyNi34l383ukuDHWDZz/Qrap5JaEwwEktC5T99rxx/ VBthCCQgy4nKnSEQ8JZx6kmkTCRm6dA= X-Received: by 2002:a05:6808:14c3:b0:378:2b0c:493f with SMTP id f3-20020a05680814c300b003782b0c493fmr1693251oiw.19.1679418412257; Tue, 21 Mar 2023 10:06:52 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id b11-20020aca1b0b000000b003872148d322sm845876oib.22.2023.03.21.10.06.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Mar 2023 10:06:51 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 21 Mar 2023 14:06:32 -0300 Message-Id: <20230321170637.10907-2-jamrial@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230321170637.10907-1-jamrial@gmail.com> References: <20230321170637.10907-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/7] avformat/matroskadec: set the default value for BlockAddIDType 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: zC5aV+Sv7bBB Signed-off-by: James Almer --- libavformat/matroskadec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 60f9a78fe8..ef914f92f8 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -591,7 +591,7 @@ static EbmlSyntax matroska_track_operation[] = { static EbmlSyntax matroska_block_addition_mapping[] = { { MATROSKA_ID_BLKADDIDVALUE, EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, value) }, { MATROSKA_ID_BLKADDIDNAME, EBML_STR, 0, 0, offsetof(MatroskaBlockAdditionMapping, name) }, - { MATROSKA_ID_BLKADDIDTYPE, EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, type) }, + { MATROSKA_ID_BLKADDIDTYPE, EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, type), { .u = 0 } }, { MATROSKA_ID_BLKADDIDEXTRADATA, EBML_BIN, 0, 0, offsetof(MatroskaBlockAdditionMapping, extradata) }, CHILD_OF(matroska_track) }; From patchwork Tue Mar 21 17:06:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 40765 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp2758978pzb; Tue, 21 Mar 2023 10:07:28 -0700 (PDT) X-Google-Smtp-Source: AK7set91+Mo9uQMa45BbRvq/U4P4Ba3MwkuC9b1WY6aLB/CPVIDMbx9IdLAq4jGluQXJfOj1wlOd X-Received: by 2002:a17:906:158e:b0:92f:a0d5:211c with SMTP id k14-20020a170906158e00b0092fa0d5211cmr3215262ejd.35.1679418448493; Tue, 21 Mar 2023 10:07:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679418448; cv=none; d=google.com; s=arc-20160816; b=l+WUqfO0JA6XOaDtv5X1lkTcY2s9tbN1Q3HNAGt6GA6GzmMlOfSrRrXLIAjzzoZwoo raTObbcbPbhsTIaY5IKbSfQ7dB9gkRMPoCt+JfsgSjqYC0GbqX4JFa/Va19tkpdmxGvv UwyOePldIvTlsd8t61NF/V/BRaoyeJrFRNR5mgfjdsIgRUeeQzi+fbwjNf50A96RLhMk WQdw4Gg+jwMa3NlbJR5MGS2y5gdGatfLVq4bMZc7xniQXrsr0V+ONf5hGgrYAfOwXxBZ zE5x9aWcRNMmSOGkmoi77q7TsGE/j4OSg+rpc4H+KsxPKzlsw4vQNIvjejEyYvZC+gNG ngrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=vHgb5T1WOWYApJN7lBW5NWCCMGAJolwW2BOwJHjek4g=; b=B1AjLvAsf4ZSHChfj4P30Srzsp52JAeOujv8vLpWARCVJCtoo71hUCM/3+uRbFBoVb Xt4Sqe/fNjkuY1/q50IlPnCobx/ce5meF0nNOLg0KgFVnAaKcVL9qSQhuMIlKNpIapkY jZS2WP7LgkPjGPCszTf+aF1rfy7wgq9spgzHuw0yYuyegXQBzus8jiGUl/QyEISYvLOa o2e5ulgNMbVkbffRp23+t2MDoF3sDTu1z5AVHO0EH7s6rdTeQ86Qa1xqnvlCiChZ3iT4 SHsJQG1SySfw7nAQtQFA/qytIckZCgrMnTvfaN4lK5SbuhRjtJ2r9JVE9MGrL8alOdf+ u2nw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=OBNLPcJJ; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id qa17-20020a170907869100b009333cf9aaf0si11241864ejc.537.2023.03.21.10.07.24; Tue, 21 Mar 2023 10:07:28 -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=@gmail.com header.s=20210112 header.b=OBNLPcJJ; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 82BB668BD75; Tue, 21 Mar 2023 19:07:03 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f176.google.com (mail-oi1-f176.google.com [209.85.167.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 816AF68C207 for ; Tue, 21 Mar 2023 19:06:55 +0200 (EET) Received: by mail-oi1-f176.google.com with SMTP id bf30so5052972oib.12 for ; Tue, 21 Mar 2023 10:06:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679418413; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=qFY2ud2CvU/FLxJfR/riyLvIvfGC14MZD7orU28BZME=; b=OBNLPcJJK12EHKkKpakESOX3znrkIormkfl9h36K3YqqOAMoFCiycD6hQmHIQHJRjj lfDE0aMDRrgS4bVKShBo6P7E13NiOHRN9A3YzBCLB14KB+JD7jXcgBfIwRq0m07jVOmx OIBj9ChnYEO0wpo7mZHy7131F186H7vHnEXLdNqns3fgAqrqV+caaFqI44N1PAOLCqzk WPM2J3aJO2aQwoEPFEAHKOFkOunU4LSEN+g0XNE+ugxuHZdgBrPU+x7s+AL0iUPU1Ta8 jHe9VzsANtcqoZel1U2duyoWmaMUcLEaWh9l1dWX2Y/gLvSb7oJ1+9mCWrMVdYo7qmU4 SXxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679418413; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qFY2ud2CvU/FLxJfR/riyLvIvfGC14MZD7orU28BZME=; b=3ROalnNi7P/L6VmNkSzdqb9tvUoN3BVwzvRijPVkS+xxw/f/0d7cVmmn06jZUNDmn1 7MYB2EqQFuI3ZQWJYp/h2g2kIGFsBMwNJmK/SybDy986Vz0Q/UvGGuQDtg64GgWFafuj KEWILq4nsH81oPFyoPuEOnzmV/juD+51tzuB4wdgvsaUSPJ9Tth12n8kqB7u1ZiTUslK N9J5YEIMcdddrfhEa7i+FbO/5vmTwgqpdNKBmyDAA6hpUq7T2z0WYhHORuqMb4jiBrZH UtX7SR22iNvEzZUL/HKdAvJAO/3Bw9oA0jxu911Mr4aVKEID/UXNdAJMTQUHMbITsElw K/jw== X-Gm-Message-State: AO0yUKWcJQXD/EUVlfYzGC85aZk0aR4Qxy8UPuHzqLDp/26UnP4Izq9B E9pCdgpj/HVCIm08/iXiNCLtiIispSo= X-Received: by 2002:aca:121a:0:b0:383:fc9f:e76 with SMTP id 26-20020aca121a000000b00383fc9f0e76mr1292529ois.51.1679418413651; Tue, 21 Mar 2023 10:06:53 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id b11-20020aca1b0b000000b003872148d322sm845876oib.22.2023.03.21.10.06.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Mar 2023 10:06:53 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 21 Mar 2023 14:06:33 -0300 Message-Id: <20230321170637.10907-3-jamrial@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230321170637.10907-1-jamrial@gmail.com> References: <20230321170637.10907-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/7] avformat/matroskadec: export Dynamic HDR10+ packet side data 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 4GreGCMFxd5v Signed-off-by: James Almer --- libavformat/matroska.h | 5 +++ libavformat/matroskadec.c | 76 +++++++++++++++++++++++++++++++++++---- 2 files changed, 74 insertions(+), 7 deletions(-) diff --git a/libavformat/matroska.h b/libavformat/matroska.h index 45077ed33f..8a9c1b5119 100644 --- a/libavformat/matroska.h +++ b/libavformat/matroska.h @@ -358,6 +358,11 @@ typedef enum { MATROSKA_VIDEO_PROJECTION_TYPE_MESH = 3, } MatroskaVideoProjectionType; +typedef enum { + MATROSKA_BLOCK_ADD_ID_TYPE_DEFAULT = 0, + MATROSKA_BLOCK_ADD_ID_TYPE_ITU_T_T35 = 4, +} MatroskaBlockAddIDType; + /* * Matroska Codec IDs, strings */ diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index ef914f92f8..b1d2391840 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -40,6 +40,7 @@ #include "libavutil/dict.h" #include "libavutil/dict_internal.h" #include "libavutil/display.h" +#include "libavutil/hdr_dynamic_metadata.h" #include "libavutil/intfloat.h" #include "libavutil/intreadwrite.h" #include "libavutil/lzo.h" @@ -284,6 +285,7 @@ typedef struct MatroskaTrack { int needs_decoding; uint64_t max_block_additional_id; EbmlList block_addition_mappings; + int blockaddid_itu_t_t35; uint32_t palette[AVPALETTE_COUNT]; int has_palette; @@ -423,6 +425,8 @@ typedef struct MatroskaDemuxContext { MatroskaCluster current_cluster; + int is_webm; + /* WebM DASH Manifest live flag */ int is_live; @@ -2378,7 +2382,7 @@ static int mkv_parse_dvcc_dvvc(AVFormatContext *s, AVStream *st, const MatroskaT return ff_isom_parse_dvcc_dvvc(s, st, bin->data, bin->size); } -static int mkv_parse_block_addition_mappings(AVFormatContext *s, AVStream *st, const MatroskaTrack *track) +static int mkv_parse_block_addition_mappings(AVFormatContext *s, AVStream *st, MatroskaTrack *track) { const EbmlList *mappings_list = &track->block_addition_mappings; MatroskaBlockAdditionMapping *mappings = mappings_list->elem; @@ -2388,6 +2392,18 @@ static int mkv_parse_block_addition_mappings(AVFormatContext *s, AVStream *st, c MatroskaBlockAdditionMapping *mapping = &mappings[i]; switch (mapping->type) { + case MATROSKA_BLOCK_ADD_ID_TYPE_ITU_T_T35: + if (mapping->value != 4) { + int strict = s->strict_std_compliance >= FF_COMPLIANCE_STRICT; + av_log(s, strict ? AV_LOG_ERROR : AV_LOG_WARNING, + "Invalid Block Addition Value 0x%"PRIx64" for Block Addition Mapping Type " + "\"ITU T.35 metadata\"\n", mapping->value); + if (!strict) + break; + return AVERROR_INVALIDDATA; + } + track->blockaddid_itu_t_t35 = 1; + break; case MKBETAG('d','v','c','C'): case MKBETAG('d','v','v','C'): if ((ret = mkv_parse_dvcc_dvvc(s, st, track, &mapping->extradata)) < 0) @@ -2814,10 +2830,12 @@ static int matroska_parse_tracks(AVFormatContext *s) AV_WL16(extradata, 0x410); } else if (codec_id == AV_CODEC_ID_PRORES && track->codec_priv.size == 4) { fourcc = AV_RL32(track->codec_priv.data); - } else if (codec_id == AV_CODEC_ID_VP9 && track->codec_priv.size) { + } else if (codec_id == AV_CODEC_ID_VP9) { /* we don't need any value stored in CodecPrivate. make sure that it's not exported as extradata. */ track->codec_priv.size = 0; + /* Assume BlockAddID 4 is ITU-T T.35 metadata if WebM */ + track->blockaddid_itu_t_t35 = matroska->is_webm; } else if (codec_id == AV_CODEC_ID_ARIB_CAPTION && track->codec_priv.size == 3) { int component_tag = track->codec_priv.data[0]; int data_component_id = AV_RB16(track->codec_priv.data + 1); @@ -3081,6 +3099,8 @@ static int matroska_read_header(AVFormatContext *s) return AVERROR_INVALIDDATA; } } + matroska->is_webm = !strcmp(ebml.doctype, "webm"); + ebml_free(ebml_syntax, &ebml); matroska->pkt = si->parse_pkt; @@ -3615,12 +3635,54 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, } static int matroska_parse_block_additional(MatroskaDemuxContext *matroska, - AVPacket *pkt, + MatroskaTrack *track, AVPacket *pkt, const uint8_t *data, int size, uint64_t id) { - uint8_t *side_data = av_packet_new_side_data(pkt, - AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, - size + 8); + uint8_t *side_data; + int res; + + switch (id) { + case 4: { + int country_code, provider_code; + int provider_oriented_code, application_identifier; + size_t hdrplus_size; + AVDynamicHDRPlus *hdrplus; + + if (!track->blockaddid_itu_t_t35) + break; //ignore + + /* ITU-T T.35 metadata */ + country_code = bytestream_get_byte(&data); + provider_code = bytestream_get_be16(&data); + + if (country_code != 0xB5 || provider_code != 0x3C) + break; // ignore + + provider_oriented_code = bytestream_get_be16(&data); + application_identifier = bytestream_get_byte(&data); + + if (provider_oriented_code != 1 || application_identifier != 4) + break; // ignore + + hdrplus = av_dynamic_hdr_plus_alloc(&hdrplus_size); + if (!hdrplus) + return AVERROR(ENOMEM); + + if ((res = av_dynamic_hdr_plus_from_t35(hdrplus, data, size)) < 0 || + (res = av_packet_add_side_data(pkt, AV_PKT_DATA_DYNAMIC_HDR10_PLUS, + (uint8_t *)hdrplus, hdrplus_size)) < 0) { + av_free(hdrplus); + return res; + } + + return 0; + } + default: + break; + } + + side_data = av_packet_new_side_data(pkt, AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, + size + 8); if (!side_data) return AVERROR(ENOMEM); @@ -3692,7 +3754,7 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, if (!more->additional.size) continue; - res = matroska_parse_block_additional(matroska, pkt, more->additional.data, + res = matroska_parse_block_additional(matroska, track, pkt, more->additional.data, more->additional.size, more->additional_id); if (res < 0) { av_packet_unref(pkt); From patchwork Tue Mar 21 17:06:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 40766 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp2759084pzb; Tue, 21 Mar 2023 10:07:36 -0700 (PDT) X-Google-Smtp-Source: AK7set8zcjlM1SUQt4sOXNwFxxXC54BdasEiIr801u+a4b2nFDD63Svmbq14H/70KBhZWw+RNmSD X-Received: by 2002:a17:906:71da:b0:933:c474:420b with SMTP id i26-20020a17090671da00b00933c474420bmr3851558ejk.19.1679418455780; Tue, 21 Mar 2023 10:07:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679418455; cv=none; d=google.com; s=arc-20160816; b=j1fzDBG1c9eufRa8N5oIBzRwhgohUuCQWvVlHVbq3HC4pipMzYfcrNgHjCaZbA1J/V jlJULKBNTSmC5y8lvLzt+RwchLRt4P2thcqztMTeFOrx/4NmJ7n2BJgM9ahisc5LfYUL OOg3EhsRGdz+X6Qm72QsC9jwmKZNY0iS9AfYQxNL/yQVV6awjBsvao5WrDMUdLOmVzvN dJrnguOreYYifmNKlxEezYacmO5QUq23Gx1hi16VTQxuVgJXxsxdnTI1EdD4k/t6SeW4 Yeytt9sgdXUxsG7LwF7p3gN1rY61cH5EwUvue8REveWt8UyHOoYIfyuy3E6FS4x0F8iK HXKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=x9EMAark/JxaKrFUOCS8SYdpLWD9ictf2Ab6kj1gpmw=; b=jhUEGK1myS6Z9NfHW0Qu1zBdcK8yKnzbDp8641ZKOaPNzFWO1gOBP9YMj/brJW94FZ GE11Qs75+iS3jnNIu0GVKXdRe0GsVRRmUtwn/AbQHnhQov8NfWJkbe1yBnX7TZ/X3A0x OK6d7jbkz692qwt0bBaJ+tnV8cwQ67h53VSo5wC6reOb3W3Gvs8U3/VyciGq5foUY8A0 2wRIKySCChvBPKfDoEdk4hNV7gZz+cWn6aatBuO3Q0o0vXCi5gpcWZDL8u+6x8Qj0jv6 EDpTAZgdhNfxce+hEQNiBIeshjaSx3xU+UCLjFMVj2EwbUxxSfSRGo9MHcUS7q2BLv4U 4vfA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=BoSTULvB; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id v27-20020a1709060b5b00b0092fb3c3b260si11659915ejg.334.2023.03.21.10.07.35; Tue, 21 Mar 2023 10:07:35 -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=@gmail.com header.s=20210112 header.b=BoSTULvB; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 98D8C68BE68; Tue, 21 Mar 2023 19:07:04 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f173.google.com (mail-oi1-f173.google.com [209.85.167.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CA31068BF8D for ; Tue, 21 Mar 2023 19:06:56 +0200 (EET) Received: by mail-oi1-f173.google.com with SMTP id bk5so2331456oib.6 for ; Tue, 21 Mar 2023 10:06:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679418415; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=r2PbORDhiCMRqUKJdksDP5cOeo2q5JAzyXDhVZZ4X6o=; b=BoSTULvBmvXJqKRCeg0RS+zu9uzxCTCiFuoiknfmUBDJkC5kaqo5p4jkWoRHK3MMKq nMwhvn0w7Pt5KgGZCL/tfP1RkZT1gvBaNkKnnWFbC8yndh1/PobZNEewezM2bgnZj2xF 9NExOdBJijdXCqgxgi4ghE5T1Svx9z7T6NREARUKi1bKpxPYOhdOc8uqUfxtqz8bkIlb N9jHODBP3KXM3RKsx4u+i96s2KTTJqvfDgEO2R+huFFRJ+SeJtViIJOkDP2JbTHIj4Vj 1NLuEYhzZ5VS5LRn+yJ2P3f+82TteP5zuQrLms8U9b6pd0NnM5IovWgxvnAw9pev1skh 3lHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679418415; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=r2PbORDhiCMRqUKJdksDP5cOeo2q5JAzyXDhVZZ4X6o=; b=IpRS4xZtcom2MjvC5Ooi7gvznlIBZ0YwmF8/BsHeN/ugrpua74iFJEzh0C021j94oN ZpSaY4MFhXGOpxo5nDxKTWZmPugioYWOk6d2wxuJ3lqBsoQ3IsV4gRa6JyzJ/qY9ZTnv +p3kMQWSFCi5+KBOHzepzZv4FNBFmdLTl8uzuvxKHm1LuHc6SDDUcJ7xfdQhNMwMGEc9 qR+YUTqXiInEjzqTSkEOij3WW3Bx5XOS9KBV1SzCsrIQoHihxEipeqpK3PjU2t2644FT dl1YrXwhnTWajvrc2VobYuvvOSKlwxjvPHB18YLX9aJEqjRaexBHQECIjwMjul7MpdoX RncA== X-Gm-Message-State: AO0yUKXslrsmX1fyTXZtcHAGr4Yv9Eb4eObScJCp2QdcMTRoDh7gYy6v Z2tjlI0XhR5TajFVY46U3Xmc0AltWq4= X-Received: by 2002:a05:6808:1820:b0:386:eedc:a5cd with SMTP id bh32-20020a056808182000b00386eedca5cdmr1631407oib.43.1679418415043; Tue, 21 Mar 2023 10:06:55 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id b11-20020aca1b0b000000b003872148d322sm845876oib.22.2023.03.21.10.06.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Mar 2023 10:06:54 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 21 Mar 2023 14:06:34 -0300 Message-Id: <20230321170637.10907-4-jamrial@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230321170637.10907-1-jamrial@gmail.com> References: <20230321170637.10907-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/7] avformat/matroska: add a few more Block Addition ID Type enum values 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: XTrpAuf+/hPO Signed-off-by: James Almer --- libavformat/matroska.h | 3 +++ libavformat/matroskadec.c | 4 ++-- libavformat/matroskaenc.c | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/libavformat/matroska.h b/libavformat/matroska.h index 8a9c1b5119..04719f1d06 100644 --- a/libavformat/matroska.h +++ b/libavformat/matroska.h @@ -360,7 +360,10 @@ typedef enum { typedef enum { MATROSKA_BLOCK_ADD_ID_TYPE_DEFAULT = 0, + MATROSKA_BLOCK_ADD_ID_TYPE_OPAQUE_DATA = 1, MATROSKA_BLOCK_ADD_ID_TYPE_ITU_T_T35 = 4, + MATROSKA_BLOCK_ADD_ID_TYPE_DVCC = 0x64766343, + MATROSKA_BLOCK_ADD_ID_TYPE_DVVC = 0x64767643, } MatroskaBlockAddIDType; /* diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index b1d2391840..68f9271e73 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2404,8 +2404,8 @@ static int mkv_parse_block_addition_mappings(AVFormatContext *s, AVStream *st, M } track->blockaddid_itu_t_t35 = 1; break; - case MKBETAG('d','v','c','C'): - case MKBETAG('d','v','v','C'): + case MATROSKA_BLOCK_ADD_ID_TYPE_DVCC: + case MATROSKA_BLOCK_ADD_ID_TYPE_DVVC: if ((ret = mkv_parse_dvcc_dvvc(s, st, track, &mapping->extradata)) < 0) return ret; diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 954b7d828f..46f4331a18 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -1612,9 +1612,9 @@ static void mkv_write_dovi(AVFormatContext *s, AVIOContext *pb, AVStream *st) + (2 + 1 + 4) + (2 + 1 + ISOM_DVCC_DVVC_SIZE); if (dovi->dv_profile > 7) { - type = MKBETAG('d', 'v', 'v', 'C'); + type = MATROSKA_BLOCK_ADD_ID_TYPE_DVVC; } else { - type = MKBETAG('d', 'v', 'c', 'C'); + type = MATROSKA_BLOCK_ADD_ID_TYPE_DVCC; } ff_isom_put_dvcc_dvvc(s, buf, dovi); From patchwork Tue Mar 21 17:06:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 40767 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp2759232pzb; Tue, 21 Mar 2023 10:07:47 -0700 (PDT) X-Google-Smtp-Source: AK7set/s2GsjhRJkWaGFr/SWtIrzG8mPlhswnz4z+cdXaivvcjWImekRMnlr/cgDEa8KDk82rb+D X-Received: by 2002:a17:906:2a19:b0:92e:efa:b9be with SMTP id j25-20020a1709062a1900b0092e0efab9bemr3660447eje.18.1679418467540; Tue, 21 Mar 2023 10:07:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679418467; cv=none; d=google.com; s=arc-20160816; b=TV7HOiMmg98mMI6vNjWaS+9qk0hCckiSrBm0q3c4eov3iUR3F5E7FD9YuuyMvo9t9v cc/U+EsW9DgS/GAnV5+O+ZiQI9uqMQAgP50qs0BmV48YO2FSYXHSToOXD0LCBSw+VfeU J73QHXq88TRKxkpPoX492VzgFZraVuLoaia/M8P2SWeNVkMgkhWMsZ7s5GRKHSISPZad 5aPWNtvYlqKGS9cIhpc7wYpDKYlVbdh+UKb09CIVVc/KeOOJBKD8dRpseJVUcDtFkU3R psjz+jg34hCVV4TNETTMA7jdr/AGdgWcXmWZJVYoodZNibzlhMteI64z7VID6sbzXo1F 9/iA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=IKI3MW031LagLOzTyt7bOq/J+39KPZ1HCsxFh+oijIo=; b=ibhjwdRyyn2DDpl/hDqxU9abdCs4hpRl+dOUIFgGa2paO9xYdRS4G3ikrY1G80wuce dirY5mfIySShQkiEEuHJn9n5KSM0FzSjklBaRp1HcQFNBV3eZlT/+w68N7yOEC5Q+YUB JfFxtp7cOWvemoNhgCA5XRdq0XINrSvChyzSr1ZEEd8QHZH+DKmjnprb32cJnC9+IPxF bfsoZvfMMYbWrKdRTss9BYWRMjtUnlZiIrh6yDD0N/jE1SuJMkNPFqDb7V9rzinOlj1U fO+nn6QkN91q3T1yEegRcQ81oyuXwegyJt0BeBHBz+TBVzb2cyWkTXPJmnjWzDAYK4VA NhXw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=kpPb5ywc; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id hr12-20020a1709073f8c00b009333f8775a1si11298458ejc.182.2023.03.21.10.07.46; Tue, 21 Mar 2023 10:07:47 -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=@gmail.com header.s=20210112 header.b=kpPb5ywc; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9428F68C23C; Tue, 21 Mar 2023 19:07:05 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f174.google.com (mail-oi1-f174.google.com [209.85.167.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C36FD68C248 for ; Tue, 21 Mar 2023 19:06:57 +0200 (EET) Received: by mail-oi1-f174.google.com with SMTP id bm2so2725418oib.4 for ; Tue, 21 Mar 2023 10:06:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679418416; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=C2UdzBHi+E9ILEegRNfYTMy0dKh21dlTjKLEbJ3e0Vs=; b=kpPb5ywcG0xH04wYBCLKLfCF/cvaINjZV352ba9BUDge0TpwfB1QIsHVcgRQa6qYgl MHYsHmM61FWRsIDzYd1ea7JgMK2tpTPdZYejBFL/D+B2yqiCN7b0fJS9VySkfA5ew6/2 HPs+7LXLz1E8FM0EnnuXkKoDihwgu+j3x0YCrq6LuAQEFox5dE1/NRjXpc7ps30UGf+v vu8UpFY0DW2nvaq7gnlwc0FjzhDCKBH73+jWpRIvXFSR2hkiB5JsSh05vaLzY0AFGTvB EVbP+xP/ImZC/lfG6P/ibnuee6LkL8z4PtWx6P4lxAhewr+eM1As0i9AlVDBBoK73hx+ 26xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679418416; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=C2UdzBHi+E9ILEegRNfYTMy0dKh21dlTjKLEbJ3e0Vs=; b=LSDnF5+QISjN9/FNyJ9L8OXSWIVa8+Ap971EzE1e019LVH73L2IANCJaC2n+4uiB4s vm+bSuRaK4EYpXX2K1NhDv/XqBw/DsmUC9+t0GrTuhzVRHRIuaqfTuI4HeGZp2Bv+7qa BhSK46DqWwJpTNlyNkkDVgSjMlOL+aaQUflqrf6AJbymoNucxnuVqw6JPbFlV2zgAbuP kqPFEEfjOoLdZFZ0XYjh8rEK6HoplWkTQQOSeg7cl0c+kn1pEKs8FPoC5sxvc3pEm3B5 X5mjgnAXIHTU5nlg10ArZ7JlNzk6fG7gRkqvc1StlKejSt1BESaORJLwlo95mbvHsnT1 lAPA== X-Gm-Message-State: AO0yUKWVHRS1z0FAwtyxG2OldZDHcXsSBjvB/At1poQTBRpqDMeV0Nca JhY/fUfq6bYE8OrAEk+De+FGHFIV0mw= X-Received: by 2002:aca:1012:0:b0:386:e5ba:4585 with SMTP id 18-20020aca1012000000b00386e5ba4585mr1521864oiq.9.1679418416231; Tue, 21 Mar 2023 10:06:56 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id b11-20020aca1b0b000000b003872148d322sm845876oib.22.2023.03.21.10.06.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Mar 2023 10:06:55 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 21 Mar 2023 14:06:35 -0300 Message-Id: <20230321170637.10907-5-jamrial@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230321170637.10907-1-jamrial@gmail.com> References: <20230321170637.10907-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/7] avformat/matroskaenc: write a MaxBlockAdditionID element 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: NXhZnLcmoBvm A non zero value is mandatory for Matroska if the track has blocks with BlockAdditions. Signed-off-by: James Almer --- libavformat/matroskaenc.c | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 46f4331a18..0687d9c32e 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -188,6 +188,8 @@ typedef struct mkv_track { int64_t last_timestamp; int64_t duration; int64_t duration_offset; + uint64_t max_blockaddid; + int64_t blockadditionmapping_offset; int codecpriv_offset; unsigned codecpriv_size; ///< size reserved for CodecPrivate excluding header+length field int64_t ts_offset; @@ -1597,12 +1599,21 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer, return 0; } -static void mkv_write_dovi(AVFormatContext *s, AVIOContext *pb, AVStream *st) +static void mkv_write_blockadditionmapping(AVFormatContext *s, MatroskaMuxContext *mkv, + AVIOContext *pb, mkv_track *track, AVStream *st) { #if CONFIG_MATROSKA_MUXER AVDOVIDecoderConfigurationRecord *dovi = (AVDOVIDecoderConfigurationRecord *) av_stream_get_side_data(st, AV_PKT_DATA_DOVI_CONF, NULL); + if (IS_SEEKABLE(s->pb, mkv)) { + track->blockadditionmapping_offset = avio_tell(pb); + // We can't know at this point if there will be a block with BlockAdditions, so + // we either write the default value here, or a void element. Either of them will + // be overwritten when finishing the track. + put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, 0); + } + if (dovi && dovi->dv_profile <= 10) { ebml_master mapping; uint8_t buf[ISOM_DVCC_DVVC_SIZE]; @@ -1846,9 +1857,6 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, if (ret < 0) return ret; - if (!IS_WEBM(mkv)) - mkv_write_dovi(s, pb, st); - break; case AVMEDIA_TYPE_AUDIO: @@ -1924,6 +1932,9 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, return AVERROR(EINVAL); } + if (!IS_WEBM(mkv)) + mkv_write_blockadditionmapping(s, mkv, pb, track, st); + if (!IS_WEBM(mkv) || par->codec_id != AV_CODEC_ID_WEBVTT) { uint8_t *codecpriv; int codecpriv_size, max_payload_size; @@ -2667,6 +2678,7 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, side_data + 8, side_data_size - 8); ebml_writer_close_master(&writer); ebml_writer_close_master(&writer); + track->max_blockaddid = additional_id; } if (!force_blockgroup && writer.nb_elements == 2) { @@ -3070,6 +3082,22 @@ after_cues: if (mkv->track.bc) { // write Tracks master + int64_t end = avio_tell(mkv->track.bc); + + for (int i = 0; i < s->nb_streams; i++) { + const mkv_track *track = &mkv->tracks[i]; + + if (IS_WEBM(mkv)) + break; + if (!track->max_blockaddid) + continue; + + avio_seek(mkv->track.bc, track->blockadditionmapping_offset, SEEK_SET); + + put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, track->max_blockaddid); + } + + avio_seek(mkv->track.bc, end, SEEK_SET); avio_seek(pb, mkv->track.pos, SEEK_SET); ret = end_ebml_master_crc32(pb, &mkv->track.bc, mkv, MATROSKA_ID_TRACKS, 0, 0, 0); From patchwork Tue Mar 21 17:06:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 40768 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp2759357pzb; Tue, 21 Mar 2023 10:07:57 -0700 (PDT) X-Google-Smtp-Source: AK7set8aahTTuw7FnZk43DkB/j7BdrZbASLD9ejxjZA/TiVaPNh11FXbpsfBwH0kZLJ+Wn5nK39e X-Received: by 2002:a17:906:b309:b0:933:c052:a277 with SMTP id n9-20020a170906b30900b00933c052a277mr3695194ejz.12.1679418477127; Tue, 21 Mar 2023 10:07:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679418477; cv=none; d=google.com; s=arc-20160816; b=RPAQzhSWdAwLIiI2Lwd68WKuVNg7NICDQBhIdkgdrvImEzT2HjJaA789muvMqUAPfx Wmv/qXFQpYLYDN6g4lOK/nu/YtET6jGjsMQzIxVrOwATIeha2L5YbOI4qpAuhWp90QTp o4SVSVw8jm/ckFNzb7yoamdBKBqNhM1NYqZ3P9TrSo1i7nCojCsjLXgNRHQXroyaaqAE auqTkuzyKPiJuDe3pqOCW5LbqIwMyTjJ98IGGZxVirpWIizPPr7MUmf5B4f6ufXFJ++7 l4rPbqzzW/B0iH9NSswH/PJ5NHzFJF3F3EGlEAoGorPyG+mRrrmRZ3Q3JHfinv4tEpRu vpiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=SS0q7dk2dOYpjzUg0Vq13qDoezjhf9gvGGhTSo2LYcI=; b=Iv0VlTuZddTuAFYk8UVd/Ou58urqySDGekbmJkvBJMJ0BekFgMPFHRYFVy/eFz+k6o FRaT3VryY82wRFu8TE27Xi70RuZl24UTbpx7ETYniUlBp+zrESEmbWQ6BaN57dN/B+ts ya6lNWctJSwbSJnoPoAN+oLh6fmnp8mg6oEf0WgFc7n+QE7VcdGijgqbIMsRlzuMMYyN Vc7zY43mnt0CyyoizNRX9RwWDJ1jkXeaegyN+OiXfj3Zds2vj/JP0ynYWHtqPgO+AS/U R3g+G5QB3nE6ZWarZNP5maKv/epLj7IpAqhnY5sw7YLggqcNJRG9yBrb4OWcMdaQUINh gMqw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="cI/sT7Gj"; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id vq8-20020a170907a4c800b00933489ce7a6si8461427ejc.444.2023.03.21.10.07.56; Tue, 21 Mar 2023 10:07:57 -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=@gmail.com header.s=20210112 header.b="cI/sT7Gj"; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7F90968C3A7; Tue, 21 Mar 2023 19:07:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f180.google.com (mail-oi1-f180.google.com [209.85.167.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6F92468BE68 for ; Tue, 21 Mar 2023 19:06:59 +0200 (EET) Received: by mail-oi1-f180.google.com with SMTP id v17so1852386oic.5 for ; Tue, 21 Mar 2023 10:06:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679418418; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=dVay7/vtB0WW3nxEYctfx7pAIoGFlmKvbHSRvL26uJc=; b=cI/sT7Gj3kFhnWUtmnsowwnnBlgVpDul1D+1a7C2jkTy6CTKTFrqN7Bc1u7QaN+1l/ kzvWgWX33mSwQ2SYPO8q9yyJCBqqXxXjK4KRZpEOgoUBM6HvRf21Gn82D+5e/Q5oU+BG tqD4pzg0lf+C4MmVYL3Lc8tz3zdsALQifmRGv87MaRzBlWe17UTStcmydjQv8NrlUds7 G++TzTaCz716t+CHLBolfgY0tHUZhyZhrQjs9vOKvKeU3CC1SQ9APooS0IOHx45Z6WFI B/TbceGIvfxVlfYA/5X55zfjAu6nQFIwVcVm1Mt86n7Mbekr6Nh3i7mKjtC5LclwSl5x ZAcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679418418; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dVay7/vtB0WW3nxEYctfx7pAIoGFlmKvbHSRvL26uJc=; b=EITZgyN11lpvYxkA6Okx6yjzTukeNN67aV5P2cZYqCdro/+nl5g2Zvr0BNtJFOC+yG I8zNEWfLWMmxDl+JgIQu8YT5cE3z8+gR0aKfPFEr65HUt7QC34vdcEvGfQm+YQfkQmOd ENvgk8kDJZ/BjIPEYesz0657baokLhYSZIS3X4gHKjHgV5hcp1cRzHUJ6y0eg/ZV2W9/ +4TiUDKWVKc0a+CpaNJM3ytIZI2AKbBnXAB6ErPOYVmRmLXfZ6EpL7Erh/1DXWpsKfaE Bi5spS/ACMlaAsGuhgSVDEgYpoe8m5N+aoiR6m1l/XGA29gih9QDBUG08gTH9WcY8A04 TRhQ== X-Gm-Message-State: AO0yUKW0+g6Y2AK8dTUpJs01Fo09Ln5Tm9IO1opgmfAL6sB5jzLdQHB7 fpdqKTP1GVM048g/ce4PemLgbAV9Ung= X-Received: by 2002:aca:1202:0:b0:383:f380:868e with SMTP id 2-20020aca1202000000b00383f380868emr1279352ois.34.1679418417640; Tue, 21 Mar 2023 10:06:57 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id b11-20020aca1b0b000000b003872148d322sm845876oib.22.2023.03.21.10.06.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Mar 2023 10:06:57 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 21 Mar 2023 14:06:36 -0300 Message-Id: <20230321170637.10907-6-jamrial@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230321170637.10907-1-jamrial@gmail.com> References: <20230321170637.10907-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/7] avformat/matroskaenc: support writing Dynamic HDR10+ packet side data 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Uj8S1UOnUQC2 Signed-off-by: James Almer --- libavformat/matroskaenc.c | 90 +++++++++++++++++++++++++++++++++------ 1 file changed, 77 insertions(+), 13 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 0687d9c32e..b0d088cef5 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -44,6 +44,7 @@ #include "libavutil/channel_layout.h" #include "libavutil/crc.h" #include "libavutil/dict.h" +#include "libavutil/hdr_dynamic_metadata.h" #include "libavutil/intfloat.h" #include "libavutil/intreadwrite.h" #include "libavutil/lfg.h" @@ -1612,6 +1613,10 @@ static void mkv_write_blockadditionmapping(AVFormatContext *s, MatroskaMuxContex // we either write the default value here, or a void element. Either of them will // be overwritten when finishing the track. put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, 0); + // Similarly, reserve space for an eventual HDR10+ ITU T.35 metadata BlockAdditionMapping. + put_ebml_void(pb, 3 /* BlockAdditionMapping */ + + 4 /* BlockAddIDValue */ + + 4 /* BlockAddIDType */); } if (dovi && dovi->dv_profile <= 10) { @@ -2618,17 +2623,34 @@ static int webm_reformat_vtt(MatroskaMuxContext *mkv, AVIOContext *pb, return 0; } +static void mkv_write_blockadditional(EbmlWriter *writer, const uint8_t *buf, + size_t size, enum AVPacketSideDataType type, + uint64_t additional_id) +{ + size_t offset = 0; + + if (type == AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL) + offset = 8; + + ebml_writer_open_master(writer, MATROSKA_ID_BLOCKMORE); + ebml_writer_add_uint(writer, MATROSKA_ID_BLOCKADDID, additional_id); + ebml_writer_add_bin (writer, MATROSKA_ID_BLOCKADDITIONAL, + buf + offset, size - offset); + ebml_writer_close_master(writer); +} + static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, AVIOContext *pb, const AVCodecParameters *par, mkv_track *track, const AVPacket *pkt, int keyframe, int64_t ts, uint64_t duration, int force_blockgroup, int64_t relative_packet_pos) { - uint8_t *side_data; + uint8_t *side_data, *buf = NULL; size_t side_data_size; - uint64_t additional_id; + uint64_t additional_id, max_blockaddid = 0; unsigned track_number = track->track_num; - EBML_WRITER(9); + int ret; + EBML_WRITER(13); mkv->cur_block.track = track; mkv->cur_block.pkt = pkt; @@ -2670,17 +2692,50 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, // Only the Codec-specific BlockMore (id == 1) is currently supported. (additional_id = AV_RB64(side_data)) == 1) { ebml_writer_open_master(&writer, MATROSKA_ID_BLOCKADDITIONS); - ebml_writer_open_master(&writer, MATROSKA_ID_BLOCKMORE); - /* Until dbc50f8a our demuxer used a wrong default value - * of BlockAddID, so we write it unconditionally. */ - ebml_writer_add_uint(&writer, MATROSKA_ID_BLOCKADDID, additional_id); - ebml_writer_add_bin (&writer, MATROSKA_ID_BLOCKADDITIONAL, - side_data + 8, side_data_size - 8); - ebml_writer_close_master(&writer); - ebml_writer_close_master(&writer); - track->max_blockaddid = additional_id; + mkv_write_blockadditional(&writer, side_data, side_data_size, + AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, + additional_id); + max_blockaddid = track->max_blockaddid = FFMAX(track->max_blockaddid, + additional_id); + } + + side_data = av_packet_get_side_data(pkt, + AV_PKT_DATA_DYNAMIC_HDR10_PLUS, + &side_data_size); + if (side_data_size) { + uint8_t *payload; + size_t payload_size, buf_size; + int ret = av_dynamic_hdr_plus_to_t35((AVDynamicHDRPlus *)side_data, &payload, + &payload_size); + if (ret < 0) + return ret; + + buf_size = payload_size + 6; + buf = av_malloc(buf_size); + if (!buf) { + av_free(payload); + return AVERROR(ENOMEM); + } + + AV_WB8 (buf + 0, 0xB5); // country_code + AV_WB16(buf + 1, 0x3C); // provider_code + AV_WB16(buf + 3, 0x01); // provider_oriented_code + AV_WB8 (buf + 5, 0x04); // application_identifier + memcpy(buf + 6, payload, payload_size); + + if (!max_blockaddid) + ebml_writer_open_master(&writer, MATROSKA_ID_BLOCKADDITIONS); + mkv_write_blockadditional(&writer, buf, buf_size, + AV_PKT_DATA_DYNAMIC_HDR10_PLUS, + 4); + track->max_blockaddid = FFMAX(track->max_blockaddid, 4); + + av_free(payload); } + if (max_blockaddid) + ebml_writer_close_master(&writer); + if (!force_blockgroup && writer.nb_elements == 2) { /* Nothing except the BlockGroup + Block. Can use a SimpleBlock. */ writer.elements++; // Skip the BlockGroup. @@ -2693,7 +2748,10 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, ebml_writer_add_sint(&writer, MATROSKA_ID_BLOCKREFERENCE, track->last_timestamp - ts); - return ebml_writer_write(&writer, pb); + ret = ebml_writer_write(&writer, pb); + av_free(buf); + + return ret; } static int mkv_end_cluster(AVFormatContext *s) @@ -3095,6 +3153,12 @@ after_cues: avio_seek(mkv->track.bc, track->blockadditionmapping_offset, SEEK_SET); put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, track->max_blockaddid); + if (track->max_blockaddid == 4) { // HDR10+ + ebml_master mapping_master = start_ebml_master(mkv->track.bc, MATROSKA_ID_TRACKBLKADDMAPPING, 8); + put_ebml_uint(mkv->track.bc, MATROSKA_ID_BLKADDIDTYPE, MATROSKA_BLOCK_ADD_ID_TYPE_ITU_T_T35); + put_ebml_uint(mkv->track.bc, MATROSKA_ID_BLKADDIDVALUE, 4); + end_ebml_master(mkv->track.bc, mapping_master); + } } avio_seek(mkv->track.bc, end, SEEK_SET); From patchwork Tue Mar 21 17:06:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 40769 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp2759543pzb; Tue, 21 Mar 2023 10:08:09 -0700 (PDT) X-Google-Smtp-Source: AK7set/sqnpvReawT8/rNGWi2B66RExZZTajB8bi1x+GhN25PNK9y55BPWLE5qwww4xn7eWZjsYB X-Received: by 2002:a05:6402:2053:b0:4fa:d75c:16cd with SMTP id bc19-20020a056402205300b004fad75c16cdmr3977884edb.34.1679418489236; Tue, 21 Mar 2023 10:08:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679418489; cv=none; d=google.com; s=arc-20160816; b=HxFRd4OF1Ttpfm9t+rak5O1NUUTW/b7hAAd3V4+U8jSG84UGgFQV7J3tvDiheBbWA3 Qhih63XbwoY1gRur2OCFQkg5UzLdhWnVjfI5c6D8t0kDOcafBLwI450wTlynk7jgkrm4 47jQZOPRFQ5fFHErE7mfl+n1qzVCxvTaJ8isXvfDdwh+w2F/MmAWAnBxRIqMDSABUUf5 q0LULkmz11IQwP08JmsTFD8i5ei8sIFgp7rxy8xAwRbJrQsUrg2uIKM1B9K2mei75sUt /PxOyTt3mF7WmgifVIFrhLXPJ40sLMpDhZmDOA1+Q7xCv1enAys+1aO2ecVJoIAwcznY CXrw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=OgPSU9/mhVTH4fx9mzn2du8L2ug4VfrOLAFfHUIupMU=; b=cX1ln/6W+lA8ms+DD/hrMhohvDhyh+aSjdylrbsNPrWxYn/ZkURhMcuD2ih+OzY2yR XWefFHRi94D60aP6DQ8NM4XP3OyzpwemHgFKfia8VLUS76WIZQf6/Q+NVKeelbKSD0Mz Cgophk9hxklXwCel6vCbxTDoX2OG/tFlfGMF6BEcoOBwyNI0WXnCCPPJENnKqt3HNzdx QPg7bvuIIHW5bO4+pDkwT9mknNNo2t8ApkUzErcMVbXbdsNC3efgivyRPgajr+MOOdRR MBgDAGyZKDH/DAGdf8tjoLdD9BxPWeWMY9m4i3KeSEKd2mYI8CTCIopYPZuzaEMIMOW1 ykzQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=X9ezxbsf; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id t23-20020aa7d717000000b004be020a0537si13645054edq.512.2023.03.21.10.08.07; Tue, 21 Mar 2023 10:08:09 -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=@gmail.com header.s=20210112 header.b=X9ezxbsf; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 882A568C4DA; Tue, 21 Mar 2023 19:07:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f169.google.com (mail-oi1-f169.google.com [209.85.167.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 987DC68C2EA for ; Tue, 21 Mar 2023 19:07:00 +0200 (EET) Received: by mail-oi1-f169.google.com with SMTP id v17so1852432oic.5 for ; Tue, 21 Mar 2023 10:07:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679418419; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=zyJQ993N5Eho4X1Fl5GTnvvbwSfmpgtFOmkRCoG0C9Y=; b=X9ezxbsfHWF/83hvcvTSuhjNgN5zzqKR1tXyedXG34rHB9Dve43eSQdli+qixpQh1V re1iS6krPrOauUnNxHmk6U0GGPy1yrj+3+zDcQ1aGuZzM3BLhg28Y22qNt5ktu6prPWi NscXu3b35mUysVcsNrM4b42UpKTCXFsWiJpMNdxu/FEnoOOSFT+MVqedl202AtXFaaYi tJyxbJHhHFtNzC1t2ZNAiOvXIMgOoFFNXETikXonuz1hPn+LZvMF1nzJzLWGdyUGMyzq IeVZXidDGjDjip0alDLa19ODwYpP8vXIzddPdCD1U6wAE1PS2cTC0WXmI7yNxy3pM41J Zmlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679418419; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zyJQ993N5Eho4X1Fl5GTnvvbwSfmpgtFOmkRCoG0C9Y=; b=y7lTsI9yHYNJkCKn0YEvrZLMsfa4arMxC23mIUx+OPByAf8EWPmvLZnUmwsp1eX6BO vRSlHlJhOJuasRZUOJjIo6/Y9javYwcPpVjeO9abUemtP/S1zOPjC3IUA816Ycrnw+Iq VEKjqEus/EHuyL5jppedbjBX4cVAe5CBcge3uRvdj4gLy6zLuNkDTwdFapIV4+R3QZE+ C3ClxUq+6PvS+jz20Y2Kt3LoRElTvR5Eb1pqdoQdSPv9awiR8+6YsFGVAW7o5g8UI+tZ bSXHro5MOpn+G2oxIwnu7ZgWZEtXxHpa+GFevQNiMeruw4sg6mNIvjkvfTiE3S+OWshN rhJw== X-Gm-Message-State: AO0yUKUijvz0zJLJMlOO/DuBKtcwys69A2ZnVuayYmKlVBYcEXnf3Szi 3xWVlqH56mMlockoBuUeVNNRk9x2Bv4= X-Received: by 2002:a05:6808:b19:b0:360:d307:c23c with SMTP id s25-20020a0568080b1900b00360d307c23cmr2173930oij.25.1679418418947; Tue, 21 Mar 2023 10:06:58 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id b11-20020aca1b0b000000b003872148d322sm845876oib.22.2023.03.21.10.06.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Mar 2023 10:06:58 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 21 Mar 2023 14:06:37 -0300 Message-Id: <20230321170637.10907-7-jamrial@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230321170637.10907-1-jamrial@gmail.com> References: <20230321170637.10907-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 7/7] fate/matroska: add HDR10+ muxing tests 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: pL3u3gt/46cV Signed-off-by: James Almer --- tests/fate/matroska.mak | 8 +++ tests/ref/fate/matroska-hdr10-plus-remux | 82 ++++++++++++++++++++++++ tests/ref/fate/webm-hdr10-plus-remux | 82 ++++++++++++++++++++++++ 3 files changed, 172 insertions(+) create mode 100644 tests/ref/fate/matroska-hdr10-plus-remux create mode 100644 tests/ref/fate/webm-hdr10-plus-remux diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak index 39137ad4be..2f1266b298 100644 --- a/tests/fate/matroska.mak +++ b/tests/fate/matroska.mak @@ -217,6 +217,14 @@ FATE_MATROSKA_FFMPEG_FFPROBE-$(call REMUX, WEBM MATROSKA, WEBVTT_DEMUXER) \ += fate-webm-webvtt-remux fate-webm-webvtt-remux: CMD = transcode webvtt $(TARGET_SAMPLES)/sub/WebVTT_capability_tester.vtt webm "-map 0 -map 0 -map 0 -map 0 -c:s copy -disposition:0 original+descriptions+hearing_impaired -disposition:1 lyrics+default+metadata -disposition:2 comment+forced -disposition:3 karaoke+captions+dub" "-map 0:0 -map 0:1 -c copy" "-show_entries stream_disposition:stream=index,codec_name:packet=stream_index,pts:packet_side_data_list -show_data_hash CRC32" +FATE_MATROSKA_FFMPEG_FFPROBE-$(call REMUX, WEBM MATROSKA, VP9_PARSER) \ + += fate-webm-hdr10-plus-remux +fate-webm-hdr10-plus-remux: CMD = transcode webm $(TARGET_SAMPLES)/mkv/hdr10_plus_vp9_sample.mkv webm "-map 0 -c:v copy" "-map 0 -c:v copy" "-show_frames" + +FATE_MATROSKA_FFMPEG_FFPROBE-$(call REMUX, MATROSKA, VP9_PARSER) \ + += fate-matroska-hdr10-plus-remux +fate-matroska-hdr10-plus-remux: CMD = transcode webm $(TARGET_SAMPLES)/mkv/hdr10_plus_vp9_sample.mkv matroska "-map 0 -c:v copy" "-map 0 -c:v copy" "-show_frames" + FATE_SAMPLES_AVCONV += $(FATE_MATROSKA-yes) FATE_SAMPLES_FFPROBE += $(FATE_MATROSKA_FFPROBE-yes) FATE_SAMPLES_FFMPEG_FFPROBE += $(FATE_MATROSKA_FFMPEG_FFPROBE-yes) diff --git a/tests/ref/fate/matroska-hdr10-plus-remux b/tests/ref/fate/matroska-hdr10-plus-remux new file mode 100644 index 0000000000..d86713ea05 --- /dev/null +++ b/tests/ref/fate/matroska-hdr10-plus-remux @@ -0,0 +1,82 @@ +0f941512f69b1cc0ac27f3375e56a0cc *tests/data/fate/matroska-hdr10-plus-remux.matroska +13892 tests/data/fate/matroska-hdr10-plus-remux.matroska +#tb 0: 1/1000 +#media_type 0: video +#codec_id 0: vp9 +#dimensions 0: 1280x720 +#sar 0: 1/1 +0, 0, 0, 40, 13350, 0x5f64e443, S=1, 11304 +[FRAME] +media_type=video +stream_index=0 +key_frame=1 +pts=0 +pts_time=0.000000 +pkt_dts=0 +pkt_dts_time=0.000000 +best_effort_timestamp=0 +best_effort_timestamp_time=0.000000 +pkt_duration=40 +pkt_duration_time=0.040000 +duration=40 +duration_time=0.040000 +pkt_pos=436 +pkt_size=13350 +width=1280 +height=720 +pix_fmt=yuv420p10le +sample_aspect_ratio=1:1 +pict_type=I +coded_picture_number=0 +display_picture_number=0 +interlaced_frame=0 +top_field_first=0 +repeat_pict=0 +color_range=tv +color_space=unknown +color_primaries=unknown +color_transfer=unknown +chroma_location=unspecified +[SIDE_DATA] +side_data_type=HDR Dynamic Metadata SMPTE2094-40 (HDR10+) +application version=1 +num_windows=1 +targeted_system_display_maximum_luminance=400/1 +maxscl=3340/100000 +maxscl=2870/100000 +maxscl=2720/100000 +average_maxrgb=510/100000 +num_distribution_maxrgb_percentiles=9 +distribution_maxrgb_percentage=1 +distribution_maxrgb_percentile=30/100000 +distribution_maxrgb_percentage=5 +distribution_maxrgb_percentile=2940/100000 +distribution_maxrgb_percentage=10 +distribution_maxrgb_percentile=255/100000 +distribution_maxrgb_percentage=25 +distribution_maxrgb_percentile=70/100000 +distribution_maxrgb_percentage=50 +distribution_maxrgb_percentile=1340/100000 +distribution_maxrgb_percentage=75 +distribution_maxrgb_percentile=1600/100000 +distribution_maxrgb_percentage=90 +distribution_maxrgb_percentile=1850/100000 +distribution_maxrgb_percentage=95 +distribution_maxrgb_percentile=1950/100000 +distribution_maxrgb_percentage=99 +distribution_maxrgb_percentile=2940/100000 +fraction_bright_pixels=1/1000 +knee_point_x=0/4095 +knee_point_y=0/4095 +num_bezier_curve_anchors=9 +bezier_curve_anchors=102/1023 +bezier_curve_anchors=205/1023 +bezier_curve_anchors=307/1023 +bezier_curve_anchors=410/1023 +bezier_curve_anchors=512/1023 +bezier_curve_anchors=614/1023 +bezier_curve_anchors=717/1023 +bezier_curve_anchors=819/1023 +bezier_curve_anchors=922/1023 +[/SIDE_DATA] +[/FRAME] diff --git a/tests/ref/fate/webm-hdr10-plus-remux b/tests/ref/fate/webm-hdr10-plus-remux new file mode 100644 index 0000000000..bb6eda0abe --- /dev/null +++ b/tests/ref/fate/webm-hdr10-plus-remux @@ -0,0 +1,82 @@ +30923c8d916f5719f62727f24957974f *tests/data/fate/webm-hdr10-plus-remux.webm +13843 tests/data/fate/webm-hdr10-plus-remux.webm +#tb 0: 1/1000 +#media_type 0: video +#codec_id 0: vp9 +#dimensions 0: 1280x720 +#sar 0: 1/1 +0, 0, 0, 40, 13350, 0x5f64e443, S=1, 11304 +[FRAME] +media_type=video +stream_index=0 +key_frame=1 +pts=0 +pts_time=0.000000 +pkt_dts=0 +pkt_dts_time=0.000000 +best_effort_timestamp=0 +best_effort_timestamp_time=0.000000 +pkt_duration=40 +pkt_duration_time=0.040000 +duration=40 +duration_time=0.040000 +pkt_pos=393 +pkt_size=13350 +width=1280 +height=720 +pix_fmt=yuv420p10le +sample_aspect_ratio=1:1 +pict_type=I +coded_picture_number=0 +display_picture_number=0 +interlaced_frame=0 +top_field_first=0 +repeat_pict=0 +color_range=tv +color_space=unknown +color_primaries=unknown +color_transfer=unknown +chroma_location=unspecified +[SIDE_DATA] +side_data_type=HDR Dynamic Metadata SMPTE2094-40 (HDR10+) +application version=1 +num_windows=1 +targeted_system_display_maximum_luminance=400/1 +maxscl=3340/100000 +maxscl=2870/100000 +maxscl=2720/100000 +average_maxrgb=510/100000 +num_distribution_maxrgb_percentiles=9 +distribution_maxrgb_percentage=1 +distribution_maxrgb_percentile=30/100000 +distribution_maxrgb_percentage=5 +distribution_maxrgb_percentile=2940/100000 +distribution_maxrgb_percentage=10 +distribution_maxrgb_percentile=255/100000 +distribution_maxrgb_percentage=25 +distribution_maxrgb_percentile=70/100000 +distribution_maxrgb_percentage=50 +distribution_maxrgb_percentile=1340/100000 +distribution_maxrgb_percentage=75 +distribution_maxrgb_percentile=1600/100000 +distribution_maxrgb_percentage=90 +distribution_maxrgb_percentile=1850/100000 +distribution_maxrgb_percentage=95 +distribution_maxrgb_percentile=1950/100000 +distribution_maxrgb_percentage=99 +distribution_maxrgb_percentile=2940/100000 +fraction_bright_pixels=1/1000 +knee_point_x=0/4095 +knee_point_y=0/4095 +num_bezier_curve_anchors=9 +bezier_curve_anchors=102/1023 +bezier_curve_anchors=205/1023 +bezier_curve_anchors=307/1023 +bezier_curve_anchors=410/1023 +bezier_curve_anchors=512/1023 +bezier_curve_anchors=614/1023 +bezier_curve_anchors=717/1023 +bezier_curve_anchors=819/1023 +bezier_curve_anchors=922/1023 +[/SIDE_DATA] +[/FRAME]