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 F2D424B156 for ; Thu, 30 May 2024 01:21:20 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7080E68D494; Thu, 30 May 2024 04:21:18 +0300 (EEST) Received: from mail-lj1-f172.google.com (mail-lj1-f172.google.com [209.85.208.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D55B368D0AD for ; Thu, 30 May 2024 04:21:11 +0300 (EEST) Received: by mail-lj1-f172.google.com with SMTP id 38308e7fff4ca-2ea84766ad7so3259951fa.1 for ; Wed, 29 May 2024 18:21:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1717032071; x=1717636871; darn=ffmpeg.org; h=subject:date:from:to:message-id:from:to:cc:subject:date:message-id :reply-to; bh=EmhOjAr9Q3BzY/VT/YcPPL/1CMotpu1kXelC1Kh7mOc=; b=FoKaql97XR0kTMIHFTteQOX+rb3fzMsH4TFRV7Xb0FJmyNOOKsM++slNVzdiwxbemj 2Nlx53e0tmgSTdafdptWWygu5BIbv3t6+Cqh9cmjKqpBO+sFJeN+mT1VM/fStqkJspjB sJ2oyIzIVXYkrzn1qUqlKOsw9WP0j2mEzSkWygBBmx1LPa41clK5rGjSD3t9/KMDJZVx InXSB0dwWHFufdz+HRF60J2DddCdBfjZiYuNXHUEB2iAbEWQmB9MkT5TPR5PC6ZJP5UD xYaR4MQiiCd/dzrLaIMOjtt8JX1FHT6O66ejT5gkmZ9loyEC/a3gsEmNihp2hODraro4 jouw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717032071; x=1717636871; h=subject:date:from:to:message-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=EmhOjAr9Q3BzY/VT/YcPPL/1CMotpu1kXelC1Kh7mOc=; b=HXaK9Xe+mPVFWnohK7xdtrAvQ4y/Tq/q6bF6XpFGirQwIhA9hHqf0cn7/igHHLnIjz Zv9mddykzlnnwQ892gR0j2zf//FhTTHUoQ7ycfNdJrCH82P38clz4kIgCX3E4MvKnp9p B47GW7JMgeEpd9oZFWsBg0YGwG6a4v31l95XTXd9m76RnoqFUNpm3uUIVpBWykK8/VFu x0qBH5auVj6hVFZeovNx7xSZSM75WgEePg3IRHZuuwwIP6jvpCU0zxb9LoAFA4riS5xd 4sU1aTuAeBVWR/dzvJsWcAGnechF41eaiyDXE2Ck//IA+HbAPWFDsJHdhWktIXjLV8jE KhaQ== X-Gm-Message-State: AOJu0Ywu2Galeg8zBVekWnt7FNK8jjQWSvyeIohhEllMXuzV2i9NCH12 gf699qLR7r2eLGlh5PGX/pqfsOcwrhWKbZTAVRb8i724Jqvp4x1efE6JZA== X-Google-Smtp-Source: AGHT+IGaxvLlCvX9rKTqnclsOJ12rIayg3S90cSXxF/vaFsq67+8kSg9/fqqFCZBKwjmMd4l96+WEw== X-Received: by 2002:a2e:bb83:0:b0:2ea:8440:c3f0 with SMTP id 38308e7fff4ca-2ea8485478dmr4640621fa.36.1717032070793; Wed, 29 May 2024 18:21:10 -0700 (PDT) Received: from localhost (p200300cccf0f49001441a6a3c951ef29.dip0.t-ipconnect.de. [2003:cc:cf0f:4900:1441:a6a3:c951:ef29]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-578523cba01sm9160400a12.35.2024.05.29.18.21.09 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 29 May 2024 18:21:09 -0700 (PDT) Message-Id: To: From: "Marvin Scholz" Date: Mon, 20 May 2024 03:12:01 +0200 Subject: [FFmpeg-devel] [PATCH v3 1/3] avutil/hwcontext_videotoolbox: Unset undefined 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 MIME-Version: 1.0 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: When mapping AVFrame properties to the CVBuffer attachments, it is necessary to properly delete undefined attachments, else we can leave incorrect values in there guessed from VideoToolbox for example, leading to inconsistent results where the AVFrame and CVBuffer differ in metadata. Ref #10884 --- libavutil/hwcontext_videotoolbox.c | 76 ++++++++++++++++-------------- 1 file changed, 41 insertions(+), 35 deletions(-) diff --git a/libavutil/hwcontext_videotoolbox.c b/libavutil/hwcontext_videotoolbox.c index 9f82b104c3..0af2ab822f 100644 --- a/libavutil/hwcontext_videotoolbox.c +++ b/libavutil/hwcontext_videotoolbox.c @@ -342,8 +342,10 @@ static int vt_pixbuf_set_par(void *log_ctx, CFNumberRef num = NULL, den = NULL; AVRational avpar = src->sample_aspect_ratio; - if (avpar.num == 0) + if (avpar.num == 0) { + CVBufferRemoveAttachment(pixbuf, kCVImageBufferPixelAspectRatioKey); return 0; + } av_reduce(&avpar.num, &avpar.den, avpar.num, avpar.den, @@ -423,7 +425,10 @@ static int vt_pixbuf_set_chromaloc(void *log_ctx, kCVImageBufferChromaLocationTopFieldKey, loc, kCVAttachmentMode_ShouldPropagate); - } + } else + CVBufferRemoveAttachment( + pixbuf, + kCVImageBufferChromaLocationTopFieldKey); return 0; } @@ -534,52 +539,53 @@ static int vt_pixbuf_set_colorspace(void *log_ctx, Float32 gamma = 0; colormatrix = av_map_videotoolbox_color_matrix_from_av(src->colorspace); - if (!colormatrix && src->colorspace != AVCOL_SPC_UNSPECIFIED) - av_log(log_ctx, AV_LOG_WARNING, "Color space %s is not supported.\n", av_color_space_name(src->colorspace)); + if (colormatrix) + CVBufferSetAttachment(pixbuf, kCVImageBufferYCbCrMatrixKey, + colormatrix, kCVAttachmentMode_ShouldPropagate); + else { + CVBufferRemoveAttachment(pixbuf, kCVImageBufferYCbCrMatrixKey); + if (src->colorspace != AVCOL_SPC_UNSPECIFIED) + av_log(log_ctx, AV_LOG_WARNING, + "Color space %s is not supported.\n", + av_color_space_name(src->colorspace)); + } colorpri = av_map_videotoolbox_color_primaries_from_av(src->color_primaries); - if (!colorpri && src->color_primaries != AVCOL_PRI_UNSPECIFIED) - av_log(log_ctx, AV_LOG_WARNING, "Color primaries %s is not supported.\n", av_color_primaries_name(src->color_primaries)); + if (colorpri) + CVBufferSetAttachment(pixbuf, kCVImageBufferColorPrimariesKey, + colorpri, kCVAttachmentMode_ShouldPropagate); + else { + CVBufferRemoveAttachment(pixbuf, kCVImageBufferColorPrimariesKey); + if (src->color_primaries != AVCOL_SPC_UNSPECIFIED) + av_log(log_ctx, AV_LOG_WARNING, + "Color primaries %s is not supported.\n", + av_color_primaries_name(src->color_primaries)); + } colortrc = av_map_videotoolbox_color_trc_from_av(src->color_trc); - if (!colortrc && src->color_trc != AVCOL_TRC_UNSPECIFIED) - av_log(log_ctx, AV_LOG_WARNING, "Color transfer function %s is not supported.\n", av_color_transfer_name(src->color_trc)); + if (colortrc) + CVBufferSetAttachment(pixbuf, kCVImageBufferTransferFunctionKey, + colorpri, kCVAttachmentMode_ShouldPropagate); + else { + CVBufferRemoveAttachment(pixbuf, kCVImageBufferTransferFunctionKey); + if (src->color_trc != AVCOL_TRC_UNSPECIFIED) + av_log(log_ctx, AV_LOG_WARNING, + "Color transfer function %s is not supported.\n", + av_color_transfer_name(src->color_trc)); + } if (src->color_trc == AVCOL_TRC_GAMMA22) gamma = 2.2; else if (src->color_trc == AVCOL_TRC_GAMMA28) gamma = 2.8; - if (colormatrix) { - CVBufferSetAttachment( - pixbuf, - kCVImageBufferYCbCrMatrixKey, - colormatrix, - kCVAttachmentMode_ShouldPropagate); - } - if (colorpri) { - CVBufferSetAttachment( - pixbuf, - kCVImageBufferColorPrimariesKey, - colorpri, - kCVAttachmentMode_ShouldPropagate); - } - if (colortrc) { - CVBufferSetAttachment( - pixbuf, - kCVImageBufferTransferFunctionKey, - colortrc, - kCVAttachmentMode_ShouldPropagate); - } if (gamma != 0) { CFNumberRef gamma_level = CFNumberCreate(NULL, kCFNumberFloat32Type, &gamma); - CVBufferSetAttachment( - pixbuf, - kCVImageBufferGammaLevelKey, - gamma_level, - kCVAttachmentMode_ShouldPropagate); + CVBufferSetAttachment(pixbuf, kCVImageBufferGammaLevelKey, + gamma_level, kCVAttachmentMode_ShouldPropagate); CFRelease(gamma_level); - } + } else + CVBufferRemoveAttachment(pixbuf, kCVImageBufferGammaLevelKey); return 0; } base-commit: fa3b153cb1eba0d68327c716842c9a38f95c1667 -- 2.39.3 (Apple Git-146) _______________________________________________ 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".