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: 49065 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:3a48:b0:1af:fc2d:ff5a with SMTP id zu8csp4553209pzb; Mon, 20 May 2024 08:44:01 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWYXCQ27I2cANSwjgRAH6FU01SZeHydV+cNO1FhQkuYAmUqJY3YdqxUWQzTMfNk+1U8tmFS2at9dRfx8CI+aVbbPD6ryM05VIFD+Q== X-Google-Smtp-Source: AGHT+IE69sJjiw4CpiUCpNH2EHQGqtrs/ApqZz6eSjVEBqYpTK07cW5obh18c+l46ZAuJRX7oWJD X-Received: by 2002:a50:870d:0:b0:572:6af5:1b61 with SMTP id 4fb4d7f45d1cf-5734d597d67mr27530734a12.6.1716219841217; Mon, 20 May 2024 08:44:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1716219841; cv=none; d=google.com; s=arc-20160816; b=PU9+vKdsSnh160Q1o9+7OfmzqLiE/KG9uTeLXgOCQcYbc3f2cv6pGLbmL7ByMtbxt2 FaTdTrFBl5+Kgq8HeCC0cUxCbmYICpuat3RWLzSxKhTYDQVserRmbQSFBM30QLsOMayD ihR+j7floln8vihlqMn5J4wTjW41fVyLnvSolGLdY807SqwBH3zZbzmMTCpMcX0YVi2v C8ZyifLHbvIejn5aCl2AMaLNte26S/Tpk2me5KwTEWsJuAj23VRGkZ34f7G4Ok1bSaNZ PawZSc6Ezxk5mZAI16Cp7Zn9VgDAAtSQBPq8ABfIQw8iUBdsF+pGZRhScElK5HgJ3c8g lYSQ== 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=Z2KmJpDGNVObUwBzNEjZajn2ykn63zQxfrGV2UdnKMBp8GAv2/PivSyrMhTXhPwZtk pDiD4IVt4ZDI0Ga4COxIMHZzb8uiDRb7FzWfPlESA83zsWsJkxqRa1f3ZtuxIpGk0i8h KABAx7WYvaCLjeGglM360aTLPH9f6bq9ai7xe4VgLbq+vw3wr5oQMKm8WsXPgKQ5YR5C EYkq9t44YCMz/dFE83MgEjreByqI2sb6a/ef7R6c+U99PxXiUogdFptOaos+I3iUN0fX XhYikEbdUkSX7XvDmW2XomlUnVooUrJfh7MujMN8gInzy7h7v91QLeFDq8/KmhEe9na6 PGqw==; 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=LcAKbQjT; 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 4fb4d7f45d1cf-5733c32d118si12696192a12.464.2024.05.20.08.44.00; Mon, 20 May 2024 08:44:01 -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=LcAKbQjT; 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 2D39968D180; Mon, 20 May 2024 18:43:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f169.google.com (mail-lj1-f169.google.com [209.85.208.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E001268CE20 for ; Mon, 20 May 2024 18:43:49 +0300 (EEST) Received: by mail-lj1-f169.google.com with SMTP id 38308e7fff4ca-2e1fa1f1d9bso52128251fa.0 for ; Mon, 20 May 2024 08:43:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1716219829; x=1716824629; darn=ffmpeg.org; h=subject:date:from:to:message-id:from:to:cc:subject:date:message-id :reply-to; bh=ttbkVFqlgD/RG0re9BkIJje5GiYiJJW11dmCi1IcAb0=; b=LcAKbQjT0zzLS6QHaQZ5mZdZjdBWak10MJVLXmywZ2UnkdUTr/teCN1i8GWlKvDa+2 y3UUeacVWwHlwoORmCk7Tn3t/c8WhBa3mhZlUpdWn6GIyZ62NtKNwo0mwn6tQA2ZRS8T C66tiJJfhk1bg8VUzLAMZTO1wdSiAqql2sBjStXXOVeK33yHhUH6+TDf5HwaWppX+oJ4 sQmo+/DOfAgFdLc3PHiP/Kt8jKIHIrZOB5SoQmGBSoE4PLe6Xp8/cRl2wdLJeIuRJegl MGTeh3oFUvg7/1yI+yfanxTUjl7nSQrtOLKa34G9NxZ6hPn5I5Pg/Eq1XQQzF1xMDvTb 2BuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716219829; x=1716824629; h=subject:date:from:to:message-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ttbkVFqlgD/RG0re9BkIJje5GiYiJJW11dmCi1IcAb0=; b=nN9CNyEbRMO51BqMcZGYx+vMKNADUw/BJQom6VZM7m/TvvkCh9lQO0EEWOF4ld3ADL CMjXLM6+Os3TH0mnqteB7Y+A7f9tf50xuYNBaOx88Kw8YsyP7EiJMJyH0RJMopPtJDPW FbQfN4LHf1oE5v5I423M+F+nOpoDEws8wfF7FBJFHpVp16yH72hoB1TTXyskytDOSGE3 fg7XBV9c4LusBQmhqCBYG78Mw/ed9x7ORr9naukcUMvRu9Vp1x9Sn++1Rpnq1IcgRffm XD6S40F+OS48lSrVPYQrMQNhlsdTUIsrC0+dYErcg3pa/sFdVQdeAY9UR4P3vZhzDKzZ 32cQ== X-Gm-Message-State: AOJu0YywK6eM961A0TPvZI/TTL/+6ivM3taDpurPvYIvQCSvKsM6OfLA jkXA0IsYkZ5IyrcfnoAyadDaqrzxq7La6hufDDuJUKr7yDhCO7UtOfGrTw== X-Received: by 2002:a2e:681a:0:b0:2e5:67a7:e449 with SMTP id 38308e7fff4ca-2e567a7e8b4mr221958681fa.6.1716219828852; Mon, 20 May 2024 08:43:48 -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-a5a179c7d2bsm1457444466b.120.2024.05.20.08.43.48 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 20 May 2024 08:43:48 -0700 (PDT) Message-Id: To: From: "Marvin Scholz" Date: Mon, 20 May 2024 03:12:01 +0200 Subject: [FFmpeg-devel] [PATCH v2] avutil/hwcontext_videotoolbox: 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: VJVRkh3hx9Pv 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; }