From patchwork Mon May 20 01:12:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marvin Scholz X-Patchwork-Id: 49378 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:5c1:0:b0:460:55fa:d5ed with SMTP id 184csp6618vqf; Wed, 29 May 2024 18:21:23 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCV+wEJRjBdVsncyi1KN572L40UtzOBYxmDBQ1DMm68VOsGTJyM2WHE94l9bjV7JEjwHgv8LqY4ZDX9Xv+uaoFXM/9XjxhwbP8JeNQ== X-Google-Smtp-Source: AGHT+IGV06kcsE+/uXqTAtQ+1scKMWmMyI8y2Nb3KiDadTqzfPJ72tiQikC8IG0GeKWw6W3FCEry X-Received: by 2002:a05:6512:3453:b0:528:16d7:b6c7 with SMTP id 2adb3069b0e04-52b7d4905famr589394e87.58.1717032082865; Wed, 29 May 2024 18:21:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1717032082; cv=none; d=google.com; s=arc-20160816; b=x+wFZTZHKWT3Nt6xiNSX7AJ5V0GUl2hzAMDlpYukEs65qAEfKJHiBFqtZQEnp9xk1b yYscnHEclHfIk1EVsIvFsdqEIoRR/WzzZLIG88l2XXZBtlIGbc7Ccz2jzT++v7UmZUUT TnkTdX3KRD/Vr1GvH/OgI+B2HGxZtGowBqyQ7sN842FbH4nI4Ve0zwh24bPaqLODCKSB 5o9c1ERm4gooBViZ2Rl3+e+DzU8UqVz3j6uazGRohfZOoaezGyrTVyQKCk6dyTqpTdmq aMgXuqclFjjZU2NWHXAZfWuCiNlkAwYjZoMpWEABJX3TaI7u9lDzliXwgvr9Nxe7YQc6 aq3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:date:from:to:message-id:dkim-signature :delivered-to; bh=/WK761eroo+AWntSPFeR1oLIuHJcCUrwrjDSmYUMgXo=; fh=5IeVwzS1vbVKjIV8MP3mnmnRtZGb8uteQ9r4QD2keV0=; b=N5XpDEyKNn8KJKmOLx0Axm5ZErMG0WqR1N/3JhzZAkvZBJ/8e7y7NO+TDXHnU6qkIJ 4CnmY04P9RsLPiOGvAWxSM3fydoLbqwqOxoVVBuB7LpjSEF5xZLQwib1T2NhBLjLwNgH eW9BPm8VxrZGi6MgR5DGRULybQukDwtRIgNn2+UmdTJMtdN0RZjpTaA6E2N5Pj9+Bk8u F7yLWFhw5wHzXN8ZZlEr61hoUXm/P5imJkVwqkZZS6SxtOIW6XCK+gh/smzKrv6JB7/r PqF9QO36e0ilX3VgfHv4dUXWiZvuf2xfFPBttX+LKXMI7YEq86/e0aR9MaHChi0eWrvL 1edA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=FoKaql97; 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 2adb3069b0e04-529a52e638esi3349522e87.513.2024.05.29.18.21.22; Wed, 29 May 2024 18:21:22 -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=20230601 header.b=FoKaql97; 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 B885668D4BA; Thu, 30 May 2024 04:21:18 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org 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-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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: l7WMS8ra02rN 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(-) base-commit: fa3b153cb1eba0d68327c716842c9a38f95c1667 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; }