From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 7B3C04A1C4 for ; Sat, 23 Mar 2024 18:02:37 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 17C4C68D39C; Sat, 23 Mar 2024 20:02:36 +0200 (EET) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2062.outbound.protection.outlook.com [40.92.91.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7BCB768D380 for ; Sat, 23 Mar 2024 20:02:29 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KgApWjLr6pWZBwJoaucMZVwEWwir2yua13cweFTixd9UJztV+UxJwhClZhSpQ3HCVEWYePPWCThSCOhjbWLvImHuJdvHNMoqtPcg34mohkrRbbQxBkJy73hfiBtKoNDidwoVyd+reyAcoYB7ItYmd0n1cquMX6WxRPlVNVt01qcxQeRqGMKaHiBmtjg2ArVdE2H/KkFVH7VKlb1Opo1p20RmJyrGPFwJ9oyv17jMeKfqwiE4LI4rzhhVhykJLtrtOpSzamDdm6EAf8KhftCiVgfmMteHLPYsHPRVvKxJt5nrHtKQ9dUz5F4ahW5WWq2sQnkJJR9eQehLLCIy/uP/ow== 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=GsLnX5pjElGnXKDfo9TlO+3IJGjbIL3GlZFlSV5hW/0=; b=RMkn/KBkpjBT43Kek8y22JuTTGhsV+Z7jZeh6LRqr8boGRFGnje5fYpQ+ViQEuB2PZkLtULMWrXZV6uDYIkSrQZFwJPiWaJRbft8k5R+V4pcjBwU/xW1CLZJF8HD8ZDx05/ux9BPbc3XoxSXEud/3LodlFybpW8sMgSv9vinrLA/QXA0e+iMSWoYW+JtzTtbFtLuCR9z11MuFPew0QR1lCa/z0LmsPOKygS5n96J2aeYuB+cC2K7J6B6XLrfUx/vR+rCi0wt5+/UHXKRfp0yPqwZ4WuKIh3oUZbouun27QpLblflibWbb6OS4p7bh8cnM//vbA6uMvXyudvfVIphsw== 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=GsLnX5pjElGnXKDfo9TlO+3IJGjbIL3GlZFlSV5hW/0=; b=c17ZJmtwBAfO+RQwSY2cBym+2SA4+6od+Jr1g5WQJLjikcIc0vhFV5/4feh8TmyEYvWksdW3StOyiY0ywQ2j5Q2akqJzwped3rNJ8cE7IsfyZPa5OK44rrmD4cLFXQ5cci6JxZdLJ6Ww/D4MUFm/D5QTABZR6Y0FgI20eRorl8PJz/NzKvJ4rI28yYIiAwl4fLVAVHZ0HqMFRtSyDekc8S3Kd3OwmUbKTzbnsgDYHWr3WtPIkz3cZRcqYfzR9biOzdLZVlERxysZavWQXvzaX+ofaAn3b0MCQ8MPlGXUyMo3YJCXrvkEtFUkHl5ohMLapGU7L1dBapxfNhhkv62GPg== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by DU0P250MB0532.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:328::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.26; Sat, 23 Mar 2024 18:02:28 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d%4]) with mapi id 15.20.7409.026; Sat, 23 Mar 2024 18:02:27 +0000 Message-ID: Date: Sat, 23 Mar 2024 19:02:26 +0100 User-Agent: Mozilla Thunderbird Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20240323173735.26224-1-ffmpeg@haasn.xyz> <20240323173735.26224-3-ffmpeg@haasn.xyz> From: Andreas Rheinhardt In-Reply-To: <20240323173735.26224-3-ffmpeg@haasn.xyz> X-TMN: [yOVoIi9Yv4eXKfbdDwIyyoLlIqRkhVsGHIGZqgehx3M=] X-ClientProxiedBy: ZR0P278CA0059.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:21::10) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <36445f87-dc82-41e5-bc6e-7ed7b0b84b49@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|DU0P250MB0532:EE_ X-MS-Office365-Filtering-Correlation-Id: b303705f-b778-4660-f01f-08dc4b636664 X-MS-Exchange-SLBlob-MailProps: Cq7lScuPrnqkjmXb1vlddM5aSa/Epk3AibO10AcKiLpYJqzt0nzxxwLb3Qc9ALqSls8hhqYPYD2N9WRo9XDIl6tiFjec0ReWe1aJQo3uylZFyzFdoadQBP6OVBG4dC1J2l+yqwGeomIAzKTIwXytDVNZUp8h4HsYvAbQY+Ht2gAbmRrZFqwSseMwsBnznlSg7P4CUOK/amVhFY7nkNEc7PwzIpnkiz0Iolp3PPPOoJutfR35Hg6anDs3I+OyH0Y3qwbLtedUjU6n85igf2BPOUPWvmN+P38VP7o6RjqHB1uOgVya3KrcDoCPztpNOIOuX9ElHw2IIHEm0F8uOfBzphw+cLn53ssXPDojvO/8vpWk5x1VI7Sr5zlG3yGyHYstPH48RQKtWFLM09sl9y0P7sdBMeb+a8amxnx6wvdhRslL5oR7ZXaP5DxZBAtH7mFdOwSbAv4w4y+cqm0oftCUnQ1gJduKS7Kq/T2Pq2jegerEsbCHwo5OxPKwphzvKGprQfK2PN+uAyZfsHZ2l5hjmYTwnyzrEzzFGu0hsgoqy5SMv7SuJmMAzNGuau/tYy4Y35zHsfhr/qj1z49qVBhhqwqrsMvH8Cqg3+agKKK8SRym4r9CPGjiscouSBHvdB+Vk0GzsLxpPGHO2pCaUeIUjzHdUSXGHMYGFytPF16hq4lWIRy5tkup2poodiOoTqG811xukQdHbjYD07d9zATlzE25N+5kkE9kIEIrz/fazfP6D4o6hzORJPG5fuCwuivv09RXPnVJs+k= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: g01taK9q/9PQu3OHa3sAPrVyVOk6LoJobueH4JuCRSwhxs/NrJ6jOXFA/NrhGWnZWRLBvTnVNiuA7atRj2k0DLQSlTS18HiRbeOFA6ByBQ5wl7wPilVRDRdFhOhxaRDC51qTuz1wtrbnsXjN/WNitryQ0nTUe24Bjhvpx6KsCH4ZnYxIrQroAcgZO5gc2CWMChmCOZJicx3TKOuTbTcbzd34RubjcXQvA6ArUzf4UAtmjGiTpfpZuzVIYSjptJgD3MkMMIsGdHHbCxMbeJZ3Pxh0/s8LvE3JcLC3on2YMNobGVqPouwYwXTWd534biIL1krQLLXLdn1HcsB0ti93VDqrP21SjsEoHnkd/9TwODaXDIZPrWKeHEoeNsTMxo68L54VG3xxarJUe+/YXa3CCMyGaLX550S/EWp+zgu9bSZJnnokgcxvNQfRNwK7WoCAIKduBhbJ/1aCl1XV9wevwHyakIP4bD0Rlf+wkxD+D5bnVzAkuJ1YPtm0j0vPn9nvVUxS1BpQbizTaOJAEyS54ti4b55dgs2VYnt8+uYNXSnb6U1QTSyB54QVWt8Zb+Wg X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dlY5QnRaSWRCb1EzdmRacDE5MmlXZ2crOWVDbUhzYlRaOGpxRzN1UG15S0tv?= =?utf-8?B?N1h3Qi9XbFJ1N0NVRi9rQkgvdzBQMCtrdndYaEFsYWY4VVE1czVzRW4vNXFG?= =?utf-8?B?OEhHbmtLbW55Rit0c3AzemRtUktVdzdJcUFNZkhKejNkaVlZQ0JKR0paWnd2?= =?utf-8?B?ZzFYS2YwZWg5aE9qQUtqUDJJbVRUNnUzd3pJbDNrNnRLUE9PaTlUVXRaN1pr?= =?utf-8?B?MlB4ZmtjdkduT2ZGTXhhYXcrUUpzZHBRejZCZnlid1NaOXV3TVRqVXJkSzJp?= =?utf-8?B?RWFWVzZMS1g4akQrTFpBM3ZjLy9SNFgrYi9OSmhvRmp1MVh0eHBLR203Y2Jr?= =?utf-8?B?bGQzLzFxSTcrS1duNXh2ZjdnY0RiU2p5V3k2OGo1bWxSdm1qdEhMZHE5cjRu?= =?utf-8?B?NlJaOUxtcEZxV2gwU1JIRWd2QVZqOXc2UGpSODZUNUFIUG1abi9pdW5uMVZU?= =?utf-8?B?UERmWXJMbHVibk5FYlVPMkFJMDI2MUhKQ2JQaWxMTisxSk85RXBXdlIyNzVx?= =?utf-8?B?ZVBnZjFGY2oyTDBSTnRRQXowQmhBRS9LcW1KSUlaQmRFbjYxWi9kMEVGSFFX?= =?utf-8?B?NmdiSmNWRVpJeHJCTGd3Vm1ta2Zub3FsQ0lZNnJNQVJqQXhSdHd2M2JvRXEz?= =?utf-8?B?akVQQ0JlZVM1a3MvOUVBRHBNY3MrOVZuWlU2MHBDMFhvRS9tMEFicVB0M21z?= =?utf-8?B?dkpDUG80V28vS1BpQzE3U0tuVlN4QVg5bTNOVnd0UnpvN052VkZKUXAzdjIv?= =?utf-8?B?QzRRcEpYcVFSSUMzVjQ3TE1iT1FCQVcrdXRQekE2dmhCd3FzOUNrRE5CM3di?= =?utf-8?B?TjNvMGx2dDRDMytNMSt2N3hrZUsvOVF3eS9sbGxNQWFab2FEcXpWK3JZUjh4?= =?utf-8?B?VnZMeWtSaDJzNVFhYU9Ma0dFREtheWdnNElMVS9TdDlhSHdjc2FuNTVYM2Nx?= =?utf-8?B?TnhjR1hyU1RXVkVMN1pxR1kyWFlvc0JjdTRIb0FyS0RDY1pXQ3hINkVJOU95?= =?utf-8?B?dDYrM0EweG5wVFpEYTVsMTFudGZ3dEswamF6RlRRUGJ6ZWdzMzByU0h0YXcv?= =?utf-8?B?QjBVTU1BUDRtaytUTmVFSmM0OVJudmtWMUNKN090RlJTKzFXYjF1aHlqZ1k3?= =?utf-8?B?clZmS1Vici94dVdxOEU1bStkZ0lxMGNSbHR6NWJLNlpIUzdEdm43Y0lOUEhV?= =?utf-8?B?bFdabjhRNWp1YmRwMzZoQSs0alE5c21Wc0xkcmpkeHBNZFdMdHpCVUZyait2?= =?utf-8?B?Y2UzVEhwOUdvNjh5R0VrRkN1SHkyY2lkdXZjQjJ3cy8wVkpFZEpNRTVSWkZI?= =?utf-8?B?TnM0RnAreWJxbVdzVWVZWVRvNHpYK2h0OEhOZ2kxYm9uU2ZqZnI3MkNWRFRo?= =?utf-8?B?bUNJeDZFY1hYSTNjS050U3Jncy9NSGZxcGo5UG4wRXkrWXZ5QWtUQUM2a1hW?= =?utf-8?B?Vk5LOEVoeHZMSkZ5MEZmMWJzc29sQi9hSW1FQnNCYXpSZmFGcUJyLzBEQ1Fz?= =?utf-8?B?QkJyVnNjbVVWQnlzOXVuTXg4eTJPdFdMMzFxRmp4aXhCVzhQdzUzeDhSWGhN?= =?utf-8?B?TEZJWkFFclRnd2VpV1VnVGdOblpNT2MrdmlwRk5QKytzYmhxWGRQNElqRDZy?= =?utf-8?B?Yjgrc2xiUVlZdVVmd1Y4aVo2NWo2bGd5ckoxc0M5czhRay9wUCtBMFpaNlhX?= =?utf-8?B?SnlUeWVibStKYnF0aG9iWjgxN2FaY1JMWElhY1BMMERWYXkrZXpXeHN3PT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b303705f-b778-4660-f01f-08dc4b636664 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Mar 2024 18:02:27.3127 (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: DU0P250MB0532 Subject: Re: [FFmpeg-devel] [PATCH 3/6] avcodec/dovi_rpu: strip container in separate step 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Niklas Haas: > From: Niklas Haas > > This ensures that `gb` in the following section is fully byte-aligned, > points at the start of the actual RPU, and ends on the CRC terminator. > > This is important for both calculation of the CRC, as well as dovi > extension block parsing (which aligns to byte boundaries in various > places). > --- > libavcodec/dovi_rpu.c | 48 +++++++++++++++++++++++++++++++++++-------- > libavcodec/dovi_rpu.h | 2 ++ > 2 files changed, 41 insertions(+), 9 deletions(-) > > diff --git a/libavcodec/dovi_rpu.c b/libavcodec/dovi_rpu.c > index c84a942f476..24a1cdf39a8 100644 > --- a/libavcodec/dovi_rpu.c > +++ b/libavcodec/dovi_rpu.c > @@ -23,6 +23,7 @@ > > #include "libavutil/buffer.h" > > +#include "avcodec.h" What is that used for? > #include "dovi_rpu.h" > #include "golomb.h" > #include "get_bits.h" > @@ -45,6 +46,7 @@ void ff_dovi_ctx_unref(DOVIContext *s) > { > for (int i = 0; i < FF_ARRAY_ELEMS(s->vdr); i++) > ff_refstruct_unref(&s->vdr[i]); > + av_free(s->rpu_buf); > > *s = (DOVIContext) { > .logctx = s->logctx, > @@ -202,17 +204,17 @@ int ff_dovi_rpu_parse(DOVIContext *s, const uint8_t *rpu, size_t rpu_size) > DOVIVdr *vdr; > int ret; > > - uint8_t nal_prefix; > uint8_t rpu_type; > uint8_t vdr_seq_info_present; > uint8_t vdr_dm_metadata_present; > uint8_t use_prev_vdr_rpu; > uint8_t use_nlq; > uint8_t profile; > - if ((ret = init_get_bits8(gb, rpu, rpu_size)) < 0) > - return ret; > > - /* Container header */ > + if (rpu_size < 5) > + goto fail; > + > + /* Container */ > if (s->dv_profile == 10 /* dav1.10 */) { > /* DV inside AV1 re-uses an EMDF container skeleton, but with fixed > * values - so we can effectively treat this as a magic byte sequence. > @@ -229,18 +231,46 @@ int ff_dovi_rpu_parse(DOVIContext *s, const uint8_t *rpu, size_t rpu_size) > * discard_unknown_payload : f(1) = 1 > */ > const unsigned header_magic = 0x01be6841u; > - unsigned header, emdf_payload_size; > - header = get_bits_long(gb, 27); > - VALIDATE(header, header_magic, header_magic); > + unsigned emdf_header, emdf_payload_size, emdf_protection; > + if ((ret = init_get_bits8(gb, rpu, rpu_size)) < 0) > + return ret; > + emdf_header = get_bits_long(gb, 27); > + VALIDATE(emdf_header, header_magic, header_magic); > emdf_payload_size = get_variable_bits(gb, 8); > VALIDATE(emdf_payload_size, 6, 512); > if (emdf_payload_size * 8 > get_bits_left(gb)) > return AVERROR_INVALIDDATA; > + > + /* The payload is not byte-aligned (off by *one* bit, curse Dolby), > + * so copy into a fresh buffer to preserve byte alignment of the > + * RPU struct */ > + av_fast_padded_malloc(&s->rpu_buf, &s->rpu_buf_sz, emdf_payload_size); > + if (!s->rpu_buf) > + return AVERROR(ENOMEM); > + for (int i = 0; i < emdf_payload_size; i++) > + s->rpu_buf[i] = get_bits(gb, 8); > + rpu = s->rpu_buf; > + rpu_size = emdf_payload_size; > + > + /* Validate EMDF footer */ > + emdf_protection = get_bits(gb, 5 + 12); > + VALIDATE(emdf_protection, 0x400, 0x400); > + > + if ((ret = init_get_bits8(gb, s->rpu_buf, emdf_payload_size)) < 0) > + return ret; > } else { > - nal_prefix = get_bits(gb, 8); > - VALIDATE(nal_prefix, 25, 25); > + /* NAL RBSP with prefix and trailing zeroes */ > + VALIDATE(rpu[0], 25, 25); /* NAL prefix */ > + rpu++; > + rpu_size--; > + /* Strip trailing padding bytes */ > + while (rpu_size && rpu[rpu_size - 1] == 0) > + rpu_size--; > } > > + if ((ret = init_get_bits8(gb, rpu, rpu_size)) < 0) > + return ret; > + > /* RPU header */ > rpu_type = get_bits(gb, 6); > if (rpu_type != 2) { > diff --git a/libavcodec/dovi_rpu.h b/libavcodec/dovi_rpu.h > index 51c5fdbb879..506974a74bf 100644 > --- a/libavcodec/dovi_rpu.h > +++ b/libavcodec/dovi_rpu.h > @@ -49,6 +49,8 @@ typedef struct DOVIContext { > */ > struct DOVIVdr *vdr[DOVI_MAX_DM_ID+1]; ///< RefStruct references > uint8_t dv_profile; > + uint8_t *rpu_buf; ///< temporary buffer > + unsigned rpu_buf_sz; The order here introduces unnecessary padding. > > } DOVIContext; > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".