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: 49047 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:3a48:b0:1af:fc2d:ff5a with SMTP id zu8csp4148786pzb; Sun, 19 May 2024 18:12:30 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXEGDLMJ4TBMl/YPuQw3sX2xNEonZvO9u0rlSWY5SSIfQxV6DFs+TYv2Pvd1hlHhv6AACJZOrwhhfu+fK05jK4CfC7/tAYRx1ze7Q== X-Google-Smtp-Source: AGHT+IGp/SkDtpW9PLgFADvh5qPFWooPq1pd5Vodp9V74VpGgGm7gTrLcNgwCdWNxuyxkJ/m0ZyN X-Received: by 2002:a17:906:f58b:b0:a61:39b6:ae53 with SMTP id a640c23a62f3a-a6139b6aee6mr103948766b.48.1716167549731; Sun, 19 May 2024 18:12:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1716167549; cv=none; d=google.com; s=arc-20160816; b=WqlmjGFJDd+9JCxtl2mup0Jd5SnXmBkPyIuadSnWMGGkZKnJ2imp/CC3iNwlUVxrmv SUOS+8Vpp3KaEdZih73TmhcakuuUMxVhzbStuYSP5YhLhpQNAmJ0/GpCgmdD5Saxqnw5 M9ZZhJHpQYr7eWQAo6jWQt4ChLm42rxi/fwwuUsMIAUbynaFpurb2ILmAM8eNg6BuxKJ gmQQQpyaWOxS9nLh6qCOz8EHyOyljMEhbmz0Ms7xIUoLBZoe1s2SnoIa3/ji2hmVTeZz lnRiyLZYZDiZqBB6mTw66Df2+/D7uHo162A39iK98ZpsPe4OQQx6oG+zR+otjngnme6E 3v7Q== 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=2EQu/u/9KYjypSFUrkoeZXvbOXfd6IQtZQaM5AQPMbY=; fh=5IeVwzS1vbVKjIV8MP3mnmnRtZGb8uteQ9r4QD2keV0=; b=eWkwTeD0Smg6y4dr4nlUwGzR2fdioetgN3PxTGBEpQ8dXPadoleGneURFRztJuQeYJ yz2yyVwZgRwV8QWg9h5tCnkj4wt0ccsJdSP8q1f43yw8XTtPAl+p21dtoAtASW5SfYYw 2PXXvHkMp+jOOhczxlX+R4ob7rXb4yTx4f5CVklHwLnLgRgFbiRyo5fx+gQsqHFqD+su 8gAf7M3vbNk2WibnfATvGI87iwd+ZxuOWgFwYIeD3qYaMd20CfODK0B/9x/vENtvjtRA axkHX1whcjo/1si3pWhiaXBmEByz5wa6Hx3C8spz9i7qRqeqmhWk/DChxK+hvFgtQFH8 ISeA==; 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=JotRPbiW; 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 a640c23a62f3a-a612c44b516si74550966b.151.2024.05.19.18.12.28; Sun, 19 May 2024 18:12:29 -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=JotRPbiW; 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 B1DCF68D02A; Mon, 20 May 2024 04:12:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3019068C73D for ; Mon, 20 May 2024 04:12:20 +0300 (EEST) Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-572e48f91e9so7512273a12.0 for ; Sun, 19 May 2024 18:12:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1716167539; x=1716772339; darn=ffmpeg.org; h=subject:date:from:to:message-id:from:to:cc:subject:date:message-id :reply-to; bh=ttbkVFqlgD/RG0re9BkIJje5GiYiJJW11dmCi1IcAb0=; b=JotRPbiWxUSF40yIqpKVMpzg+h85mSN9LRs/H1lRqr/aOazL6GqXqnpvBjD6nEd1PM +gQpSKeohmpc8JnHbhANuRVa+kL5sctLEvw7EP8lhiy+wuhzK6FBMkx13Bux1BNOqi2+ IkVkiFcRVBkgv5yLvCkAT3XS9dl5jLipwrbE5IoenKgqRuBX9ZbTjW0Ed+ce/macqe6I p2SLVsg851pJ3uKj+5SxURFdBCBTDR8VeKPIbnpM9kb1cRHGhiCtQOdKewjmIQQbRW5y rqmzAgv/xV7SFKstjIO4hCSxUlumhj4zWL4YylAuNV0HWC+iEEjU8eNO8YHs/mH87eDG MKhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716167539; x=1716772339; h=subject:date:from:to:message-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ttbkVFqlgD/RG0re9BkIJje5GiYiJJW11dmCi1IcAb0=; b=RqvwV+m62drI6rYMGjJjgGlGy8cz2Jf2Fw5t/55XCBmcKPwCZoe+CSeHTk2BYS7uUp XrofKdie6HEWKzfhUUod6gx4GhCsq3Qlqq3IHVbGhhFdloD1GCIwmsqyYhkX2NhPZ5Zx S6LYBdxpm6wdEMzy8n14HxKzS662HkRGeATN8k4o73EVJ7doW9csrVFZdlL4rqfpdTzo 38fw05TOst3wELV12Rrcf12glUPQqEWIGU6DlpKZtPw6MGfg3Z6r+N40XyKZtGwhniWT YKuDMt3dwM2srGJvQ0n3MSqjJWbIQiTde984n1a4TeUfEGsf5ylJmAEK/Rsfh72hZp74 is/Q== X-Gm-Message-State: AOJu0YzreQXvEMFIOIeBbilWclNvAK08pjl1jrWebmKE7ZI71feoLeZe ZPiAjCOP+esYytnZdm1JhkcJslWjNmLps2/H5GtYFblWpe99m/IS+1gePA== X-Received: by 2002:a17:907:7fa4:b0:a59:9fc8:38c2 with SMTP id a640c23a62f3a-a5a2d58550dmr2131481666b.31.1716167538839; Sun, 19 May 2024 18:12:18 -0700 (PDT) Received: from localhost (dynamic-2a01-0c23-6407-8e00-d884-7274-911c-dd1d.c23.pool.telefonica.de. [2a01:c23:6407:8e00:d884:7274:911c:dd1d]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a5cdd7f8ea1sm556979566b.109.2024.05.19.18.12.17 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 19 May 2024 18:12:18 -0700 (PDT) Message-Id: To: From: "Marvin Scholz" Date: Mon, 20 May 2024 03:12:01 +0200 Subject: [FFmpeg-devel] [PATCH] avutil/hwcontext: Set proper CVBuffer colorspace 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: P8Y10wR1WxwX Fix #10884 --- libavutil/hwcontext_videotoolbox.c | 54 +++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 16 deletions(-) base-commit: 463c573e6b6489c588bee90124d5cf92db8ccaaa diff --git a/libavutil/hwcontext_videotoolbox.c b/libavutil/hwcontext_videotoolbox.c index 9f82b104c3..4a35bfc7ff 100644 --- a/libavutil/hwcontext_videotoolbox.c +++ b/libavutil/hwcontext_videotoolbox.c @@ -530,6 +530,8 @@ CFStringRef av_map_videotoolbox_color_trc_from_av(enum AVColorTransferCharacteri static int vt_pixbuf_set_colorspace(void *log_ctx, CVPixelBufferRef pixbuf, const AVFrame *src) { + CGColorSpaceRef colorspace = NULL; + CFMutableDictionaryRef attachments = NULL; CFStringRef colormatrix = NULL, colorpri = NULL, colortrc = NULL; Float32 gamma = 0; @@ -550,37 +552,57 @@ static int vt_pixbuf_set_colorspace(void *log_ctx, else if (src->color_trc == AVCOL_TRC_GAMMA28) gamma = 2.8; + attachments = CFDictionaryCreateMutable(NULL, 0, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + if (!attachments) + return AVERROR(ENOMEM); + if (colormatrix) { - CVBufferSetAttachment( - pixbuf, + CFDictionarySetValue( + attachments, kCVImageBufferYCbCrMatrixKey, - colormatrix, - kCVAttachmentMode_ShouldPropagate); + colormatrix); } if (colorpri) { - CVBufferSetAttachment( - pixbuf, + CFDictionarySetValue( + attachments, kCVImageBufferColorPrimariesKey, - colorpri, - kCVAttachmentMode_ShouldPropagate); + colorpri); } if (colortrc) { - CVBufferSetAttachment( - pixbuf, + CFDictionarySetValue( + attachments, kCVImageBufferTransferFunctionKey, - colortrc, - kCVAttachmentMode_ShouldPropagate); + colortrc); } if (gamma != 0) { CFNumberRef gamma_level = CFNumberCreate(NULL, kCFNumberFloat32Type, &gamma); - CVBufferSetAttachment( - pixbuf, + CFDictionarySetValue( + attachments, kCVImageBufferGammaLevelKey, - gamma_level, - kCVAttachmentMode_ShouldPropagate); + gamma_level); CFRelease(gamma_level); } + if (__builtin_available(macOS 10.8, iOS 10, *)) + colorspace = CVImageBufferCreateColorSpaceFromAttachments(attachments); + + if (colorspace) { + CFDictionarySetValue( + attachments, + kCVImageBufferCGColorSpaceKey, + colorspace); + CFRelease(colorspace); + } else + av_log(log_ctx, AV_LOG_WARNING, "Unable to set proper colorspace for the CVImageBuffer.\n"); + + CVBufferSetAttachments( + pixbuf, + attachments, + kCVAttachmentMode_ShouldPropagate); + CFRelease(attachments); + return 0; }