From patchwork Sat Dec 18 11:09:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 32703 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2464401iog; Sat, 18 Dec 2021 03:10:23 -0800 (PST) X-Google-Smtp-Source: ABdhPJyKhwv1XFJOeWJJvgLB6kRH/F8QtBhFABlonidBeM+0nlpIPu3vpZBJqjnDQQPfSUuYLv1X X-Received: by 2002:a17:906:6a14:: with SMTP id qw20mr5737311ejc.763.1639825823704; Sat, 18 Dec 2021 03:10:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1639825823; cv=none; d=google.com; s=arc-20160816; b=hAHK2p0WLRHMwUWIA+QnTeLOTeQ0CzoP92y4JhmxlfWO07DxCxmXMdJJCnSx3hzx94 9rUM47JRqmQp/R3GyhGUYloX3U29tRnmFEw/y9SszFbISDuksEFDIifUnYwHDU8LGEvB VeA228SJu2uaV4OiF3BXN+3lmzUmB7obR1qcmVre/fhT1N5HcWPBeE2NGFgcWiwsuyYp xB/k0sPEVFlEcQ1JVYdiEuybdKJZ35tq73aeYRZSH7XpwOAr7fS90NvqLIZRN6/+V9Hx cq8QubGf283Z9dOYo041HvebgVPW75euIw+opGKQ4T8cix7p+9larYyD/3SP8HpowqWB RtBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=bgmaZ1XJt9f9Y+BOrIW5VBLBYFrPUV6V5ctAAWrNyCc=; b=tmJ5OUDhCIi11BX6NDrPsZvk7bdojYVH0N+OsAY7p71Rb1pS+9xKdJUZJIr8aYvA8p lLDQZs4Uia1TCmugZdZ1b4EklMBWhW7XnifSyviHCat/gHbkiP7NBsy8HN83Soje7fXQ EG5asPbDEMuWwlXRXH6BwWQKbdfBBGRBHnxpmNnQDJwXCnVy1hO39x0wVXUePCR23rP3 eAGk8QLS8YbkIhX47afFuT3HdRgHDwfnS2dSsDAZHYY1+msIedxhA0dAKhvL2dRlEGte IMHo04KSLsMPgsDg8ztY6crJ+FBGuBIpCoUhceH6J+HvHYqXQFp6dXJPTxNhlxbs46KD HKrA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=FmnQ3Lga; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id q20si6875511ejb.638.2021.12.18.03.10.23; Sat, 18 Dec 2021 03:10:23 -0800 (PST) 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=@rcombs.me header.s=google header.b=FmnQ3Lga; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 56C8F68A6F6; Sat, 18 Dec 2021 13:10:20 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f43.google.com (mail-qv1-f43.google.com [209.85.219.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7C47868AEEC for ; Sat, 18 Dec 2021 13:10:13 +0200 (EET) Received: by mail-qv1-f43.google.com with SMTP id h5so3054614qvh.8 for ; Sat, 18 Dec 2021 03:10:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rcombs.me; s=google; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=OuHgalUL9IHLuVssh7+Au7LHNNkdCzmg11LUVTnn3XY=; b=FmnQ3Lga5evSeZ+7wxInfeC1c5ZgJtKOnNSN/XNwBvPx8QnMzJS88Jx9V6mrmH2NGV +hcv334dnhpkJx8C1aIvOLNcnjAOGRACCeFFPJrho4z4HL9TwtRlvDaVvb853ykmHCvQ VNxQKSB0yD6qxi5RjHOJ1+AxTg1fkd7WoWCefaUAZUIFvjMNkHjVNlzm0MkAU8bnjWdn +6iyTY+xnQRsu1U/Y/bUXmH500zOOMtIpWsdUqEVTSot53B7X+xRLum8HbTNRzdmJVX5 FUHNdF/CtU0Kb65gb8uC08JT4KYipywKPpNaySKTuOnSRslWiY+25IDuNDLDBkZpCWgx wg/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=OuHgalUL9IHLuVssh7+Au7LHNNkdCzmg11LUVTnn3XY=; b=aYKOaU2P6h0hppLfW4XiDheVFQf3k35QVBNYm2y09mAirIJDoJgI5yA/GxR1TjlvfP ppKFBGfwRpqP7CMaZWRYA4F7C0C/FagiTGt6n2g91aA+yAaWB/8vE8LSjkwrZj9SP40p WlRIedBFTTbsg7/saCZkCnPXPmuyi/cQUlRDIVAOR0vPKwuUneZsQb9p9aKXga+gJe6L kd0LifycrDWF1LTGtufLpNb3ivqj4p9kUNQD+3vtbLJ86Nnc0VMr8CixCqwB8lBZ9QXU JMTKpREJqCeP8Pg4eZdx5IF64omJxwIadAV6pfHPk5iH/Dz4QCv9P4M72mWWSyR2mckG 5Azg== X-Gm-Message-State: AOAM531/SuHdx0Jv04MHT+e9eg/OvQhPi8zD9L5qpgplU7uS93mBUlP1 MSRixDzkNocAUrKVzjU3yhSn35oiyvdE5q4= X-Received: by 2002:a05:6214:500a:: with SMTP id jo10mr5592669qvb.17.1639825811739; Sat, 18 Dec 2021 03:10:11 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:70a5:b034:a3a1:e733]) by smtp.gmail.com with ESMTPSA id h19sm9571162qth.63.2021.12.18.03.10.11 for (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 18 Dec 2021 03:10:11 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 18 Dec 2021 05:09:51 -0600 Message-Id: <20211218110953.30751-1-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] lavu/videotoolbox: expose conversion routines for color parameters 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 2YrdR5STxWOs Also fixes symbol lookup errors on older macOS when built with a newer SDK, introduced in 6cab5206b0ad94990c435cb7c5cf3b29675e0231 --- doc/APIchanges | 6 + libavutil/hwcontext_videotoolbox.c | 171 +++++++++++++++-------------- libavutil/hwcontext_videotoolbox.h | 25 +++++ 3 files changed, 119 insertions(+), 83 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 17aa664ca3..af2fbaafcf 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,12 @@ libavutil: 2021-04-27 API changes, most recent first: +2021-12-xx - xxxxxxxxxx - lavu 57.12.100 - hwcontext_videotoolbox.h + Add av_map_videotoolbox_chroma_loc_from_av + Add av_map_videotoolbox_color_matrix_from_av + Add av_map_videotoolbox_color_primaries_from_av + Add av_map_videotoolbox_color_trc_from_av + 2021-12-xx - xxxxxxxxxx - lavf 59.10.100 - avformat.h Add AVFormatContext io_close2 which returns an int diff --git a/libavutil/hwcontext_videotoolbox.c b/libavutil/hwcontext_videotoolbox.c index e9567bbf44..4c6d37304c 100644 --- a/libavutil/hwcontext_videotoolbox.c +++ b/libavutil/hwcontext_videotoolbox.c @@ -318,7 +318,7 @@ static void vt_unmap(AVHWFramesContext *ctx, HWMapDescriptor *hwmap) CVPixelBufferUnlockBaseAddress(pixbuf, (uintptr_t)hwmap->priv); } -static int vt_pixbuf_set_par(AVHWFramesContext *hwfc, +static int vt_pixbuf_set_par(void *log_ctx, CVPixelBufferRef pixbuf, const AVFrame *src) { CFMutableDictionaryRef par = NULL; @@ -375,31 +375,30 @@ static int vt_pixbuf_set_par(AVHWFramesContext *hwfc, return 0; } -static int vt_pixbuf_set_chromaloc(AVHWFramesContext *hwfc, - CVPixelBufferRef pixbuf, const AVFrame *src) +CFStringRef av_map_videotoolbox_chroma_loc_from_av(enum AVChromaLocation loc) { - CFStringRef loc = NULL; - - switch (src->chroma_location) { + switch (loc) { case AVCHROMA_LOC_LEFT: - loc = kCVImageBufferChromaLocation_Left; - break; + return kCVImageBufferChromaLocation_Left; case AVCHROMA_LOC_CENTER: - loc = kCVImageBufferChromaLocation_Center; - break; + return kCVImageBufferChromaLocation_Center; case AVCHROMA_LOC_TOP: - loc = kCVImageBufferChromaLocation_Top; - break; + return kCVImageBufferChromaLocation_Top; case AVCHROMA_LOC_BOTTOM: - loc = kCVImageBufferChromaLocation_Bottom; - break; + return kCVImageBufferChromaLocation_Bottom; case AVCHROMA_LOC_TOPLEFT: - loc = kCVImageBufferChromaLocation_TopLeft; - break; + return kCVImageBufferChromaLocation_TopLeft; case AVCHROMA_LOC_BOTTOMLEFT: - loc = kCVImageBufferChromaLocation_BottomLeft; - break; + return kCVImageBufferChromaLocation_BottomLeft; + default: + return NULL; } +} + +static int vt_pixbuf_set_chromaloc(void *log_ctx, + CVPixelBufferRef pixbuf, const AVFrame *src) +{ + CFStringRef loc = av_map_videotoolbox_chroma_loc_from_av(src->chroma_location); if (loc) { CVBufferSetAttachment( @@ -412,109 +411,115 @@ static int vt_pixbuf_set_chromaloc(AVHWFramesContext *hwfc, return 0; } -static int vt_pixbuf_set_colorspace(AVHWFramesContext *hwfc, - CVPixelBufferRef pixbuf, const AVFrame *src) +CFStringRef av_map_videotoolbox_color_matrix_from_av(enum AVColorSpace space) { - CFStringRef colormatrix = NULL, colorpri = NULL, colortrc = NULL; - Float32 gamma = 0; - - switch (src->colorspace) { + switch (space) { case AVCOL_SPC_BT2020_CL: case AVCOL_SPC_BT2020_NCL: #if HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 - colormatrix = kCVImageBufferYCbCrMatrix_ITU_R_2020; -#else - colormatrix = CFSTR("ITU_R_2020"); + if (__builtin_available(macOS 10.11, iOS 9, *)) + return kCVImageBufferYCbCrMatrix_ITU_R_2020; #endif - break; + return CFSTR("ITU_R_2020"); case AVCOL_SPC_BT470BG: case AVCOL_SPC_SMPTE170M: - colormatrix = kCVImageBufferYCbCrMatrix_ITU_R_601_4; - break; + return kCVImageBufferYCbCrMatrix_ITU_R_601_4; case AVCOL_SPC_BT709: - colormatrix = kCVImageBufferYCbCrMatrix_ITU_R_709_2; - break; + return kCVImageBufferYCbCrMatrix_ITU_R_709_2; case AVCOL_SPC_SMPTE240M: - colormatrix = kCVImageBufferYCbCrMatrix_SMPTE_240M_1995; - break; + return kCVImageBufferYCbCrMatrix_SMPTE_240M_1995; case AVCOL_SPC_UNSPECIFIED: - break; default: - av_log(hwfc, AV_LOG_WARNING, "Color space %s is not supported.\n", av_color_space_name(src->colorspace)); + return NULL; } +} - switch (src->color_primaries) { +CFStringRef av_map_videotoolbox_color_primaries_from_av(enum AVColorPrimaries pri) +{ + switch (pri) { case AVCOL_PRI_BT2020: #if HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 - colorpri = kCVImageBufferColorPrimaries_ITU_R_2020; -#else - colorpri = CFSTR("ITU_R_2020"); + if (__builtin_available(macOS 10.11, iOS 9, *)) + return kCVImageBufferColorPrimaries_ITU_R_2020; #endif - break; + return CFSTR("ITU_R_2020"); case AVCOL_PRI_BT709: - colorpri = kCVImageBufferColorPrimaries_ITU_R_709_2; - break; + return kCVImageBufferColorPrimaries_ITU_R_709_2; case AVCOL_PRI_SMPTE170M: - colorpri = kCVImageBufferColorPrimaries_SMPTE_C; - break; + return kCVImageBufferColorPrimaries_SMPTE_C; case AVCOL_PRI_BT470BG: - colorpri = kCVImageBufferColorPrimaries_EBU_3213; - break; + return kCVImageBufferColorPrimaries_EBU_3213; case AVCOL_PRI_UNSPECIFIED: - break; default: - av_log(hwfc, AV_LOG_WARNING, "Color primaries %s is not supported.\n", av_color_primaries_name(src->color_primaries)); + return NULL; } +} + +CFStringRef av_map_videotoolbox_color_trc_from_av(enum AVColorTransferCharacteristic trc) +{ - switch (src->color_trc) { + switch (trc) { case AVCOL_TRC_SMPTE2084: #if HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ - colortrc = kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ; -#else - colortrc = CFSTR("SMPTE_ST_2084_PQ"); + if (__builtin_available(macOS 10.13, iOS 11, *)) + return kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ; #endif - break; + return CFSTR("SMPTE_ST_2084_PQ"); case AVCOL_TRC_BT2020_10: case AVCOL_TRC_BT2020_12: #if HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 - colortrc = kCVImageBufferTransferFunction_ITU_R_2020; -#else - colortrc = CFSTR("ITU_R_2020"); + if (__builtin_available(macOS 10.11, iOS 9, *)) + return kCVImageBufferTransferFunction_ITU_R_2020; #endif - break; + return CFSTR("ITU_R_2020"); case AVCOL_TRC_BT709: - colortrc = kCVImageBufferTransferFunction_ITU_R_709_2; - break; + return kCVImageBufferTransferFunction_ITU_R_709_2; case AVCOL_TRC_SMPTE240M: - colortrc = kCVImageBufferTransferFunction_SMPTE_240M_1995; - break; + return kCVImageBufferTransferFunction_SMPTE_240M_1995; case AVCOL_TRC_SMPTE428: #if HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 - colortrc = kCVImageBufferTransferFunction_SMPTE_ST_428_1; -#else - colortrc = CFSTR("SMPTE_ST_428_1"); + if (__builtin_available(macOS 10.12, *, iOS 10)) + return kCVImageBufferTransferFunction_SMPTE_ST_428_1; #endif - break; + return CFSTR("SMPTE_ST_428_1"); case AVCOL_TRC_ARIB_STD_B67: #if HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG - colortrc = kCVImageBufferTransferFunction_ITU_R_2100_HLG; -#else - colortrc = CFSTR("ITU_R_2100_HLG"); + if (__builtin_available(macOS 10.13, iOS 11, *)) + return kCVImageBufferTransferFunction_ITU_R_2100_HLG; #endif - break; + return CFSTR("ITU_R_2100_HLG"); case AVCOL_TRC_GAMMA22: - gamma = 2.2; - colortrc = kCVImageBufferTransferFunction_UseGamma; - break; + return kCVImageBufferTransferFunction_UseGamma; case AVCOL_TRC_GAMMA28: - gamma = 2.8; - colortrc = kCVImageBufferTransferFunction_UseGamma; - break; - case AVCOL_TRC_UNSPECIFIED: - break; + return kCVImageBufferTransferFunction_UseGamma; default: - av_log(hwfc, AV_LOG_WARNING, "Color transfer function %s is not supported.\n", av_color_transfer_name(src->color_trc)); + case AVCOL_TRC_UNSPECIFIED: + return NULL; } +} + +static int vt_pixbuf_set_colorspace(void *log_ctx, + CVPixelBufferRef pixbuf, const AVFrame *src) +{ + CFStringRef colormatrix = NULL, colorpri = NULL, colortrc = NULL; + 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)); + + 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)); + + 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 (src->color_trc == AVCOL_TRC_GAMMA22) + gamma = 2.2; + else if (src->color_trc == AVCOL_TRC_GAMMA28) + gamma = 2.8; if (colormatrix) { CVBufferSetAttachment( @@ -550,17 +555,17 @@ static int vt_pixbuf_set_colorspace(AVHWFramesContext *hwfc, return 0; } -static int vt_pixbuf_set_attachments(AVHWFramesContext *hwfc, +static int vt_pixbuf_set_attachments(void *log_ctx, CVPixelBufferRef pixbuf, const AVFrame *src) { int ret; - ret = vt_pixbuf_set_par(hwfc, pixbuf, src); + ret = vt_pixbuf_set_par(log_ctx, pixbuf, src); if (ret < 0) return ret; - ret = vt_pixbuf_set_colorspace(hwfc, pixbuf, src); + ret = vt_pixbuf_set_colorspace(log_ctx, pixbuf, src); if (ret < 0) return ret; - ret = vt_pixbuf_set_chromaloc(hwfc, pixbuf, src); + ret = vt_pixbuf_set_chromaloc(log_ctx, pixbuf, src); if (ret < 0) return ret; return 0; diff --git a/libavutil/hwcontext_videotoolbox.h b/libavutil/hwcontext_videotoolbox.h index 62cde07c51..916899e97d 100644 --- a/libavutil/hwcontext_videotoolbox.h +++ b/libavutil/hwcontext_videotoolbox.h @@ -60,4 +60,29 @@ uint32_t av_map_videotoolbox_format_from_pixfmt(enum AVPixelFormat pix_fmt); */ uint32_t av_map_videotoolbox_format_from_pixfmt2(enum AVPixelFormat pix_fmt, bool full_range); +/** + * Convert an AVChromaLocation to a VideoToolbox/CoreVideo chroma location string. + * Returns 0 if no known equivalent was found. + */ +CFStringRef av_map_videotoolbox_chroma_loc_from_av(enum AVChromaLocation loc); + +/** + * Convert an AVColorSpace to a VideoToolbox/CoreVideo color matrix string. + * Returns 0 if no known equivalent was found. + */ +CFStringRef av_map_videotoolbox_color_matrix_from_av(enum AVColorSpace space); + +/** + * Convert an AVColorPrimaries to a VideoToolbox/CoreVideo color primaries string. + * Returns 0 if no known equivalent was found. + */ +CFStringRef av_map_videotoolbox_color_primaries_from_av(enum AVColorPrimaries pri); + +/** + * Convert an AVColorTransferCharacteristic to a VideoToolbox/CoreVideo color transfer + * function string. + * Returns 0 if no known equivalent was found. + */ +CFStringRef av_map_videotoolbox_color_trc_from_av(enum AVColorTransferCharacteristic trc); + #endif /* AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H */ From patchwork Sat Dec 18 11:09:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 32704 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2464516iog; Sat, 18 Dec 2021 03:10:33 -0800 (PST) X-Google-Smtp-Source: ABdhPJwbW2qIjljZKnW6093bOsZgL2OZ+NzbEuVq1mEnv3Ju/3X/WQ+k6o1pt69n9kfGzeClIjpx X-Received: by 2002:a17:907:1b1f:: with SMTP id mp31mr5579407ejc.247.1639825833373; Sat, 18 Dec 2021 03:10:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1639825833; cv=none; d=google.com; s=arc-20160816; b=sFWhjfb8vGYVGJaxKve6mqD9zBbQG3Q/mCOR6lWG7GxsIwtdMFqMM/HDjTWWG/iE9v vCvl70swiXJfLeDrxu70OZF3SQvEbCr5i/WaUs4AIDhZxqOF7w0pgb25SkUpis3EVaAJ viB867Yn9CUXHdV2Rwg2wAjXO/O84C7yEQRZ1TtfMixYSZqf5UZ7RYrLDN+4yBmvYG2E k01NfaqmzFirrB2ZT+o14VJ2U9PclhXrE2sVgW+af1lGLlu5bTIUwcXyhgQexvD/DN0/ evr1tps//oxIzElxUrx7Z6F693VGB/EvRFbdQ6wYqpmbatitMcaFbVaj883aY91qLcng cy4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=8WESTBaQqPL28XsH/wv+pTtexzbd0yKEDVz6GBzO+8U=; b=dKyfiHCeD7vAuuny6VoqnCjQ4oGKFi/QGT1zkojSD2PFqfq7XffSEmEO3KZp/gHqeu DQae+rWcfkgzxiGqqXemEIWaaK3xzLDHaOWgpx98IsktSQxrOvSiupK5cSPPZ7HHbwXv TxY0LIurbe1JZqohlMMeWn4es7lhcDo0SXkqutqqhsOjPm2yRmbC9oTCQ1rnc13DneCS GDeD8o07uG1PskDybdZp62uDijzboOdhmhIak4x5BS/ZUsZOqZa/nwhnR+/mHQV28FiW jHyh/UBZipM8Fu1Gc+pZPuGwmXk8e21urX+fOpTLgGWJmGGtFOweugavDfyfBk20tTYo sv7A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=pZ6lmM2O; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e3si7967440ejs.547.2021.12.18.03.10.32; Sat, 18 Dec 2021 03:10:33 -0800 (PST) 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=@rcombs.me header.s=google header.b=pZ6lmM2O; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3D42E68AF8B; Sat, 18 Dec 2021 13:10:21 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f50.google.com (mail-qv1-f50.google.com [209.85.219.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 495D868A255 for ; Sat, 18 Dec 2021 13:10:14 +0200 (EET) Received: by mail-qv1-f50.google.com with SMTP id kc16so4810376qvb.3 for ; Sat, 18 Dec 2021 03:10:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rcombs.me; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=lomkcRrRiOcjmDUfp1yUNssnu3hevyWnHfCrDaE1WIU=; b=pZ6lmM2Os6Uu56KBmbfhij56+tNfsaJ1bDhlg7b7aTJlEW6nR4zgat6qYJq1q0EylY 3JqjrRbSrfKrj0puqdBHjsKs5eOzfFCbRZJWzxeuqffdsr16k5lAFMUtO7V0GrhE7tNd QgSQTSYL7lQN90AMUIl5eB2QfrFOdNBSqlYuYrlP99e1fbmt2xFi1gTsGiRIvNVhUuef 4XKGdPUUGPRAXgSPZPCP4T0a7q5J1Hlv7wLoMdZLYTW+iGcNWYwb4oc2rLWX7Wb7cBd+ yAhoiN941+uy/j221Dj/BJa3FH3UejKivXkDHecQ+ht2ePNco0mrgnaoLTJgfsJVReJc Xeew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lomkcRrRiOcjmDUfp1yUNssnu3hevyWnHfCrDaE1WIU=; b=YiJdyRhSahvjSpApivaRc783Io6eAPsOC3QGikc0lvtJ6YDjPWoL6KBL8NIhc9uT/y B59JYkpfCeuTcpg1fd+HnGl0QccAnXoiKBDijijBcCjMxo3f0OqbQOVvjzo4E08csTpy a+0ApDXIMDOxITlyk28cfWGbkqajvJ4oQ6TrbcUWjF8p9/keBHFrsFUAj29H6XnYmPrR sjJFqKwiiWXPjJiFoByKoBa8YJyCrbuHTpJNY3xNnZ1iowcFTfkQKysLbDSa24eYq2wI SjoE/9tct0/XzI8sfo+9UysC3I+Hv7qQMzrZHSdHVObxNkjiVyy+S1bnyYoV9PklTCaI WDzA== X-Gm-Message-State: AOAM531zmapG2qHXe0cEPO13rmc8iFAHzQVqRr5PgcKyk/nJ+dA1O76b lVPH/BOuh7j8xzrC+7DA+nxsiTfigXg70+o= X-Received: by 2002:a0c:fa91:: with SMTP id o17mr2870131qvn.58.1639825812666; Sat, 18 Dec 2021 03:10:12 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:70a5:b034:a3a1:e733]) by smtp.gmail.com with ESMTPSA id h19sm9571162qth.63.2021.12.18.03.10.11 for (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 18 Dec 2021 03:10:12 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 18 Dec 2021 05:09:52 -0600 Message-Id: <20211218110953.30751-2-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211218110953.30751-1-rcombs@rcombs.me> References: <20211218110953.30751-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/3] lavc/videotoolbox: expose routine to set CVPixelBufferRef metadata 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Yy3boD+el9sa --- doc/APIchanges | 3 +++ libavutil/hwcontext_videotoolbox.c | 6 ++++++ libavutil/hwcontext_videotoolbox.h | 7 +++++++ libavutil/version.h | 2 +- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index af2fbaafcf..c7b5591f6a 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,9 @@ libavutil: 2021-04-27 API changes, most recent first: +2021-12-xx - xxxxxxxxxx - lavu 57.12.100 - hwcontext_videotoolbox.h + Add av_vt_pixbuf_set_attachments + 2021-12-xx - xxxxxxxxxx - lavu 57.12.100 - hwcontext_videotoolbox.h Add av_map_videotoolbox_chroma_loc_from_av Add av_map_videotoolbox_color_matrix_from_av diff --git a/libavutil/hwcontext_videotoolbox.c b/libavutil/hwcontext_videotoolbox.c index 4c6d37304c..2d42ff6f4c 100644 --- a/libavutil/hwcontext_videotoolbox.c +++ b/libavutil/hwcontext_videotoolbox.c @@ -571,6 +571,12 @@ static int vt_pixbuf_set_attachments(void *log_ctx, return 0; } +int av_vt_pixbuf_set_attachments(void *log_ctx, + CVPixelBufferRef pixbuf, const AVFrame *src) +{ + return vt_pixbuf_set_attachments(log_ctx, pixbuf, src); +} + static int vt_map_frame(AVHWFramesContext *ctx, AVFrame *dst, const AVFrame *src, int flags) { diff --git a/libavutil/hwcontext_videotoolbox.h b/libavutil/hwcontext_videotoolbox.h index 916899e97d..b6bdcf243d 100644 --- a/libavutil/hwcontext_videotoolbox.h +++ b/libavutil/hwcontext_videotoolbox.h @@ -85,4 +85,11 @@ CFStringRef av_map_videotoolbox_color_primaries_from_av(enum AVColorPrimaries pr */ CFStringRef av_map_videotoolbox_color_trc_from_av(enum AVColorTransferCharacteristic trc); +/** + * Update a CVPixelBufferRef's metadata to based on an AVFrame. + * Returns 0 if no known equivalent was found. + */ +int av_vt_pixbuf_set_attachments(void *log_ctx, + CVPixelBufferRef pixbuf, const struct AVFrame *src); + #endif /* AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H */ diff --git a/libavutil/version.h b/libavutil/version.h index 0e7b36865a..668f9206fe 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 57 -#define LIBAVUTIL_VERSION_MINOR 11 +#define LIBAVUTIL_VERSION_MINOR 12 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ From patchwork Sat Dec 18 11:09:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 32705 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2464622iog; Sat, 18 Dec 2021 03:10:42 -0800 (PST) X-Google-Smtp-Source: ABdhPJy9WeoA+EZ6gCKoTih9j5X1yuGBAVpwajGO5s3295ytm3v94XRdjuXDSYCdqAqFTgzvpB6U X-Received: by 2002:a50:c3cf:: with SMTP id i15mr6754088edf.216.1639825842381; Sat, 18 Dec 2021 03:10:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1639825842; cv=none; d=google.com; s=arc-20160816; b=cYhV2ip22A8G090xQe9dFRttGqc2GFt0phB5XqfAyMylty1+GH/wr6N2Wuol7o0I24 sA6ILFSg/r0nuhSQ2F08Ybe2WSrntMwSXgXh8p1DuQWp7ZSofN0zcsdreNBWsK+rnlpy DpXPl1XqtTcjx3E4S5NiYa59/EhmZQ24oZDPLy+0+CJEcWVY0Y6DNocTB0fcUXra7ZNN gL8la3lUxD+LSty54RvK+OFGXb2XimJACfADsXcd2yqMex632i4U+Cv2Q9Rwh1D8DJ9J iJ7GOv5BDrBstWEGsj7YDI0tpsDxNTe753ON/b/oqywKWIfOm6eqDHdXn8saPvOR2l/V GA7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=UCBwaLAJU/p+Au47SZiL3gZJOi6g/YWjbGGF6rRm0a8=; b=nW+MFs3CE+Du6FI+cWTT+UJH9dUwaEBtYZ39evYb2H0XknguDC7Wh/zj6Yw7XWn4Rs CJ05Rw43DImUW9Gi646LH/kpnZ3h5Fluy7NkbB+0rFkDDmVEnHnquQXPTjBcOXZX0DYK LCdD8c5wLU7opDZppjsYXkYbhd5Z0wm68cKTUChuziYS0KHAhypgst/raQry1zLLrcFZ NoQIxko2OgE/235yR1Ki4OztvyKn+uKkE6e9/LU6rHxV5sZ5y7nv5xhlHOzWsbHHeHYB MbYFoMvYu/c4Me+JuKjpk3ohwCQWAdeL3YsxZLLgkOYtvhv8ADlc4KL2YrNcckVr0+cr IZ+w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=F34vCaW0; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id oz20si22232ejc.528.2021.12.18.03.10.42; Sat, 18 Dec 2021 03:10:42 -0800 (PST) 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=@rcombs.me header.s=google header.b=F34vCaW0; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3400C68AFA1; Sat, 18 Dec 2021 13:10:22 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f49.google.com (mail-qv1-f49.google.com [209.85.219.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 16F1768A6F6 for ; Sat, 18 Dec 2021 13:10:15 +0200 (EET) Received: by mail-qv1-f49.google.com with SMTP id o10so4794493qvc.5 for ; Sat, 18 Dec 2021 03:10:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rcombs.me; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=hZ4I43g9OmOsvazFh/sqKT/SX4xIePHJ8wXqwwITnBg=; b=F34vCaW03v0fmZWBJkSi7FWtkroNsKgNCo1ge9kjL7PaU55dy5bg2syqgKmxYETMbJ T3RIlyNUQbbZxhg7S9xHqQKEJ7voKZds+HdDN2FGD0aOsdrLveRbompvMigSqm49HdZY YifH8RbMYrpIBtZbGxDOkelEofTzv5hMeWxAv8ewnFevyz/kzUFv+HnGOTb+kzN3cDLm BuelR/B/lJkBdqVw0RZhiDVgo5eJD2RbK7TjAGGZbQ0OmYIKwn4NW6fRh5mVS3f45P69 g381q5pwXHReY4lr/WMeE4w5+IaivSlAWU2QCnOh7q7jZtIp6UEq6MnD1vDXzfSuaTs0 NVAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hZ4I43g9OmOsvazFh/sqKT/SX4xIePHJ8wXqwwITnBg=; b=7Zlz1hCbw3diW4Frse8/Juu/85aYzLQeVdm/zXvCedHTx8rS1m/TByQUTjrrWGJfEd hRgS9DTMpQ0TIojI2krM1K15aSveKJoKVMxTh9YBEfhHW6WRTgxnSUxbmWdvfgg2LmSV Quofjx0iyJgWodSYqWSx3e9Ry7l56a/f09uG5k4xL0VoyFe1uoI7V3U8E0yDqgw/trXi q3f+qa4BJmhAnKQCA4+SxBZ5DUCbI2vRp2DiKawkFjboESKHkUMvFA8iOEzOaRSqlAvK VgokBfXx3L/Sp4xmt4WGTt9bQOxUOkmKoSC60tGLdiRt6kPSV1BVeBXRZqOvb/ipvZq8 dwiw== X-Gm-Message-State: AOAM530Us8h50XL5jHLjzV0uSUlssGHuP7VSQe3HgdyNga2/jbaIwcyr 7C1CTRq+DcnPaiJq2xTDLlRVR6J23e+DK4g= X-Received: by 2002:a05:6214:260d:: with SMTP id gu13mr6108970qvb.89.1639825813472; Sat, 18 Dec 2021 03:10:13 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:70a5:b034:a3a1:e733]) by smtp.gmail.com with ESMTPSA id h19sm9571162qth.63.2021.12.18.03.10.12 for (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 18 Dec 2021 03:10:13 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 18 Dec 2021 05:09:53 -0600 Message-Id: <20211218110953.30751-3-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211218110953.30751-1-rcombs@rcombs.me> References: <20211218110953.30751-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3] lavc/videotoolbox: set attachments on decoded buffers 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: LexunZ7GtaNx VideoToolbox internally sets all the colorspace parameters to BT709, regardless of what the bitstream actually indicates, so we need to replace that with what we've parsed. --- libavcodec/videotoolbox.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c index 519f55a9ab..69beb3881f 100644 --- a/libavcodec/videotoolbox.c +++ b/libavcodec/videotoolbox.c @@ -90,6 +90,7 @@ int ff_videotoolbox_buffer_copy(VTContext *vtctx, static int videotoolbox_postproc_frame(void *avctx, AVFrame *frame) { + int ret; VTHWFrame *ref = (VTHWFrame *)frame->buf[0]->data; if (!ref->pixbuf) { @@ -103,6 +104,9 @@ static int videotoolbox_postproc_frame(void *avctx, AVFrame *frame) frame->crop_top = 0; frame->crop_bottom = 0; + if ((ret = av_vt_pixbuf_set_attachments(avctx, ref->pixbuf, frame)) < 0) + return ret; + frame->data[3] = (uint8_t*)ref->pixbuf; if (ref->hw_frames_ctx) {