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 ACA4841202 for ; Tue, 4 Jan 2022 09:17:50 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C889968B290; Tue, 4 Jan 2022 11:17:47 +0200 (EET) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-oln040092069101.outbound.protection.outlook.com [40.92.69.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9777268B263 for ; Tue, 4 Jan 2022 11:17:41 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KTyAW5oTYgg6kr5s4+PlajhQ18n8L3g6QJVUL/s6fef6xy/t5UXwFEq8sUvNORB6lwf0tSBXp26J1COINScQMUv1lZ7Z4vsZR6XWzEXANND1u2Z/xA7FWC0NyO7p9s52hdSoARTcK4XHeOykUQRzNdWoTyT1t8uXZNRyWZg0i/Lka2Took5vOhXczU/ol9Aj0pcN2bx/TJ2vcHv1mafXGAYfWYcc3HV8ZzIuAMwLoPuKvvq+UfzbBCijzLA2JJMkXc8uEsKH6EIXussgs/HOZ6NllCdETVTmIb7qfXNTQr/gmu8++WidrOuFjK4OfSId/MDNniXjISpFPGs6BaOjjg== 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=N+xoaHDDnA2PDbJ/pMM5XF6/xeHZchQgFkPv+bX58eM=; b=oQdFjGpZIEbwWkIBWvTZM/Ocs6s7fJ0h2PczCqB2Fx+SdYW2z2XfWoiZmGYVH1E4WWfWOZkOrs4Ak6HPbARaC401VQ1H8zqPJiZGG+hVVKNxQXuznZP8fjlEjHt7feLZbM42RIaiGQv83Ah0g5CY/WDm3+yUO60GvP5420EApCKRlvAUExGTV33DEWpBeajH/njvZaM8YQEjZBn0drZ7GFWj2/RThtT4i9nFJaAbC6aMImAho5UrCjJyYdT6dfcVZCJmEY9fVMCD1nT/l1t0/SZJzTUxZrficFiTVa08cvEZ5sxksz3tlfdVNYFMCHAx2SyCPUi2HEVNC29QqqkSHQ== 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=N+xoaHDDnA2PDbJ/pMM5XF6/xeHZchQgFkPv+bX58eM=; b=j6BWe+DVJFHjtsID5+xqKzWgBIdDWl8T3SNmvCj+H8fPqj1lWQU4x8rFsEPJyGjzoulJC3nyRw6E3qYsHHC3FxeYd6aHMVeZGgDDAeuJ7fWPryUJKcDbU2oiWqjM7sScpcmrDoJmpI36qyK8XvN6ERDW4AFlEUXvFUvDOrVA8Kat87R2jxSFO4rr8iDKIhMNbB9Z+I32/wO9V8LDpnGiEOrKmRZD5LQM9z8XsbgyS3BarD0zUTmzRRlA5SqMFJ21j9lgRPejubR/mkJUXS5M+k8nRtynxRbcT6+vgolrW4brkPgRLsfM9gYwWUJYLbHuP368IJ+/W41clIulGIQjmQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB3605.eurprd03.prod.outlook.com (2603:10a6:209:2f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4844.15; Tue, 4 Jan 2022 09:17:40 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5%6]) with mapi id 15.20.4844.016; Tue, 4 Jan 2022 09:17:40 +0000 Message-ID: Date: Tue, 4 Jan 2022 10:17:39 +0100 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220103002727.38840-1-ffmpeg@haasn.xyz> <20220103002727.38840-6-ffmpeg@haasn.xyz> From: Andreas Rheinhardt In-Reply-To: <20220103002727.38840-6-ffmpeg@haasn.xyz> X-TMN: [FSwNtjLEKrjp/abexqezHWEmtx2cP4Wp] X-ClientProxiedBy: AM6P195CA0029.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:81::42) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <64468cfb-4a50-864e-e4b0-e4687aba49d1@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 781bd7fc-918a-4a1f-105c-08d9cf630e59 X-MS-TrafficTypeDiagnostic: AM6PR03MB3605:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: u66xhHyH7+PyEy6Fa++k7MIbJNI4Et1LpKo0BnIWSba+24tU0XIzAx3LFAPRyi8/Qr7ViwM5NBWeAsgLlbBMeJ6Xy1CVii7NbIgzzQxZNzspI2MR06ymhXWygQhf8YC8Vb06IL2vgAPTOJ3uUU+fTRcWAdqE33qvf7kXWzF89tPB63yXOpIEDaVY5lUwQIfdLWT0tN11bZjen8LUBx96HFtkILkHgzXskeOLJsWn5DlVOAa2wPROnir8ZWUQbrEuKS/tTTaoQ8RJqcAPw4Gh8v7oxS9X2fOdqhyyDD0ZBcyPqRzIoRG6NqZx6/SRr2DBRWnRBr/MVJW86afRCylHFGHANrvETzd5S96FLGZ71k5i24Q0z8DVXTDfdW/+5qtcGWC8Z0zVp4G0V0cZe+6V7zOaLkoNbnwdmp3u9RU4QPZACDfXTNZ7zUR7v2H4FMp0jGv/ZYTb9TrR6xK+am2cH4T4b71Jp02nC6MyCJJOFmJI+NoT6QM/kUft21OoUEmtumNXjfZiu+jVY60LZLtZbwQ94dcHtRD/XzZQg2bvrrkIoavZlaH2YMALIwvVV11LHVTCLfox2NRo2OHvRlmAFA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TFNVSnpGSkV1eVp5UHlwQWw0S3VQd2JvVGdNVVh3dTc2ajNHM2lkU2U1MjJL?= =?utf-8?B?eUJnL1U3L0ZIa1FJK09xZkdBWXEvMXU0OTRYREdFZ0VWVi9QQ1R5VitubEpC?= =?utf-8?B?OFVYMFdhNlZERTZENDNrdThKTDdPUDV3dUMyMEVWYUlpT3ArQXpNTVhzMFBl?= =?utf-8?B?aVVkTWhWS0NJWXEvN3gzR0VVdCtJa1MyK0FnMW0xTGJBTWRGSEU2RGNKYVJV?= =?utf-8?B?V3drWXJDUk1iR3BuYXZRMUwwaXlpYm5DeG41RE11OXpqTndhUTVFTXpud1V2?= =?utf-8?B?VExUdHc4akdNUVp1S0RFVTNucGR1dmFPU0dpV2xYa3FsTGR2WHRaTC9XT1Rn?= =?utf-8?B?dmxQeVoyd040ZWRrUUVtVWUxUmFsS09aQUpjUWpVZTRFYXlBWnRhSFhEOTBy?= =?utf-8?B?R3dQZkpRM2syN2FiZ3QrNitGSlBGdzNSOTd4SkFVVllIb1gwTUVGanhhNnZN?= =?utf-8?B?c01xNnNCdTBuQTYwOUt6azVCU3k5MXBobG9VUnZKL0wxd0dzNjRNQ1hNZ2FC?= =?utf-8?B?a2g0N3pONnpzSzA0NnFJUE9vYlgreHgvaVVzMnhHd3ZKWEJlV1B2alNXa2ZJ?= =?utf-8?B?eEpBUitaYzRtdlVWbmdZNTRwV2toNitHM0p6b1pMaU1YeUdzVGpDWlVzeHZ3?= =?utf-8?B?Sy9VeFhuL2wxTzJCS3k4YWNOZkxYNHVmN3BWYjJGd1lBL1ZvUXAyVUM0bmpo?= =?utf-8?B?bWEyRklqWW9STENCelI1SlRLLzhGNVBQM2h1WFcwYUQwcnI2VTdGdVhEUHd0?= =?utf-8?B?am5ad3JKMGJPT1BzQ3JuNmU4cFk2a0dUWE1zYmY0ZDhjc3lINTB5aG9JSjM5?= =?utf-8?B?YklDd29ObFJ6cHJCUG8wNDZZa1lRTTRRZGxzL0xQK2RiV2hvbTYyQ082M3lL?= =?utf-8?B?a1lXKzhrVUE5V0FmdVZmZHVWeTdNV3pzZkxnRFAwaG1yN0g4YTNkNVJLQm14?= =?utf-8?B?dU5ISmlPV0lqZXhxY2lnNDZsVEFTYjZsZXdNd2VMVGExOFgxRFhvSGp1Q1NU?= =?utf-8?B?SzVhNFNZQnNvSkl2WmphKzJDQk41MEY4QjBBOWZSNHorZmVTbDRWQndubHpR?= =?utf-8?B?cUEwaDhPUkdIN09VdGYzWEJ6R0hNUC9hTGN1cThYYlp6OWVhL0pCY2d4NzBV?= =?utf-8?B?L2dsY0xDMThqdzduTlg2QlF3WXh1VWJMQTVucXBKSUtHTXEwVXlCdFAyTEg1?= =?utf-8?B?U1YrVklmNUs3SXYvT1I0NVE4YmhsSDI3aWxQbGtXejRaVGhkZndPUktRTDVP?= =?utf-8?B?M3A1Q29oUEdxUGh0Zkc0eXF6eVZRK0RDM1QvSlJoOVUwMmN4Zz09?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 781bd7fc-918a-4a1f-105c-08d9cf630e59 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jan 2022 09:17:40.0784 (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: AM6PR03MB3605 Subject: Re: [FFmpeg-devel] [PATCH v10 6/6] lavc/hevcdec: Parse DOVI RPU NALs 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 > > And expose the parsed values as frame side data. Update FATE results to > match. > > It's worth documenting that this relies on the dovi configuration record > being present on the first AVPacket fed to the decoder, which in > practice is the case if if the API user has called something like > av_format_inject_global_side_data, which is unfortunately not the > default. > > This commit is not the time and place to change that behavior, though. > > Signed-off-by: Niklas Haas > --- > configure | 2 +- > libavcodec/hevcdec.c | 37 ++++-- > libavcodec/hevcdec.h | 2 + > tests/ref/fate/hevc-dv-rpu | 224 +++++++++++++++++++++++++++++++++++++ > 4 files changed, 256 insertions(+), 9 deletions(-) > > diff --git a/configure b/configure > index 8303e1329e..3f71af77db 100755 > --- a/configure > +++ b/configure > @@ -2826,7 +2826,7 @@ h264_decoder_suggest="error_resilience" > hap_decoder_select="snappy texturedsp" > hap_encoder_deps="libsnappy" > hap_encoder_select="texturedspenc" > -hevc_decoder_select="atsc_a53 bswapdsp cabac golomb hevcparse videodsp" > +hevc_decoder_select="atsc_a53 bswapdsp cabac dovi_rpu golomb hevcparse videodsp" > huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp" > huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llvidencdsp" > hymt_decoder_select="huffyuv_decoder" > diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c > index 3aa70e2245..8d7a4f7147 100644 > --- a/libavcodec/hevcdec.c > +++ b/libavcodec/hevcdec.c > @@ -2723,6 +2723,7 @@ error: > static int set_side_data(HEVCContext *s) > { > AVFrame *out = s->ref->frame; > + int ret; > > if (s->sei.frame_packing.present && > s->sei.frame_packing.arrangement_type >= 3 && > @@ -2977,6 +2978,9 @@ static int set_side_data(HEVCContext *s) > s->rpu_buf = NULL; > } > > + if ((ret = ff_dovi_attach_side_data(&s->dovi_ctx, out)) < 0) > + return ret; > + > return 0; > } > > @@ -3308,16 +3312,23 @@ static int decode_nal_units(HEVCContext *s, const uint8_t *buf, int length) > if (s->pkt.nb_nals > 1 && s->pkt.nals[s->pkt.nb_nals - 1].type == HEVC_NAL_UNSPEC62 && > s->pkt.nals[s->pkt.nb_nals - 1].size > 2 && !s->pkt.nals[s->pkt.nb_nals - 1].nuh_layer_id > && !s->pkt.nals[s->pkt.nb_nals - 1].temporal_id) { > + H2645NAL *nal = &s->pkt.nals[s->pkt.nb_nals - 1]; > if (s->rpu_buf) { > av_buffer_unref(&s->rpu_buf); > av_log(s->avctx, AV_LOG_WARNING, "Multiple Dolby Vision RPUs found in one AU. Skipping previous.\n"); > } > > - s->rpu_buf = av_buffer_alloc(s->pkt.nals[s->pkt.nb_nals - 1].raw_size - 2); > + s->rpu_buf = av_buffer_alloc(nal->raw_size - 2); > if (!s->rpu_buf) > return AVERROR(ENOMEM); > + memcpy(s->rpu_buf->data, nal->raw_data + 2, nal->raw_size - 2); > > - memcpy(s->rpu_buf->data, s->pkt.nals[s->pkt.nb_nals - 1].raw_data + 2, s->pkt.nals[s->pkt.nb_nals - 1].raw_size - 2); > + ret = ff_dovi_rpu_parse(&s->dovi_ctx, nal->data + 2, nal->size - 2); > + if (ret < 0) { > + av_buffer_unref(&s->rpu_buf); > + av_log(s->avctx, AV_LOG_WARNING, "Error parsing DOVI NAL unit.\n"); > + /* ignore */ > + } > } > > /* decode the NAL units */ > @@ -3450,8 +3461,8 @@ static int hevc_decode_frame(AVCodecContext *avctx, void *data, int *got_output, > AVPacket *avpkt) > { > int ret; > - size_t new_extradata_size; > - uint8_t *new_extradata; > + uint8_t *sd; > + size_t sd_size; > HEVCContext *s = avctx->priv_data; > > if (!avpkt->size) { > @@ -3463,14 +3474,17 @@ static int hevc_decode_frame(AVCodecContext *avctx, void *data, int *got_output, > return 0; > } > > - new_extradata = av_packet_get_side_data(avpkt, AV_PKT_DATA_NEW_EXTRADATA, > - &new_extradata_size); > - if (new_extradata && new_extradata_size > 0) { > - ret = hevc_decode_extradata(s, new_extradata, new_extradata_size, 0); > + sd = av_packet_get_side_data(avpkt, AV_PKT_DATA_NEW_EXTRADATA, &sd_size); > + if (sd && sd_size > 0) { > + ret = hevc_decode_extradata(s, sd, sd_size, 0); > if (ret < 0) > return ret; > } > > + sd = av_packet_get_side_data(avpkt, AV_PKT_DATA_DOVI_CONF, &sd_size); > + if (sd && sd_size > 0) > + ff_dovi_update_cfg(&s->dovi_ctx, (AVDOVIDecoderConfigurationRecord *) sd); Looks good (and so much simpler than the earlier version). > + > s->ref = NULL; > ret = decode_nal_units(s, avpkt->data, avpkt->size); > if (ret < 0) > @@ -3563,6 +3577,7 @@ static av_cold int hevc_decode_free(AVCodecContext *avctx) > > pic_arrays_free(s); > > + ff_dovi_ctx_unref(&s->dovi_ctx); > av_buffer_unref(&s->rpu_buf); > > av_freep(&s->md5_ctx); > @@ -3647,6 +3662,7 @@ static av_cold int hevc_init_context(AVCodecContext *avctx) > > ff_bswapdsp_init(&s->bdsp); > > + s->dovi_ctx.logctx = avctx; > s->context_initialized = 1; > s->eos = 0; > > @@ -3755,6 +3771,10 @@ static int hevc_update_thread_context(AVCodecContext *dst, > if (ret < 0) > return ret; > > + ret = ff_dovi_ctx_replace(&s->dovi_ctx, &s0->dovi_ctx); > + if (ret < 0) > + return ret; > + > s->sei.frame_packing = s0->sei.frame_packing; > s->sei.display_orientation = s0->sei.display_orientation; > s->sei.mastering_display = s0->sei.mastering_display; > @@ -3811,6 +3831,7 @@ static void hevc_decode_flush(AVCodecContext *avctx) > HEVCContext *s = avctx->priv_data; > ff_hevc_flush_dpb(s); > ff_hevc_reset_sei(&s->sei); > + ff_dovi_ctx_flush(&s->dovi_ctx); > av_buffer_unref(&s->rpu_buf); > s->max_ra = INT_MAX; > s->eos = 1; > diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h > index 870ff178d4..157bc6926f 100644 > --- a/libavcodec/hevcdec.h > +++ b/libavcodec/hevcdec.h > @@ -32,6 +32,7 @@ > #include "avcodec.h" > #include "bswapdsp.h" > #include "cabac.h" > +#include "dovi_rpu.h" > #include "get_bits.h" > #include "hevcpred.h" > #include "h2645_parse.h" > @@ -574,6 +575,7 @@ typedef struct HEVCContext { > int nuh_layer_id; > > AVBufferRef *rpu_buf; ///< 0 or 1 Dolby Vision RPUs. > + DOVIContext dovi_ctx; ///< Dolby Vision decoding context > } HEVCContext; > > /** _______________________________________________ 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".