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 5E4DD4AD69 for ; Tue, 21 May 2024 06:35:59 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9656868D2EF; Tue, 21 May 2024 09:35:56 +0300 (EEST) Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02olkn2014.outbound.protection.outlook.com [40.92.50.14]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 28F6368C21A for ; Tue, 21 May 2024 09:35:50 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=freiTSSyq54bckjdKE1TLcDHA4LTsw6OtEYB99j+PkbDdtuy6J7hkizjLQvySysH/AWjCjRWg8Ssnhzb982IIBYS7pOBAXnEHuqfbCnwT8BESc4AADdCjQ95IOhtXV2CsvmZDt9L9vZO0NkgNjt+aWL1dJBpzviJG0Wq3koMpyndoPUPrTjW3gMB436sDQCowk8+X+TqM9pQUwBVPWUdD/42ROOmzFV+IC82V0o18OyDem9vGxqmXj9wwUlO1ck5K1RiLGsF1du6hcqJq6Opg1a5pw3T4zSz5mmFTNNoD39AQXgic1LIKG9/JydB8w/lMAc7LzqupG1DNPSrqgcIHg== 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=9RmYnCz24WfOB9oPoibMxVU2mIKq7p1YDNeSjsZfY04=; b=Iu7osHOG1Sw9iaH6/fLsb3GpiYvtANzZAtJ4e/c3vVIYVujY4xAOgYZo0FgESa5wvrRrooqML7HnKpYNoP6VpI8SIXMjqud1X/UekzdkONlW9o5htmHMGin9FyIvVr72YQ454XqXbuuE7r+h/XyNRVpMyiPrME2Wi6SuluS9Vjhba3/kyQ8g2BIRXqmPMDhozBIludzj2cSGD9WZxd4P9bpSonFroo+qNKZrqbQFEPFcoAKkmRUsGyI1nQaOmg/PD6oT1tOKEyS9jblfNjdoU2ajN2q/ZR4E4A559hDbupbb/lhKdwI/6JpNPQbSZaQpe3l8CQfIaJz52P2Z3boZhw== 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=9RmYnCz24WfOB9oPoibMxVU2mIKq7p1YDNeSjsZfY04=; b=dFMaCVdC3poALG8JMwLhIwIXr1dtYl9ldme4dlZJ99c5toRZc7MTjHStZzuCtYwLbRI8MSJZTibPJJA7qJtMn6jFkYoGU3XpTlWapvHLH2DlNWwvAGSjlZlc+gR18RqoKMlcFIuCCIxWOWh0NzhYAKawiUyiWge5cPrGQ2jGg4U7LOxuTOYBDent9C4eKjlBTFSRNE0XiqdC0vx17RkWIG+Vp3exiddukh5Hr+lpUWCQ4M8/6GkKgUbsE/BQbKmSmMD+cXCbH4KI/66ca6Kqd7iGRZTXj3i3D1+iP62v8XM5I7N2h9J698S64paMj2OJM489GS2YR9CylEB45O2UKg== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by PR3P250MB0340.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:17f::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7587.35; Tue, 21 May 2024 06:35:48 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614%3]) with mapi id 15.20.7587.030; Tue, 21 May 2024 06:35:48 +0000 Message-ID: Date: Tue, 21 May 2024 08:35:45 +0200 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20240521053948.1516155-1-haihao.xiang@intel.com> <20240521053948.1516155-2-haihao.xiang@intel.com> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20240521053948.1516155-2-haihao.xiang@intel.com> X-TMN: [8GCEbn6p8uIfwdRIVqPeTE5A1ccYwFlcFRPRM8A/kEs=] X-ClientProxiedBy: ZR0P278CA0116.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:20::13) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|PR3P250MB0340:EE_ X-MS-Office365-Filtering-Correlation-Id: 4fc5add6-c7bb-4b11-ae5c-08dc79604010 X-Microsoft-Antispam: BCL:0;ARA:14566002|461199019|440099019|3412199016; X-Microsoft-Antispam-Message-Info: u+3+xnzREC6AtXlqc99ZakslZAk3rcQw+adC/PBDU0KZGV+xx8+jUmnT89E1gmXGDMaP9V68GvCRCTjqMSeZpXRCobRx93X0eL/ZEn6rPE6Kf6l2xTdxHwxWWA+/kNlLN3gfSFXpt8tsDHLLrBffYB/w7enxV2UfpQWZf90jKdvAozTMQ4NQE7KCNMA7hl615P5Mmu9VQcZQhjOfcGHrwF1kmLMSci3hol3RSYzvBBM3TAULkKdCkHNMppFLxztTw5Ng/VkTN9oACE7x5T80gzM7L3XDxFjMYAeJ03lMyyoePMHU+rQXJSXOHrOePAxc9DjLNNjtPl+luwE8bS0tdDPBo9J03ydRgyJzxJ3j52lWEQZ1bcyUKyUJGUXh58G/PN4gluxh0CQXa5lXT+Mtotm3cy8SJbZnQfsYm7zYYzWQh6TUHnqBpQrZbwMg3bbmUqkEy3yjKjHo1/KOCeh5RCikEFh9pGTwKhOAwx8So2KyEKSwjh4dQscEvBo7EjCvoXzjBqgw/OPzqeMqkPmIdX0j/as5bEziJnyvWT2ps1egTHUVzezBL0k8G3ogGuFt X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VlVpT2lJK3JUQWtvZENFMkxOQUVaVEVmUTJ6V3RNc3hrcnAwc1JPR0JjQ0ZN?= =?utf-8?B?QUtTMU1GQk5mM3Nudm9iaWpMRjhhT3E0ZXVrVFllT1QwTUU1NzlIeGJtejZz?= =?utf-8?B?Q2xrem9BVTY3UXJrMlFxakF1ekZKTWw1dDJKdkFkYjg3UE00UDZXU2dDSGgy?= =?utf-8?B?ZlVlRkdTdVFid2dkYWpZVEVjU1l6RHVPTUpJZ0lZZjVId0FMUEFZSkRSVDdo?= =?utf-8?B?ckNQYnozZzBsakJkT09BQm1hS3ZtRSsrVHdhbllGYndjN1ZFL2FERm1RRDFT?= =?utf-8?B?ei92NksrQ3ovNnIrdlJ3VE8yRXluODdnV01FYldUOHNQQ3BySVFCZm1pRGxq?= =?utf-8?B?UkoxQmhJdXVRTUZFN3h4MEVtNTFYOERiUDMvNkVvSURCb2kvd1UyL1o4aEhU?= =?utf-8?B?SEQ1bVBvVEdkV0Jkbnl6bTFobStKMVFDcS82NXd4ZTU0VDNTVk1OL1RSODZy?= =?utf-8?B?SWVJOUw0bGRFa0VmSWlYVXlYQ1ZJeGZaYkxIOU1CRXNrZlhxaXh5VTFvWUgw?= =?utf-8?B?YWxkR0tyMjhOV3F1MnNmWUhKZEEzVXRuV1ZaWGdORGVQdXRaM2RxcUl4eml0?= =?utf-8?B?U2VsMU8xRnRleXl6azZkbWhhcXlZT0Uwa25CaEsrNmk0SVQxSnF5Zkh2Y2Iz?= =?utf-8?B?bXAwSjRFQWRBb2VwblhublB5Ni9oaENUOXY4UGJQTUFzY0VxS1VzQlk5b3BG?= =?utf-8?B?bUdtaEdjNWl4eVRRdC9ZbzRBUUYvVHBpYlBlbXpIWWVNRUxLbExBbmNVUDJR?= =?utf-8?B?aFB0d3ZHY0wvTUZVbXZmc2c5TjFhcjVpL2p0dTdVV0ptS3BCRkJmUzFVeUJa?= =?utf-8?B?QTZwMEZ2RnNEb1oxdVRnS1dDSnZaR2JQQlcvQ0JnZTZoRXpuZWdRRlNaTmhT?= =?utf-8?B?RFNub2E3d3A2NnFqcjlhdjlLd3RRcVN5YVIyMDZlWTRHUFVjeDdXcDNETHVI?= =?utf-8?B?NGxvU1AyVVFGZjhGMzhFMjJCNDJ4NzQ2dHNPdStoaTFMMUNsU0V1VFkxRDdH?= =?utf-8?B?VWFLRVREa0FGTk53aDFnbGo4aGxpWHFhTTlyYTVyV0NOMml3d1VDWGs1anhB?= =?utf-8?B?aTlkVE5ESWtCYnVyek13Rkh4Ymhmd1RyQ1hieHU2Tk5jUzhIa0JGaFBIYTgv?= =?utf-8?B?ZlZQdVlvOUl3UXVJaDNqc1IxOWhMdmxyMExBemxQZXV3Ym55d0wzdS9FZEdU?= =?utf-8?B?NEhqQ2tEcEQ2eHVRWGw0cnk5MVlHUmU5cGhHaThXRG53OUtVb00yNDFPVEJW?= =?utf-8?B?WXA1N01lZi9VT21wRDM1cHcxeDNPdVdrTTZKVHNvNDZNVG5ieCtXeHA2NnRP?= =?utf-8?B?ZkZ4R0NFc2swVTUydTh6Tm1ST1JnZk51TWZLUWNMaWh2WkQyUklNUFJyV0wy?= =?utf-8?B?ZU0zWXZVZnRBQlBlL29DNGlmeitPc2I2QjNvRXlpSXoxZDBoUUlqQkVoaVll?= =?utf-8?B?R1dXNTE2SnpnY25nNTIrZFBoTGJ1WjJBamFvNkxhM3o1K3RHWGVNeGRTbXkv?= =?utf-8?B?QW1FM2Z1cmNoN0VBRGZpZHNDY1Q2WWo2T0N2VWlwdFV1TWxKdURFQ2hXamFR?= =?utf-8?B?VzAyOEZJcjJpcVNZN1BhUU13MWYyMGhUcVdTS3I2YVVlUlRuVm9tblp5cXhL?= =?utf-8?B?dzRVSXlrcEZ5SUkyYVpvTFdaOGNtNkJXWC9VVzhQd05vQ2piMVNMWE44dEtn?= =?utf-8?B?UWtTcXRtOUFyOVRFMXdkcTZHU1g5VnlGL0ZxckRzUXRmdlRxN0ZVL2h3PT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4fc5add6-c7bb-4b11-ae5c-08dc79604010 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 May 2024 06:35:48.1762 (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: PR3P250MB0340 Subject: Re: [FFmpeg-devel] [PATCH 2/2] lavc/qsvenc_av1: accept HDR metadata if have 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: Xiang, Haihao: > From: Haihao Xiang > > The sdk av1 encoder can accept HDR metadata via mfxEncodeCtrl::ExtParam. > > Signed-off-by: Haihao Xiang > --- > libavcodec/qsvenc_av1.c | 75 +++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 75 insertions(+) > > diff --git a/libavcodec/qsvenc_av1.c b/libavcodec/qsvenc_av1.c > index 33727bb07e..a7d35d7bef 100644 > --- a/libavcodec/qsvenc_av1.c > +++ b/libavcodec/qsvenc_av1.c > @@ -26,6 +26,8 @@ > > #include "libavutil/common.h" > #include "libavutil/opt.h" > +#include "libavutil/mem.h" > +#include "libavutil/mastering_display_metadata.h" Breaks alphabetical ordering > > #include "avcodec.h" > #include "codec_internal.h" > @@ -39,6 +41,77 @@ typedef struct QSVAV1EncContext { > QSVEncContext qsv; > } QSVAV1EncContext; > > +static int qsv_av1_set_encode_ctrl(AVCodecContext *avctx, > + const AVFrame *frame, mfxEncodeCtrl *enc_ctrl) > +{ > + QSVAV1EncContext *q = avctx->priv_data; > + AVFrameSideData *sd; > + > + if (!frame || !QSV_RUNTIME_VERSION_ATLEAST(q->qsv.ver, 2, 11)) > + return 0; > + > + sd = av_frame_get_side_data(frame, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); > + if (sd) { > + AVMasteringDisplayMetadata *mdm = (AVMasteringDisplayMetadata *)sd->data; > + > + if (mdm->has_primaries && mdm->has_luminance) { > + const int chroma_den = 1 << 16; > + const int max_luma_den = 1 << 8; > + const int min_luma_den = 1 << 14; > + int i; Should have loop-scope > + mfxExtMasteringDisplayColourVolume *mdcv = av_mallocz(sizeof(mfxExtMasteringDisplayColourVolume)); > + if (!mdcv) > + return AVERROR(ENOMEM); > + > + mdcv->Header.BufferId = MFX_EXTBUFF_MASTERING_DISPLAY_COLOUR_VOLUME; > + mdcv->Header.BufferSz = sizeof(*mdcv); > + > + for (i = 0; i < 3; i++) { > + mdcv->DisplayPrimariesX[i] = > + av_rescale(mdm->display_primaries[i][0].num, chroma_den, > + mdm->display_primaries[i][0].den); > + mdcv->DisplayPrimariesY[i] = > + av_rescale(mdm->display_primaries[i][1].num, chroma_den, > + mdm->display_primaries[i][1].den); > + } > + > + mdcv->WhitePointX = > + av_rescale(mdm->white_point[0].num, chroma_den, > + mdm->white_point[0].den); > + mdcv->WhitePointY = > + av_rescale(mdm->white_point[1].num, chroma_den, > + mdm->white_point[1].den); > + > + mdcv->MaxDisplayMasteringLuminance = > + av_rescale(mdm->max_luminance.num, max_luma_den, > + mdm->max_luminance.den); > + mdcv->MinDisplayMasteringLuminance = > + av_rescale(mdm->min_luminance.num, min_luma_den, > + mdm->min_luminance.den); > + > + enc_ctrl->ExtParam[enc_ctrl->NumExtParam++] = (mfxExtBuffer *)mdcv; > + } > + } > + > + sd = av_frame_get_side_data(frame, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); > + if (sd) { > + AVContentLightMetadata *clm = (AVContentLightMetadata *)sd->data; > + mfxExtContentLightLevelInfo * clli = av_mallocz(sizeof(mfxExtContentLightLevelInfo)); sizeof(*clli) But actually, both allocations seem to be unnecessary: This callback is only called when there is a QSVFrame and it already contains a mfxExtContentLightLevelInfo and mfxExtMasteringDisplayColourVolume (used by the decoder), so why not simply reuse that? The type of set_encode_ctrl_cb would need to be changed of course. (Btw: The relevant QSVFrame fields are under "#if QSV_VERSION_ATLEAST(1, 35)", yet this patch does not use any such #if. Why?) > + if (!clli) > + return AVERROR(ENOMEM); > + > + clli->Header.BufferId = MFX_EXTBUFF_CONTENT_LIGHT_LEVEL_INFO; > + clli->Header.BufferSz = sizeof(*clli); > + > + clli->MaxContentLightLevel = clm->MaxCLL; > + clli->MaxPicAverageLightLevel = clm->MaxFALL; > + > + enc_ctrl->ExtParam[enc_ctrl->NumExtParam++] = (mfxExtBuffer *)clli; > + } > + > + return 0; > +} > + > static av_cold int qsv_enc_init(AVCodecContext *avctx) > { > QSVAV1EncContext *q = avctx->priv_data; > @@ -61,6 +134,8 @@ static av_cold int qsv_enc_init(AVCodecContext *avctx) > return ret; > } > > + q->qsv.set_encode_ctrl_cb = qsv_av1_set_encode_ctrl; > + > return ff_qsv_enc_init(avctx, &q->qsv); > } > _______________________________________________ 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".