From patchwork Sat Nov 13 21:09:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 31401 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3677619iob; Sat, 13 Nov 2021 13:09:44 -0800 (PST) X-Google-Smtp-Source: ABdhPJw0vSYpYMMUpKN8/DjxgHcim6v9/ciNqvwwSW4755P/8jdul24tDJYXoZD2Vcx0Cictwd0V X-Received: by 2002:a17:906:fb17:: with SMTP id lz23mr33029432ejb.149.1636837784501; Sat, 13 Nov 2021 13:09:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636837784; cv=none; d=google.com; s=arc-20160816; b=B5B6DLLp7cVALmjLHmELJzMb4Eu/xaNKZSooaVWj0UMOaaq7IUapXWcclV1Zb0Rak+ Gkj2egqdm6/ZqJjsJi+/sXQNGpKf3yr0ys0qdZ3RKNbuXtlj7FF7C0TiCE1RG5wublCs 5lUcf2jzg9//LPZNCyx+UlLyAJLKElJ4q/66JVjwybsxluGtBFyezBMHsmn/SieusOaL 0O5fKw7ZbKv0gRpe0x8ujgQuIoo9pKNntBUaIjQDrxt7CbdngcOx8CSKx2MPeRf9DOO9 MaRLW39np7VwJKhLXc0TS1IWsY0Dp1mXnACp3ZbN0cog85195KyPXps111EQFDXqFgZ3 FIjg== 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=xZa3QzwCjXcSWthgFl39D94Q+pxHAszJ//Izu23AJkU=; b=LGGD8sYW6B4qQHbpzS+NxLVBMpOeGjdV4ktIX/EEj0HoiGvoWCALSJ/7SJ03e5kXbo zhViGLoM9pSmHz37CfdZfAkKsee0Jxsdzsq/IOySL2Zl2Ly3GRJmEDQGF/2FATGUBMnU AVSzOTUinpD8Ny/kVSSnkkBBMvsHxEB/S6yHt1hDCcMbN4Q40hyim5rOje5pW77EgiAe PnofR059x/Ca9u4n+DhAiMvuHqV9ce5Iy72C7MOC3HgkrVIVjdXPmuZUX/SvFSJop7K6 5ehUqz1lgQ0tV/0Vu1uIciejOnAA+498Czi7jr/L42aeq0wGtuALPwuBrKz7wyqfGZBf ELdg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=No+dKLax; 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 b15si24145814ede.50.2021.11.13.13.09.44; Sat, 13 Nov 2021 13:09:44 -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=No+dKLax; 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 626AB68AE25; Sat, 13 Nov 2021 23:09:31 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io1-f43.google.com (mail-io1-f43.google.com [209.85.166.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D686C687F4C for ; Sat, 13 Nov 2021 23:09:23 +0200 (EET) Received: by mail-io1-f43.google.com with SMTP id v23so15795831iom.12 for ; Sat, 13 Nov 2021 13:09:23 -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=x1Q6RUH14bCozInp9ljld6zufrJAwIAgDYcyRG3noOA=; b=No+dKLaxr72zQSl2fiZPZQd80AVlo9+ygzNMjCNreDZrQocfPY3xynD87TJjNBeW6d bt4Io5r80xSuJ1H3SoR+lwhCNc8a2lSVH+s+M42JVv9GX9ja+dfcz4IEXqj+ZPmx8Yf9 8onmJCgxBt5HVBWX2e2doZkEYXGZdgHtcnjC7HM6gp1Pkp5a57yHizBHv1Jr8rjC9A1F qiOkCescCEsLBqrN8ix7sdOaLZ9TjEiWsosDATpzEIxmmtmKY24c/8xrAr30eVugJLl5 9YNa1ULM49Bf5h6FRZVj85BXQGKeeE22Q/2YBqsnXPJ9zigSBZ3qqunI4FlZOXBaQ2B/ I3MQ== 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=x1Q6RUH14bCozInp9ljld6zufrJAwIAgDYcyRG3noOA=; b=JBBEZNyNqtIkMaMAA4JNC2iRMOL1H7PEYMjpSRAtWTE4FBISxBF4YYRawZ6V752H25 neJLVNQANUWhjMx2qDjvBusEegwypSB+Aqw1zrt/J3l+XEqdUZOLdhLvKwTcCg/moLaT uvsACTC8b0vIhgtZIK5U+0z/YfFFdKtHKrW4NHkZYLsCmS61L9GmFSts4/T6ijM7DnqB x+rUzL6XgesV4K/4CxcgmLAYvul1fioDE8vwO0mreYCdOSAp59P27AitUmJSnuH3AQwe Bnc81hV7nezropAgUa487WQW4p1cyFjHr9edeDV2k+ndJl/SKogeypciZXhRWwy/gUol uxYA== X-Gm-Message-State: AOAM531ebx1NqM2V9HIrSiQvI5XIXk4cjHIFfcR/3uZOw6OTbW43IUj9 trhhJuV9pBJqx6qzysw+ovbdhbfmXJQYH6A= X-Received: by 2002:a5d:8903:: with SMTP id b3mr18062583ion.44.1636837761543; Sat, 13 Nov 2021 13:09:21 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:516:f322:7db9:ae0a]) by smtp.gmail.com with ESMTPSA id j23sm5243896iog.53.2021.11.13.13.09.20 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Nov 2021 13:09:21 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Nov 2021 15:09:02 -0600 Message-Id: <20211113210916.49167-1-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 01/15] lavu/pixfmt: add high-bit-depth semi-planar 4:2:2/4:4:4 formats 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: R435mUTImtcm These are used by VideoToolbox hardware decoders. --- libavutil/pixdesc.c | 72 +++++++++++++++++++++++++++++++++++++++++++++ libavutil/pixfmt.h | 14 +++++++++ 2 files changed, 86 insertions(+) diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c index 69cb198646..7bfd0612a5 100644 --- a/libavutil/pixdesc.c +++ b/libavutil/pixdesc.c @@ -2393,6 +2393,78 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { .name = "vulkan", .flags = AV_PIX_FMT_FLAG_HWACCEL, }, + [AV_PIX_FMT_P410BE] = { + .name = "p410be", + .nb_components = 3, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 6, 10 }, /* Y */ + { 1, 4, 0, 6, 10 }, /* U */ + { 1, 4, 2, 6, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, + }, + [AV_PIX_FMT_P410LE] = { + .name = "p410le", + .nb_components = 3, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 6, 10 }, /* Y */ + { 1, 4, 0, 6, 10 }, /* U */ + { 1, 4, 2, 6, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, + [AV_PIX_FMT_P216BE] = { + .name = "p216be", + .nb_components = 3, + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 0, 16 }, /* Y */ + { 1, 4, 0, 0, 16 }, /* U */ + { 1, 4, 2, 0, 16 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, + }, + [AV_PIX_FMT_P216LE] = { + .name = "p216le", + .nb_components = 3, + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 0, 16 }, /* Y */ + { 1, 4, 0, 0, 16 }, /* U */ + { 1, 4, 2, 0, 16 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, + [AV_PIX_FMT_P416BE] = { + .name = "p416be", + .nb_components = 3, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 0, 16 }, /* Y */ + { 1, 4, 0, 0, 16 }, /* U */ + { 1, 4, 2, 0, 16 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, + }, + [AV_PIX_FMT_P416LE] = { + .name = "p416le", + .nb_components = 3, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 0, 16 }, /* Y */ + { 1, 4, 0, 0, 16 }, /* U */ + { 1, 4, 2, 0, 16 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, }; static const char * const color_range_names[] = { diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h index 53bdecfcb7..30d35fc921 100644 --- a/libavutil/pixfmt.h +++ b/libavutil/pixfmt.h @@ -352,6 +352,16 @@ enum AVPixelFormat { AV_PIX_FMT_X2RGB10BE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), big-endian, X=unused/undefined AV_PIX_FMT_X2BGR10LE, ///< packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G 10R(lsb), little-endian, X=unused/undefined AV_PIX_FMT_X2BGR10BE, ///< packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G 10R(lsb), big-endian, X=unused/undefined + + AV_PIX_FMT_P410BE, ///< interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, big-endian + AV_PIX_FMT_P410LE, ///< interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, little-endian + + AV_PIX_FMT_P216BE, ///< interleaved chroma YUV 4:2:2, 32bpp, big-endian + AV_PIX_FMT_P216LE, ///< interleaved chroma YUV 4:2:2, 32bpp, liddle-endian + + AV_PIX_FMT_P416BE, ///< interleaved chroma YUV 4:4:4, 48bpp, big-endian + AV_PIX_FMT_P416LE, ///< interleaved chroma YUV 4:4:4, 48bpp, little-endian + AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions }; @@ -444,6 +454,10 @@ enum AVPixelFormat { #define AV_PIX_FMT_X2RGB10 AV_PIX_FMT_NE(X2RGB10BE, X2RGB10LE) #define AV_PIX_FMT_X2BGR10 AV_PIX_FMT_NE(X2BGR10BE, X2BGR10LE) +#define AV_PIX_FMT_P410 AV_PIX_FMT_NE(P410BE, P410LE) +#define AV_PIX_FMT_P216 AV_PIX_FMT_NE(P216BE, P216LE) +#define AV_PIX_FMT_P416 AV_PIX_FMT_NE(P416BE, P416LE) + /** * Chromaticity coordinates of the source primaries. * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.1 and ITU-T H.273. From patchwork Sat Nov 13 21:09:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 31410 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3677445iob; Sat, 13 Nov 2021 13:09:33 -0800 (PST) X-Google-Smtp-Source: ABdhPJzeqLqa7d8TzuUlKfBEbpyeluPgTap50o7RUXwed8KS1bw/cmp6DtLynZe7AQUsf0QJS70u X-Received: by 2002:aa7:d5d6:: with SMTP id d22mr2286520eds.364.1636837773751; Sat, 13 Nov 2021 13:09:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636837773; cv=none; d=google.com; s=arc-20160816; b=Z9cd62V9/bnoWLPunTaUVmJjoIzqjWTYsl1yDOcjn3HMu4+LAdktRBJIZBxWBc5kkK yRFs+4K9zrGNPeOLv5gE4WLG773fJ38QzqfsDmQMrGF3YicjAU1HVoAtVzt249XYoDxr 9uxuDaC8bljcCyd+UlxxFv5cE6I04Osh37FntuZf7pBemFwWfn2CMlORAxjiLRCNiP3M NUWJGlNot8x72Xgj4/nvuuZNZTCrptVsUz5j2hV8hX/jyWtOG6cXd6xrihV2JNO+PkI3 yS6HxWtw4bt3kK3bFi9PMcONjtclYEMIoLpowaUhw353oBghKqRcifIdQ40Yd5CdJTn9 oKpA== 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=/GlM/1ZhMCnDIJTa9D9y5jJnAN2EOba4oUZPcsjxlOk=; b=htLkP8TnAo6zOsS+8KyZEoZjOlVZ1mtJBatueanAO+loJAaBVDMNsW3db6Eg9aEBCV dgecnLjJFJy4UtNDdJIc25ShFYpPsBRV1qD9ksV01Vh4uspnoKINsyydXY/IFlM4cLk/ D9oSyVGX++tTJH9AXfMMVGC1X9F5uy1RpDxJwVgRB27mhiQK90tqydXO6AnNnajuVbrX /n3FqwiNUzsdiAxSqZl7LJmhu70+XUE5XCUOXOgl4SA2bMDSf3FcelwJB8Lrew5D9DA2 JJPHBdJ2JMSDRFz3OqNM5rAqG1Ov/wu6fR5miwRgX1AVGuUyVrX+ZvBs0FYtzqEjCxRs RJMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=Vwu3TuO+; 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 a3si20741400ejd.576.2021.11.13.13.09.33; Sat, 13 Nov 2021 13:09: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=Vwu3TuO+; 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 564A068ADD1; Sat, 13 Nov 2021 23:09:30 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io1-f47.google.com (mail-io1-f47.google.com [209.85.166.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DD38368A962 for ; Sat, 13 Nov 2021 23:09:23 +0200 (EET) Received: by mail-io1-f47.google.com with SMTP id z26so15791921iod.10 for ; Sat, 13 Nov 2021 13:09:23 -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=2iX0LCkRpgBc/m12I7r3G/zp0zZUVaGG1XleKMRHJjc=; b=Vwu3TuO+NMl9QGfEPuoC1X9yoyNr2lujPvwwFt6EsS81ho28mzHFcmKgcWNLMZBDKH j0+iI6JBz5av1uUOeVYZd0BVWo+Dwg/lrkECeSx+X0skRWtKUXuOgCNWndnQ06VfGcNb yRdIba9xjdo+mkceeUW8rPTmqbh3Z6d7Dsa4xpfvTDxExBik6Sf0qHQhPrdfIB96CppS zhQ+j8gFWmE8fdf9YjiCgGp5zeteme2sdPfKM5HzANBQoPsrXcR+5VnThY5iNSHLsXt5 BrkNnRPa/CMKc8dSXCvldKlh0mU1R0mwE8gsZgjl5UH6T6ivSLR2z7+sqprWA1ZsMUER 8flg== 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=2iX0LCkRpgBc/m12I7r3G/zp0zZUVaGG1XleKMRHJjc=; b=Z4tUfqMcOIa/GcS7AkA/SOZBUlP+JLMMYWBRzUKV5+mkpcdA9Mb9w31YVOQS0rtGdJ xBbGwvfts/aWj/x7hKWv9OgbKVcsy30Vj3tspS7c1+roX7JuvBcNyNRmLNFhRVqktUKn pFm97YIJY5N5suBaKDGIjPVxuu7nSgNyd9aEC+AudcKZKjbls/rja3c+vOWukC1mIRpG E8R2fwACkcoJ5C7llQjpeD6sPG4+f5BVTBwT+xqT3EII32nDHkgeR2depkcvPYObwYEV 0qCHmAVPgj5sm7vOPHdx8DFH5TvmStjJWdBNg3wtfHmXsx/pinNGMHn4qk3KXbCT6M+s L9mA== X-Gm-Message-State: AOAM5319A4huwzWvFzyU7BgYPZifbGiFOSOFFgS7uo2lMZTAjD+RXr+g t19whm6p4SvG9jRomh3Q5eJ7ht29yK+9NeA= X-Received: by 2002:a5d:9d9b:: with SMTP id ay27mr9191219iob.133.1636837762307; Sat, 13 Nov 2021 13:09:22 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:516:f322:7db9:ae0a]) by smtp.gmail.com with ESMTPSA id j23sm5243896iog.53.2021.11.13.13.09.21 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Nov 2021 13:09:21 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Nov 2021 15:09:03 -0600 Message-Id: <20211113210916.49167-2-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211113210916.49167-1-rcombs@rcombs.me> References: <20211113210916.49167-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 02/15] swscale: add P216/P410/P416 input 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: jV3E2/nD8a2H --- libswscale/input.c | 14 ++++++++++++++ libswscale/utils.c | 6 ++++++ 2 files changed, 20 insertions(+) diff --git a/libswscale/input.c b/libswscale/input.c index 336f957c8c..5c8a28c665 100644 --- a/libswscale/input.c +++ b/libswscale/input.c @@ -1244,15 +1244,21 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c) c->chrToYV12 = read_ayuv64le_UV_c; break; case AV_PIX_FMT_P010LE: + case AV_PIX_FMT_P410LE: c->chrToYV12 = p010LEToUV_c; break; case AV_PIX_FMT_P010BE: + case AV_PIX_FMT_P410BE: c->chrToYV12 = p010BEToUV_c; break; case AV_PIX_FMT_P016LE: + case AV_PIX_FMT_P216LE: + case AV_PIX_FMT_P416LE: c->chrToYV12 = p016LEToUV_c; break; case AV_PIX_FMT_P016BE: + case AV_PIX_FMT_P216BE: + case AV_PIX_FMT_P416BE: c->chrToYV12 = p016BEToUV_c; break; case AV_PIX_FMT_Y210LE: @@ -1525,6 +1531,8 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c) case AV_PIX_FMT_GRAY16LE: case AV_PIX_FMT_P016LE: + case AV_PIX_FMT_P216LE: + case AV_PIX_FMT_P416LE: c->lumToYV12 = bswap16Y_c; break; case AV_PIX_FMT_YUVA420P9LE: @@ -1567,6 +1575,8 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c) case AV_PIX_FMT_GRAY16BE: case AV_PIX_FMT_P016BE: + case AV_PIX_FMT_P216BE: + case AV_PIX_FMT_P416BE: c->lumToYV12 = bswap16Y_c; break; case AV_PIX_FMT_YUVA420P9BE: @@ -1693,9 +1703,13 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c) c->lumToYV12 = bgr64LEToY_c; break; case AV_PIX_FMT_P010LE: + case AV_PIX_FMT_NV20LE: + case AV_PIX_FMT_P410LE: c->lumToYV12 = p010LEToY_c; break; case AV_PIX_FMT_P010BE: + case AV_PIX_FMT_NV20BE: + case AV_PIX_FMT_P410BE: c->lumToYV12 = p010BEToY_c; break; case AV_PIX_FMT_GRAYF32LE: diff --git a/libswscale/utils.c b/libswscale/utils.c index c726922527..b00acc8447 100644 --- a/libswscale/utils.c +++ b/libswscale/utils.c @@ -268,6 +268,12 @@ static const FormatEntry format_entries[] = { [AV_PIX_FMT_Y210LE] = { 1, 0 }, [AV_PIX_FMT_X2RGB10LE] = { 1, 1 }, [AV_PIX_FMT_X2BGR10LE] = { 1, 1 }, + [AV_PIX_FMT_P410BE] = { 1, 0 }, + [AV_PIX_FMT_P410LE] = { 1, 0 }, + [AV_PIX_FMT_P216BE] = { 1, 0 }, + [AV_PIX_FMT_P216LE] = { 1, 0 }, + [AV_PIX_FMT_P416BE] = { 1, 0 }, + [AV_PIX_FMT_P416LE] = { 1, 0 }, }; int sws_isSupportedInput(enum AVPixelFormat pix_fmt) From patchwork Sat Nov 13 21:09:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 31409 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3677793iob; Sat, 13 Nov 2021 13:09:55 -0800 (PST) X-Google-Smtp-Source: ABdhPJyX8Xe0sMb7oru4vWbYvD0lj23sH/y9ojmKjmj0Wc4jGLqkqqvoHpfKymy/E8d2AqyiHfwu X-Received: by 2002:a17:907:2ce1:: with SMTP id hz1mr33575009ejc.96.1636837795400; Sat, 13 Nov 2021 13:09:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636837795; cv=none; d=google.com; s=arc-20160816; b=MUZpWsfywraeRdlhjuOKK/ABA55qrbQK7iJzLkgL6B++17WVs6+iiM8/Ucz3UzwFUg Tv38It6PzVlhP/b4rQXhjS95QL0buLDPj3KAdew5a0jUyNMDgeeDcUGyW7+L3PFKXSRI YWSdeQYGo8RssipoCbzVSLO/q2cnQYVfXxRW5HZ0YPfh5fSw59I0ALCmCbUICReyMQ/t epChpCRX8fQf9tbakCP/h8BHbL9hQ4mBzyz9/iClHqfS/3gYC+jVIJprTjpqjGV/PQAT B7iZI3J75MTCOIaMfjDrKho+Nyo24Qx6ZdI1wXgeh9+ssn4c7t+QmAZrw9/jlrZ86xB3 FalQ== 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=gwxWV46PDmBYztneYODmpchAtYilLhfmm8zF+TkFZ8E=; b=M+7lwBOwZPgcCa9MlJlDB7L9ad7xhknz8X+z+ZhJz9IuIwSUGZ0OXhy2YDFwp5q+Y0 ASPAYY8l8uHZ3j1/Urez5wGNRY07lYb+CqQ5aXAvVT7nWtQ1S7kH/dBGAeTg4w64O9k1 JSPnpbaLlbeSYMAf6ORMAMXeZcjmgtTJycSq2NDQEkF4DgIEg3IBrHtrht6YwOjJsWnl a1L8juV+VWRWf/pyeLXnyrgdm5NzhijvSC8D0d71nH6G5h6i+pPkJvbdewBmVQw/vQyJ UWuImW1Fgby2NGWnTi0JhkSVu59KptSJKYnZBAcxb6+JHmsT6rSQgE1xB1sI/6Vxw32s AiGg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=EW5HXY6N; 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 oz38si21555462ejc.147.2021.11.13.13.09.54; Sat, 13 Nov 2021 13:09:55 -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=EW5HXY6N; 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 5C43268AE21; Sat, 13 Nov 2021 23:09:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io1-f42.google.com (mail-io1-f42.google.com [209.85.166.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A51FE68ACAB for ; Sat, 13 Nov 2021 23:09:24 +0200 (EET) Received: by mail-io1-f42.google.com with SMTP id m9so15931105iop.0 for ; Sat, 13 Nov 2021 13:09:24 -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=yA2lXhNnd49GUXvkt9yATZankRG3NGhJrDHyLORIvx0=; b=EW5HXY6N4psNUY2aO/O9ffSSumfhE25j0npGmbaWct9wlFEcTAPQyOCSThTck0uYh+ fFNOVIdo/aO14DcNWoi4YBtwNprkUfm+8GYPenRxBAxtqfg0V6TQdNuVZzFk4wX5Er4a 4HIpVl2fiNGdtYBgkzfNUNalH/rNDQcvcCMf2LIydNmQCC9uFBNqm1Vw+DjLVkU3FWvg qN5cnN/qReYwmkEPznXFEf2yfzUQRsE3d5n4TZOb1bbH+/cKp5BQqwhy22idmSZf+ZFL NCD/lXRRS1R6/PoaqI6kaPkK1HTR3dHjRGPXoK0HaYqJwkZHubhbkcXjpRcqqhjTCsq/ YNsg== 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=yA2lXhNnd49GUXvkt9yATZankRG3NGhJrDHyLORIvx0=; b=VR6adz7g/G3qYA/3/AjiJhudemiQlBV6ikijn1AoGM4GhB5415sIWHlWsc/ZXWG8fW PMqdEKgW/+lVUm0wgvNtoZGKDoPp4oY/Ss2Ya8HPob0XuZkgX/Lo5NHjDEo6nLIpKtx4 xuoorM6BDDxTm3T39d9a+EP/37tWU4nu/+BxLPojKb6kG+urs9RKYX69PdxUKef4L4XX JFIcyOW2F3eOo35DBE9iOETGT9d/JEjitkzmNdTxvpwnxNYUaFFkghdgYur/NOlZdIv2 jehCQbujT3caOGlS7PaJTKrpdoQbFtqBRcURncLHq3ZTzi6c3Q2GWZX2oLqv+MWyLEaS 6IJQ== X-Gm-Message-State: AOAM530F5aoaNUUMd7w7zg9NdyuhzEExTJllmSU4bBE1Tp1sYXKHBRxO /9GtQff9QwlGYaGoBfvamiBYtOKWX10BCVE= X-Received: by 2002:a5d:9ecc:: with SMTP id a12mr16842985ioe.102.1636837763061; Sat, 13 Nov 2021 13:09:23 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:516:f322:7db9:ae0a]) by smtp.gmail.com with ESMTPSA id j23sm5243896iog.53.2021.11.13.13.09.22 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Nov 2021 13:09:22 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Nov 2021 15:09:04 -0600 Message-Id: <20211113210916.49167-3-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211113210916.49167-1-rcombs@rcombs.me> References: <20211113210916.49167-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 03/15] lavu/videotoolbox: add 422 and 444 pixel format mappings 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: LIxBfAPMbfVQ --- configure | 12 ++++++++ libavutil/hwcontext_videotoolbox.c | 44 ++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/configure b/configure index 891824757b..97c0133f8c 100755 --- a/configure +++ b/configure @@ -2327,6 +2327,12 @@ TYPES_LIST=" kCMVideoCodecType_HEVC kCMVideoCodecType_HEVCWithAlpha kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange + kCVPixelFormatType_422YpCbCr8BiPlanarVideoRange + kCVPixelFormatType_422YpCbCr10BiPlanarVideoRange + kCVPixelFormatType_422YpCbCr16BiPlanarVideoRange + kCVPixelFormatType_444YpCbCr8BiPlanarVideoRange + kCVPixelFormatType_444YpCbCr10BiPlanarVideoRange + kCVPixelFormatType_444YpCbCr16BiPlanarVideoRange kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ kCVImageBufferTransferFunction_ITU_R_2100_HLG kCVImageBufferTransferFunction_Linear @@ -6277,6 +6283,12 @@ enabled videotoolbox && { check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVC "-framework CoreMedia" check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVCWithAlpha "-framework CoreMedia" check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange "-framework CoreVideo" + check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_422YpCbCr8BiPlanarVideoRange "-framework CoreVideo" + check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_422YpCbCr10BiPlanarVideoRange "-framework CoreVideo" + check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_422YpCbCr16BiPlanarVideoRange "-framework CoreVideo" + check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_444YpCbCr8BiPlanarVideoRange "-framework CoreVideo" + check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_444YpCbCr10BiPlanarVideoRange "-framework CoreVideo" + check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_444YpCbCr16BiPlanarVideoRange "-framework CoreVideo" check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ "-framework CoreVideo" check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_ITU_R_2100_HLG "-framework CoreVideo" check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_Linear "-framework CoreVideo" diff --git a/libavutil/hwcontext_videotoolbox.c b/libavutil/hwcontext_videotoolbox.c index 25f4e17715..0a6c9ecfb0 100644 --- a/libavutil/hwcontext_videotoolbox.c +++ b/libavutil/hwcontext_videotoolbox.c @@ -53,13 +53,57 @@ static const struct { { kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange, false, AV_PIX_FMT_P010 }, { kCVPixelFormatType_420YpCbCr10BiPlanarFullRange, true, AV_PIX_FMT_P010 }, #endif +#if HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE + { kCVPixelFormatType_422YpCbCr8BiPlanarVideoRange, false, AV_PIX_FMT_NV16 }, + { kCVPixelFormatType_422YpCbCr8BiPlanarFullRange, true, AV_PIX_FMT_NV16 }, +#endif +#if HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE + { kCVPixelFormatType_422YpCbCr10BiPlanarVideoRange, false, AV_PIX_FMT_NV20 }, + { kCVPixelFormatType_422YpCbCr10BiPlanarFullRange, true, AV_PIX_FMT_NV20 }, +#endif +#if HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE + { kCVPixelFormatType_422YpCbCr16BiPlanarVideoRange, false, AV_PIX_FMT_P216 }, +#endif +#if HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE + { kCVPixelFormatType_444YpCbCr8BiPlanarVideoRange, false, AV_PIX_FMT_NV24 }, + { kCVPixelFormatType_444YpCbCr8BiPlanarFullRange, true, AV_PIX_FMT_NV24 }, +#endif +#if HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE + { kCVPixelFormatType_444YpCbCr10BiPlanarVideoRange, false, AV_PIX_FMT_P410 }, + { kCVPixelFormatType_444YpCbCr10BiPlanarFullRange, true, AV_PIX_FMT_P410 }, +#endif +#if HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE + { kCVPixelFormatType_444YpCbCr16BiPlanarVideoRange, false, AV_PIX_FMT_P416 }, +#endif }; static const enum AVPixelFormat supported_formats[] = { +#ifdef kCFCoreFoundationVersionNumber10_7 AV_PIX_FMT_NV12, +#endif AV_PIX_FMT_YUV420P, AV_PIX_FMT_UYVY422, +#if HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE AV_PIX_FMT_P010, +#endif +#if HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE + AV_PIX_FMT_NV16, +#endif +#if HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE + AV_PIX_FMT_NV20, +#endif +#if HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE + AV_PIX_FMT_P216, +#endif +#if HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE + AV_PIX_FMT_NV24, +#endif +#if HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE + AV_PIX_FMT_P410, +#endif +#if HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE + AV_PIX_FMT_P416, +#endif AV_PIX_FMT_BGRA, }; From patchwork Sat Nov 13 21:09:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 31400 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3677938iob; Sat, 13 Nov 2021 13:10:06 -0800 (PST) X-Google-Smtp-Source: ABdhPJysTe33Lt62aMg4jVGQK58bThEyjgaiWiYVjLbbXjBvpNp27l0KDUJ4pfx19U3bU0ln69b2 X-Received: by 2002:a17:906:ce2a:: with SMTP id sd10mr33612458ejb.154.1636837806732; Sat, 13 Nov 2021 13:10:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636837806; cv=none; d=google.com; s=arc-20160816; b=ybMkeTB0m1lEaUjXJne0WAV37DszdzMUOfunsDKC5BtOoLnIxuGwc1u7uSwGvr7noA Wv68jqqbLObeN+hoVgFYTRaD/AQrrF16/p3L7JsRua38VmGo81xixl18aSX3G6VAXAPB X9pdl1MfeX27E/jyepYdwv9ObE9w6vqrkwAWxvjk8gdklWivGsHzyyUL3M+ist2ahY9Z PButZM7ZKQShhQw8chTfbCYxTASjspktqxvcI+jVS/7QBpkrVd3vUPKsqs0gGYTDUISs Sw9czmKXtaVZGeykBJXyxY0PPes4jx/uqUOwldr7rIk/dpVEaiXyTpeAGlWhPwz/tlPF f3Cg== 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=GUOCiXcViVp1abZWf0wJeSuoO9rCo1sG4T4Ftnqhx7s=; b=tEtRVtEjFz14D1DQIgSdzUpKGo0TWAgFKz0PMSBV/nZ+TvLiJHQYr089C9YibIA2ki rQqHyLxm0Bx4kCdJc7cRaIrYb6EneZA71180eaWpMed+FL2Tnb5JnumvKPlZYwJTx2Jb VrnsPAu18qhM3pewmYoA2lh5xioowEPwAYOllKoJyZ/tr1D0rKBSLtuHt0zlPctRbEMd NVT+r9uX5hQ4BiDb6yYEsD0sjeq64mWhgUvsxBhL5Sa7Zpdwikm70V+XwLo/E2qyKsnB ieYzAGRpvpzHexbHHMbjuMu4H7vTSXghO7vUE2Vmrp5fWF7twlPKmet8LpRNCMCCk583 4ghw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=XbwWlxpQ; 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 hd37si22548129ejc.569.2021.11.13.13.10.06; Sat, 13 Nov 2021 13:10:06 -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=XbwWlxpQ; 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 59C7368AE47; Sat, 13 Nov 2021 23:09:33 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io1-f54.google.com (mail-io1-f54.google.com [209.85.166.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 84D3F68ADE7 for ; Sat, 13 Nov 2021 23:09:25 +0200 (EET) Received: by mail-io1-f54.google.com with SMTP id e144so15847932iof.3 for ; Sat, 13 Nov 2021 13:09:25 -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=b5EUYLIyQdkZXQkmzcV/X2CNgpsf8ma/TWvAXbvByuE=; b=XbwWlxpQv9HBEmp8AhISlidg5aM7whdlJo5ySDQ0KcBzd6A4HJKtHgkVLHAIi7xIo1 1ktiCeUH3Xnfdw7rZr3EvIIWf3TR9+Z5mCBc9xIcv80Y1tbDCV66/VyE0kS0KJKPAcjP /+n9LPDczwd8KZa3x++1mijrgyHRKPdU0AFNnJzeGF4u8oE3SoP5ciROFfCjmkB2xMt+ /xV+NC7w8UumjrK7aF2EwdTiswxw8GWhsaA1mx1NJPRitMA8L+Bo9ClOe5mjnoB8oVkH kyeDHNKkx4rdIRiOVzB0ZbiaJKOTVUP1mzYGb3ZisM3zUeBOQf7ZQ7Wljks/fFGEtl8m i1ag== 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=b5EUYLIyQdkZXQkmzcV/X2CNgpsf8ma/TWvAXbvByuE=; b=SgH9GPUtNNgg8F/DjLPuXYhBHSy7h6XiUWksDkSpM4jqs/7LGz2rNGQIobmk2zw+lf 84G02nJL4AysRnXPKNlvtd8N2whPDVVlDY/6+UXvmaCS7c/GOOFrzotNdGa7M3EsnIS1 Uh11BHXmUvmCxA8Vvm8oNFr4xF6OgMga1gB6PZ9/yulRiE3R0Z8Em76IQAMVDMMoxRCB wpWFFr8ze4vxWn3gM/sweasgpX51QL7uAX832hKmkkgg4BxCMDO80zM6XuFw80nCmqht PbMxU6QBVdT1JtzutqcCIY2H5QKfdsvDe6uR3uy5fONGuPx1rvyXWwWrMjb366aiDZzH CX6A== X-Gm-Message-State: AOAM530gQaxARDr8Ggr5gP1K07JvRnCfjoBzTdQmUCFKHvKXkUHGGYrX aKajfGmclu8ttjZ4gsRBeFdhkqYBLwN7NBM= X-Received: by 2002:a6b:6802:: with SMTP id d2mr17150555ioc.187.1636837763949; Sat, 13 Nov 2021 13:09:23 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:516:f322:7db9:ae0a]) by smtp.gmail.com with ESMTPSA id j23sm5243896iog.53.2021.11.13.13.09.23 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Nov 2021 13:09:23 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Nov 2021 15:09:05 -0600 Message-Id: <20211113210916.49167-4-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211113210916.49167-1-rcombs@rcombs.me> References: <20211113210916.49167-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 04/15] ffmpeg_videotoolbox: support 4:2:2/4:4:4 formats 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: 2NHjyyUoOhR6 --- fftools/ffmpeg_videotoolbox.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/fftools/ffmpeg_videotoolbox.c b/fftools/ffmpeg_videotoolbox.c index 4ba8618539..6c89fb48d1 100644 --- a/fftools/ffmpeg_videotoolbox.c +++ b/fftools/ffmpeg_videotoolbox.c @@ -65,6 +65,28 @@ static int videotoolbox_retrieve_data(AVCodecContext *s, AVFrame *frame) #if HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE case kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange: case kCVPixelFormatType_420YpCbCr10BiPlanarFullRange: vt->tmp_frame->format = AV_PIX_FMT_P010; break; +#endif +#if HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE + case kCVPixelFormatType_422YpCbCr8BiPlanarVideoRange: + case kCVPixelFormatType_422YpCbCr8BiPlanarFullRange: vt->tmp_frame->format = AV_PIX_FMT_NV16; break; +#endif +#if HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE + case kCVPixelFormatType_422YpCbCr10BiPlanarVideoRange: + case kCVPixelFormatType_422YpCbCr10BiPlanarFullRange: vt->tmp_frame->format = AV_PIX_FMT_NV20; break; +#endif +#if HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE + case kCVPixelFormatType_422YpCbCr16BiPlanarVideoRange: vt->tmp_frame->format = AV_PIX_FMT_P216; break; +#endif +#if HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE + case kCVPixelFormatType_444YpCbCr8BiPlanarVideoRange: + case kCVPixelFormatType_444YpCbCr8BiPlanarFullRange: vt->tmp_frame->format = AV_PIX_FMT_NV24; break; +#endif +#if HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE + case kCVPixelFormatType_444YpCbCr10BiPlanarVideoRange: + case kCVPixelFormatType_444YpCbCr10BiPlanarFullRange: vt->tmp_frame->format = AV_PIX_FMT_P410; break; +#endif +#if HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE + case kCVPixelFormatType_444YpCbCr16BiPlanarVideoRange: vt->tmp_frame->format = AV_PIX_FMT_P416; break; #endif default: av_log(NULL, AV_LOG_ERROR, From patchwork Sat Nov 13 21:09:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 31398 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3678069iob; Sat, 13 Nov 2021 13:10:17 -0800 (PST) X-Google-Smtp-Source: ABdhPJxDfwm3VYAtV/mJpIwXDJpjkErjMqNIgr4i7Kyk/o9cPB5WcDhmCezNn26Mw+n/6GUDx96n X-Received: by 2002:a17:906:688c:: with SMTP id n12mr6536384ejr.480.1636837817582; Sat, 13 Nov 2021 13:10:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636837817; cv=none; d=google.com; s=arc-20160816; b=her3HsKR1E+pQyacQ9gr8aDN08OnCgyc9bPAgZoZjd8bIBP8nIV1ByJ+JsgtTtlLSg +xmcr6Za9PII0x8q5/kpwKqqFTu5d1O3ZAx/nevd/xQsXPSggL5l5hzhsq7eqqtkSzCW ONd3Ymw9i5ZSvbKBAP67KtaGCaC3gMcCNgFStiDWKaiOmRsTm8OsR2PZm9Vs9cQQBvGJ 9JjOHgGWKyDlHiDETWon1tR2yaQ68fF68eUFbqZSgaC30Ocvq0QfSvJoMnA0Jt5LIyOX oaRPTVEcvJuSjtS1VeYP1b4h7K3E6hSJWvDCQmJhRMePAXko5+410WK+Jpph8Jq4GoCn dXVQ== 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=tsTeZRDpqu0DvYAa6Qe5Qk7izKlraQMXPnrqjB0i5NQ=; b=XsOB0cab/2E1r1YPJselc6bC3EcSnF7P0zNOwJgOm+mOl0oybHa4TKccV1UTgbvxCU vF6aXrLVm9LX7A3HqTXs/zDMtQctIDmBC4SaNgD09jaNdrVqPfemKCLSoMs18cbs112L xqasdEDWGsMTdD0qBoswF4yZORnbURe68bW/K8n02cWGAMDLscZJlt8lcHrCkzgNszey VJQ/uByv2N+H+HuqQtCLSoPNO0dDk9tk4dwTDRtNw7PBqf4suheBJZTxN2NsQvnhhInI Kvmn/HKhGkHp3UNxfzWuUcJo+rCooBDn4PSxb3XgUC+m/91JPeTEWcdBjQBH2qYh8jUM q9Bw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=fjuJuMoa; 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 f20si28496817edf.188.2021.11.13.13.10.17; Sat, 13 Nov 2021 13:10:17 -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=fjuJuMoa; 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 544B868AE52; Sat, 13 Nov 2021 23:09:34 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-il1-f174.google.com (mail-il1-f174.google.com [209.85.166.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4D48768AE21 for ; Sat, 13 Nov 2021 23:09:26 +0200 (EET) Received: by mail-il1-f174.google.com with SMTP id x9so12400296ilu.6 for ; Sat, 13 Nov 2021 13:09:26 -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=Xu3pi1E1PRlDGDOLiyud2Vt8KBJHUJOg/wnzKutQrZQ=; b=fjuJuMoaNQhOWw4G9wlBQrmz5pquWBMazhsoZjg43+OB1rmtQCORC8Zvlo1OYSlQLi cQx25r9+3B+41wjbqGlpSU4QdWcrjlorrWfk0CwsOToLI/F9xG7Vud6wmkCGmUkTXs1P ZjzW7vTjsu/zjKeou4ANhZZlgtWsqjBV9CshTY/+Y+8f4ZT1W6R4gL8MRd5U7rHVJDG4 VBumxlTnjlC0CKTgf5NxHXZi4BXfALTdcqnSn6RamUz46E9JEX+JsxlbGeu2Ekuq+Nib uytH+UfNud/OWJ2qt3jfyXz0ReotDLTW1+hO6lyr8ilAKzQSXG6V8PwQUghG45cZYadQ CL5A== 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=Xu3pi1E1PRlDGDOLiyud2Vt8KBJHUJOg/wnzKutQrZQ=; b=NrCLq9yjSV1pnD8AOFZCd3qjv/AKxw7KyIe9Vj+dhce3pH/47vN/R6VjMWluYXMGd7 ivjuLvUktO1dWdRIam33GlMB5HFiqV5PDdUgy5SFIPG+JBjp7nmOlnG3iEK2Qtz6iThA zgq6liB0VDmJrN53FBSMZ7xJO4ToQFqT1fVrAo1zeDLgkpXmISIbQtFN9RJb+IZQQYkY Vma31dzSjiuvk+0AunpxPCraNhmyzNyidAj/rQm5ROGhyXHCY8DBeDxYbjkmBU1GSFWv VwM08wBvv2rO69DwyuTorrtwDlfCXGYqMEnV7zSciY3zYpgvJ5HtedJ/bb12pTvQxOmf u0yA== X-Gm-Message-State: AOAM530uGBs2/Ic3+pcvdPPDtSps9HokZEuNhdKnEUP8NxHvvvlD+6yI TrEkVADqdFFhjXbgCw6g1BNKLmjm/Rv/1hw= X-Received: by 2002:a05:6e02:1848:: with SMTP id b8mr13889790ilv.299.1636837764710; Sat, 13 Nov 2021 13:09:24 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:516:f322:7db9:ae0a]) by smtp.gmail.com with ESMTPSA id j23sm5243896iog.53.2021.11.13.13.09.24 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Nov 2021 13:09:24 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Nov 2021 15:09:06 -0600 Message-Id: <20211113210916.49167-5-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211113210916.49167-1-rcombs@rcombs.me> References: <20211113210916.49167-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 05/15] lavc/videotoolbox: escape 0x00000[0-3]s in avcC PSs 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: 0595e3gjfYuN --- libavcodec/videotoolbox.c | 51 +++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c index 49e726a75f..510b1852ba 100644 --- a/libavcodec/videotoolbox.c +++ b/libavcodec/videotoolbox.c @@ -140,14 +140,49 @@ int ff_videotoolbox_alloc_frame(AVCodecContext *avctx, AVFrame *frame) #define AV_W8(p, v) *(p) = (v) +static int escape_ps(uint8_t* dst, const uint8_t* src, int src_size) +{ + int i; + int size = src_size; + uint8_t* p = dst; + + for (i = 0; i < src_size; i++) { + if (i + 2 < src_size && + src[i] == 0x00 && + src[i + 1] == 0x00 && + src[i + 2] <= 0x03) { + if (dst) { + *p++ = src[i++]; + *p++ = src[i++]; + *p++ = 0x03; + } + size++; + } + if (dst) + *p++ = src[i]; + } + + if (dst) + av_assert0((p - dst) == size); + + return size; +} + CFDataRef ff_videotoolbox_avcc_extradata_create(AVCodecContext *avctx) { VTContext *vtctx = avctx->internal->hwaccel_priv_data; H264Context *h = avctx->priv_data; CFDataRef data = NULL; uint8_t *p; - int vt_extradata_size = 6 + 2 + h->ps.sps->data_size + 3 + h->ps.pps->data_size; - uint8_t *vt_extradata = av_malloc(vt_extradata_size); + int sps_size = escape_ps(NULL, h->ps.sps->data, h->ps.sps->data_size); + int pps_size = escape_ps(NULL, h->ps.pps->data, h->ps.pps->data_size); + int vt_extradata_size; + uint8_t *vt_extradata; + int i; + + vt_extradata_size = 6 + 2 + sps_size + 3 + pps_size; + vt_extradata = av_malloc(vt_extradata_size); + if (!vt_extradata) return NULL; @@ -159,14 +194,14 @@ CFDataRef ff_videotoolbox_avcc_extradata_create(AVCodecContext *avctx) AV_W8(p + 3, h->ps.sps->data[3]); /* level */ AV_W8(p + 4, 0xff); /* 6 bits reserved (111111) + 2 bits nal size length - 3 (11) */ AV_W8(p + 5, 0xe1); /* 3 bits reserved (111) + 5 bits number of sps (00001) */ - AV_WB16(p + 6, h->ps.sps->data_size); - memcpy(p + 8, h->ps.sps->data, h->ps.sps->data_size); - p += 8 + h->ps.sps->data_size; + AV_WB16(p + 6, sps_size); + p += 8; + p += escape_ps(p, h->ps.sps->data, h->ps.sps->data_size); AV_W8(p + 0, 1); /* number of pps */ - AV_WB16(p + 1, h->ps.pps->data_size); - memcpy(p + 3, h->ps.pps->data, h->ps.pps->data_size); + AV_WB16(p + 1, pps_size); + p += 3; + p += escape_ps(p, h->ps.pps->data, h->ps.pps->data_size); - p += 3 + h->ps.pps->data_size; av_assert0(p - vt_extradata == vt_extradata_size); // save sps header (profile/level) used to create decoder session, From patchwork Sat Nov 13 21:09:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 31412 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3678410iob; Sat, 13 Nov 2021 13:10:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJzDQuUbNcKhyZm4Tr2DYQZhpiBEGjEEpR4bo+6Mt7WtfDvvcdtgmilpuQnApL3RAWdCYIUX X-Received: by 2002:a50:99c6:: with SMTP id n6mr34488588edb.171.1636837837718; Sat, 13 Nov 2021 13:10:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636837837; cv=none; d=google.com; s=arc-20160816; b=DVVCAZU/pz1owDwsf3l3evSW2SOLR89bEhio1UFT6UEye1+TvPRVp+ieUA7al5AVjP Gr7NMCR2gtxQdPrkB6iCY7rWx1UfKjypc3L41iJ5rseqvKauhYbmVoWXqr7WxfFjvY5B iL3yppfQbvKVwcCJ3XAMzGlj+F5/LbEVDO+OQVJzIhU0OYtomQKAOC9QPPmnASInAvRv zF9cXeZMoymTR5VcZdWTy+P5BN0rZEngRbSstS2xXolC0u5Fskp3w/ujm4cnqAVmx8P7 wl/JnqY/oG6yxfDsabEvulHc94eHPhCHYNduXG2UB0AoQyqa1eTZNg3ZL4/Zrg6gZnRQ 3uNA== 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=Pf8N4idUbnTP/7uBmmkzHgkuQhE2wymXFQ7d2W2yKC0=; b=DmJZpEqxwBWm5SaJkovycjOl0IaeWK+mHsOhswFh0bLzhXCmEUefqFi7kSee9b8RcF wHKyIeJXeZInaUDX7D6dkAoSjE+4mYBKjSbhFcjY8mOWjCzyOzglbHCDIGLfAVdOrIDk yrNHpkgPcxD6Ohk4J2U5FqZAy9Tk+E//TbEEAFOZ6FBYwHM6wQejzN55WmDa2wjtw4IF pgiMylR76pXiQpF8h6hC2eJcaIsHMzNuHyv1WglCSbw1m0ZEoQY2D8PK+8zw7sxhG2Rv fL9v0hfFn1facZc0ObzIHC3yZufT29ievtQ7IHZWi3myuHImOMEOHOBBV1q3NzM0W0ds ZFdw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=fJ9HPV2e; 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 z22si28521224edd.633.2021.11.13.13.10.37; Sat, 13 Nov 2021 13:10:37 -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=fJ9HPV2e; 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 5048A68AE3C; Sat, 13 Nov 2021 23:09:36 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-il1-f179.google.com (mail-il1-f179.google.com [209.85.166.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 72E5F68AD8B for ; Sat, 13 Nov 2021 23:09:27 +0200 (EET) Received: by mail-il1-f179.google.com with SMTP id m11so12451712ilh.5 for ; Sat, 13 Nov 2021 13:09:27 -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=BNhebRca16Ey44WU/XOdZzsrhO1i0wNlsroXvPgY14g=; b=fJ9HPV2e26/eZSZGzPz05nq8nEskmkyxn/lWdxVqi02E5A2yJaNyd+4+z0n2RSFL4L cmcUzaebybJB+7QeZvK2v7wVyESw77tRoXRVk4n9bP4DejgEAiDVPqtZkl3TGxe6LLDu KU1cDcIaQINeSF5dz7Y3qO1NCjjsbvLxy4JqzN41Jes0CfFD3J7dKpQX1H5mLPZ6bqqN zR+NUU9igdlARM1NHjrBSyw/jNYozBM7QF6WkK48kzqnyQEwitogH6HRqBc3yg5fclYu 8dNcP7hmSUP+iHd+7bqPopq1EctD8g1wzpPiT+V+G9ZU50nom7y0w3hELbUCd42AsqWk vGPA== 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=BNhebRca16Ey44WU/XOdZzsrhO1i0wNlsroXvPgY14g=; b=NQf5fUOqPVP0xkogUD+83cAdw2ivK2H/fkHr2UeVmh7VKU+fuY3aGN0bare4nkTMd3 EJZBbo+57W2vBDb3Gc8U/T32rZnWygrcZHqrQy8GMtbZA1XU/FB+0w2Nl6oTMFgOh1qI nrBFM0m+ahcTCvh1ah3MvgYnuHujkOGHilnmGdT4CaL5KjIxu2zCjRpZ/BpWovL52loD t876XQO8sPC27iMzUqSwphoBx7gmDws8txoVIfgzLdsWaU4WqOSF7u6+aLhtFeCicACq A9IofVnxs5GFleWCwjwnSQVyE8gcYj5SzDnG7CL8B7eqpByyhMH2PlPJyWgqxXL2Du1q Z/kA== X-Gm-Message-State: AOAM533JmJbFTErq4AIzzMIZzM4GHEeM5tJ2na+Wcl0NqiyeJVuDK3eq cPRUuUpvkAsx49jhMmG0MmYBUTlgqhv9WJI= X-Received: by 2002:a05:6e02:180e:: with SMTP id a14mr14975345ilv.313.1636837765844; Sat, 13 Nov 2021 13:09:25 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:516:f322:7db9:ae0a]) by smtp.gmail.com with ESMTPSA id j23sm5243896iog.53.2021.11.13.13.09.24 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Nov 2021 13:09:25 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Nov 2021 15:09:07 -0600 Message-Id: <20211113210916.49167-6-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211113210916.49167-1-rcombs@rcombs.me> References: <20211113210916.49167-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 06/15] lavc/videotoolbox: fix format computation 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: PBo6R5fKCn81 Use sw_pix_fmt instead of pix_fmt (consistent with other hwaccels) --- libavcodec/videotoolbox.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c index 510b1852ba..a5b0777c41 100644 --- a/libavcodec/videotoolbox.c +++ b/libavcodec/videotoolbox.c @@ -1057,7 +1057,7 @@ static int videotoolbox_uninit(AVCodecContext *avctx) } static enum AVPixelFormat videotoolbox_best_pixel_format(AVCodecContext *avctx) { - const AVPixFmtDescriptor *descriptor = av_pix_fmt_desc_get(avctx->pix_fmt); + const AVPixFmtDescriptor *descriptor = av_pix_fmt_desc_get(avctx->sw_pix_fmt); if (!descriptor) return AV_PIX_FMT_NV12; // same as av_videotoolbox_alloc_context() From patchwork Sat Nov 13 21:09:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 31405 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3678712iob; Sat, 13 Nov 2021 13:10:57 -0800 (PST) X-Google-Smtp-Source: ABdhPJxEvBk6S0f7EEUmYMx6MiHKRRpnajSKX0N9fuNSTxF6L57q+tYBQdu3diYwwcxpiBd6VcSl X-Received: by 2002:a17:907:2d21:: with SMTP id gs33mr32685753ejc.549.1636837857656; Sat, 13 Nov 2021 13:10:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636837857; cv=none; d=google.com; s=arc-20160816; b=ge23m3EcpP1eeAsNnLZQIj/QuGhVBEMGg+kSmpsPdV1odMraWi/2cEdwtyRwUuKHM3 K/kZlQ0K7KiaSh4zRe2pXow3hmO/maKPedFUpWIElPAXM6q3Ce9J9t3jOQhEzwPFPKT3 fbdKuf+lyWXW3aojMrqtopt42QsioI49ag2LEfdqWAzducmbwx0IuRFfXUZ/1cAEMshp rFOc4IPEf2t6mTqqZBWUM8Y12pBnOSf+RFUF87n4e0skPf6tet/IojOpgpWZdanJl3I/ vI2q/u0MyGNg2r0/F1Bvhi04rIBd+qvAhHXQYL03JHxl3vKAIx3YAE8X2B6AV/AwPRnx ToeQ== 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=c3tp46BqLGDLGdnPAQ6kD9M4CvNLCa67y3dKPr/JQi4=; b=M1yrdjWWAf49nXQg/IyjV5+uuG/3DwHR9xA6cK0q7X3qOrwsIJWRyYDK8HXEgG3yAP 0SyNIzOh/hL1pmas7L6Gcm2f3Xcmeka4E4x16/GxO/R3kMTKn7ZnwK26pIMELbhNAo6B RqOWmGTX1vF0vGR8M/mkCuJfuap++Njqk4Vi8Rnf2vmYYIRPI1F/pk8JVx0x6jVUe5jD 28WRaxSRLJgeBYsNCsN9m3YUPgIxaWxd7U5VHjK1onf3r4V94O3vaWohzpmoCwaxUE95 wmSnPUrmX7VKLVHbEEJNUJBnH7a+qpoDe4dPU15USNEvJsZGuY3JYLqmjwHrQenCMCFQ iosw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=feGsRB36; 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 sb34si24247183ejc.150.2021.11.13.13.10.57; Sat, 13 Nov 2021 13:10:57 -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=feGsRB36; 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 417F868AE80; Sat, 13 Nov 2021 23:09:38 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-il1-f169.google.com (mail-il1-f169.google.com [209.85.166.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2B33868AE47 for ; Sat, 13 Nov 2021 23:09:28 +0200 (EET) Received: by mail-il1-f169.google.com with SMTP id k1so12430944ilo.7 for ; Sat, 13 Nov 2021 13:09:28 -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=K41UXYlil80BEUpAP0/KE7VyM/1DiBkw0aaLeJOm34s=; b=feGsRB36dORV0FS+jcJZtVqIyjqIa9QL0jE1HjQWXEA05mz+iItmkOQRBqAHNHN4UI ZXwZKFphvvopymcLiTraf0/7bwSVNtZBA/Xd83n7IC1xF+Pql5kOoLETiKHkz9u7Czcg IoodjCywZznFcXQ68PNCLpGPl8FqQkIhYAVTR1s8mAajoamQndimKeuXXnvp+rBoC7Sw Elr+vuV4AwZAYIAHwy2DWcFvMLevQ50o1fxKg2N+4rzRhel8eDjQk0ucKpK0kA3HR3a0 qcfIYP3WoKTZ4/glg5SKm10lGkTHELcS7Hj/ciFVa9IUfBMebg//4e9XDrs9z6ckrnBK TblA== 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=K41UXYlil80BEUpAP0/KE7VyM/1DiBkw0aaLeJOm34s=; b=ZQ+QXakHfb6WcCnVEQTBfBBSn2fUAg57wajRIanli8IxZZenuXGGkbJxFG9TR7Zq+8 bsbSmoYU8coPSHNv2/wSaFtD+I/xND2UpWdok0ooiaBITLAwO7HyEqTmq3q6+HyZzcdt 3e94CdIp0nga2vB5PRnl6i/VkA12JtUnT6H1JzUEPlmEK0RaTYTVbyLgWX+hc/hYjlY1 tTMAXeDKaGDY7IUIDYrRVK7nJCtUWrlC2/yorS1jGbn5kCQFflJOZp39ia8AKpoiLARc n3/obMQtjvUNdM293J13QJrwGGSEzM6o7WPBf3S4MmYXv+i+B/97Dyk+6znEdhP2WP1/ aWmQ== X-Gm-Message-State: AOAM533UBDTDb4jL67fZAXHf/GPx/CXPLCnkKSIPc5DJEyErUFJlHy2D AN7H8xnw56gn6g6PQNh+4sn4SmzGJPbTInE= X-Received: by 2002:a05:6e02:12c2:: with SMTP id i2mr14924102ilm.261.1636837766590; Sat, 13 Nov 2021 13:09:26 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:516:f322:7db9:ae0a]) by smtp.gmail.com with ESMTPSA id j23sm5243896iog.53.2021.11.13.13.09.25 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Nov 2021 13:09:26 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Nov 2021 15:09:08 -0600 Message-Id: <20211113210916.49167-7-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211113210916.49167-1-rcombs@rcombs.me> References: <20211113210916.49167-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 07/15] lavc/videotoolbox: select 4:2:2 and 4:4:4 formats when applicable 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: gNMtuyLZ8dmY --- libavcodec/videotoolbox.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c index a5b0777c41..764021586b 100644 --- a/libavcodec/videotoolbox.c +++ b/libavcodec/videotoolbox.c @@ -1062,9 +1062,35 @@ static enum AVPixelFormat videotoolbox_best_pixel_format(AVCodecContext *avctx) return AV_PIX_FMT_NV12; // same as av_videotoolbox_alloc_context() int depth = descriptor->comp[0].depth; + +#if HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE + if (depth > 10) + return descriptor->log2_chroma_w == 0 ? AV_PIX_FMT_P416 : AV_PIX_FMT_P216; +#endif + +#if HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE + if (descriptor->log2_chroma_w == 0) { +#if HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE + if (depth <= 8) + return AV_PIX_FMT_NV24; +#endif + return AV_PIX_FMT_P410; + } +#endif +#if HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE + if (descriptor->log2_chroma_h == 0) { +#if HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE + if (depth <= 8) + return AV_PIX_FMT_NV16; +#endif + return AV_PIX_FMT_NV20; + } +#endif +#if HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE if (depth > 8) { return AV_PIX_FMT_P010; } +#endif return AV_PIX_FMT_NV12; } From patchwork Sat Nov 13 21:09:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 31402 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3679037iob; Sat, 13 Nov 2021 13:11:17 -0800 (PST) X-Google-Smtp-Source: ABdhPJzL7VcSe0/fJpj/O5Vc0axOB8SfL4oIlmPiqDvf27yjpuAw1Zr2fBBHu0hzQ1bGd1k/R3K2 X-Received: by 2002:a05:6402:4315:: with SMTP id m21mr36333741edc.54.1636837876937; Sat, 13 Nov 2021 13:11:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636837876; cv=none; d=google.com; s=arc-20160816; b=dvRYxpBX5E9GiRQ/83HZujeqeqPhpqXEv4j9pi5XjO1BQiltI0MJQADGBDX3OzkGLb d5OrJl2nXczJNlW0Iw+dRDZMyPbXBPp79c8k6NfevuMUuq3uiyaPuEBqgrJ13GdSDuV6 LVr+H74W9hwQOSsYlcDfgrA9kTWTX7LG8svtqOh1kr6/dVcQkNn4N5I7BMewtyWYRntP DtdDm4/W5FbAZ5Dd3Ed7JLgOF07ozmVXQhAgzRZwaQqdfoDlBWzPD6sLKuC2Hq2xVfpn yuKIwVDSjbLjccyxCVcewJnZoqTWLqJ7WN2C0/sQFp627pNcEK7a1zCjfjvPibZ9y3dL q/2Q== 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=6lVIrkMm6KPrqXeTn+IiiYDr4flZ0ORA+A5kcjYrrGo=; b=f2eG/TLPiXWaDd2jivU+txWietwHeT61DWwP8BXJWN4IdANzD+6eZCqlT+15ShX2vN 8y9KRxmfvcogFPJ7dn46IYc0StRFgOKeapPczBNpM4y7SXet9hufLM4SJ4qTJOzB6g7/ o1PyChoQvvBKPqUAaeNwZaM3wM+dhjejTD4h6F/EqApx7c6wcfYze3rkzomwJ1WXTNw3 YF9jTuPrNg0X1PZkoJsAiHkgWnY8yC7UEiHldnd2722LvAM1e+sB88TO7W/Q7rLrMNy/ ox0tNStSOrI5Y2UFPLChxDwAEgg+/sIbpHnbZlUv9epQAZ/Auz2xlUdSjid7rQTeLhOl C9ug== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=lkl+HZDj; 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 z9si25037791edc.496.2021.11.13.13.11.16; Sat, 13 Nov 2021 13:11:16 -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=lkl+HZDj; 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 32F4268AE96; Sat, 13 Nov 2021 23:09:40 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io1-f42.google.com (mail-io1-f42.google.com [209.85.166.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DFF2E68AE52 for ; Sat, 13 Nov 2021 23:09:28 +0200 (EET) Received: by mail-io1-f42.google.com with SMTP id e144so15848030iof.3 for ; Sat, 13 Nov 2021 13:09:28 -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=fII5PjthrjHamJsAyrtOHkH7y2pej7OdhiTi3QeFUd4=; b=lkl+HZDjsDYWzADakx+NsBgj2EAqehw7I6TIAs1ocX5usoSIZbouiDZGw115XCuHNE 9l+JyzIOM9js8O1oYCl2VFjVsV3Vsy3+qwDUurQIf6AjQIRZfLXSW6LCY38ZZ99sIqg0 Uwdevg2hGkzcCG0e7ShKsRl/nhGAYVrmpWspGeoYInMV12J0g9KlaMVKlHoAQiJBIQdL b+7U13DXarpdFKlA3ZRmnKIqYDVZMXmCUYIRps0qYtDSPKORmDoKOCK+9qe5PbLjv2eZ MW3AAR5cPrVQsFpQ+WrmRwUBGxFnEDNFg7oLro2qkAcuPqBUACr16ImtdcCg8Q4XaRsT a/4w== 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=fII5PjthrjHamJsAyrtOHkH7y2pej7OdhiTi3QeFUd4=; b=3BsjjGbuoNMUOmsc+OesNNpy25kSdYEUWDFsVxZVxcL+6ZHFposdApF+vja/V9CemC 1juXKio9s/jb6uPhPcEJWCyyz/UPZ+OkH+M1Y+4SwELpE2ryenvV1hAaHjlyQuwO5aFc saGnuHBAXeVVcVYxgOOqtIEAiY4ptqPYjGzIdjFvY0FzGvxDKM/kzYiSOVJI1ph2kehZ HkEMYAcOxG9vcf6ty8V7cv2aLLj3FFRe9l6gbaUJhMxcB4l/n0hOXBpEqlPGmvDd3VvF pjVjUKfgT6FSkIeMTXJ9vOfi8LBM0KQu6ZbTZoEVn0m1eT0+JXZDzvOGWXJ4W5fxP8Ox 6g+A== X-Gm-Message-State: AOAM530QfHp8BoITVISB3NIMDKFytiPQyZTSNytBHfBmtE45wtIcEhrQ mSjXcsk3+y4j9JEywNYJxbcM3L2pKiS66zA= X-Received: by 2002:a02:6064:: with SMTP id d36mr20252901jaf.80.1636837767358; Sat, 13 Nov 2021 13:09:27 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:516:f322:7db9:ae0a]) by smtp.gmail.com with ESMTPSA id j23sm5243896iog.53.2021.11.13.13.09.26 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Nov 2021 13:09:26 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Nov 2021 15:09:09 -0600 Message-Id: <20211113210916.49167-8-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211113210916.49167-1-rcombs@rcombs.me> References: <20211113210916.49167-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 08/15] lavc/h264dec: support all color formats in videotoolbox hwaccel 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: JknL+UlkJ5yT --- libavcodec/h264_slice.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c index 89ea16a57f..476a14d485 100644 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@ -798,6 +798,10 @@ static enum AVPixelFormat get_pixel_format(H264Context *h, int force_callback) const enum AVPixelFormat *choices = pix_fmts; int i; +#if CONFIG_H264_VIDEOTOOLBOX_HWACCEL + *fmt++ = AV_PIX_FMT_VIDEOTOOLBOX; +#endif + switch (h->ps.sps->bit_depth_luma) { case 9: if (CHROMA444(h)) { @@ -872,9 +876,6 @@ static enum AVPixelFormat get_pixel_format(H264Context *h, int force_callback) #endif #if CONFIG_H264_VAAPI_HWACCEL *fmt++ = AV_PIX_FMT_VAAPI; -#endif -#if CONFIG_H264_VIDEOTOOLBOX_HWACCEL - *fmt++ = AV_PIX_FMT_VIDEOTOOLBOX; #endif if (h->avctx->codec->pix_fmts) choices = h->avctx->codec->pix_fmts; From patchwork Sat Nov 13 21:09:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 31403 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3679475iob; Sat, 13 Nov 2021 13:11:39 -0800 (PST) X-Google-Smtp-Source: ABdhPJypJf2O98s1LhXY5N3R/7tvunnNbkKUMZ0tEz72jFpxXTwq8jn1H/ys7WyfnAUHKnQklsvf X-Received: by 2002:a05:6402:5156:: with SMTP id n22mr17007466edd.222.1636837899498; Sat, 13 Nov 2021 13:11:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636837899; cv=none; d=google.com; s=arc-20160816; b=o+s3pWcMra0SPGHR5ga7bdVuvjcZvI2nqq+Xp57uV21qM/SVz3xPTnOvDUGe87Jr/s 38qLqR0ClE7u/hTmVr+4qAiKJ7Lq70ZsDuqJZrTImkqlvclF/0fcNa0dKtCbz/jAkFR6 vzxLtzs6RmFJM6lABP92hNv/9Ll0fafn7QarxnJOJdmU8VVmIOI4LLp9tDAxF8ivlsS+ pGuFdyJx0a8aXzgKkaZTMMzrPPljdrQFgC7ILx42nJvSGiHUMC3WpP/tBjGIPq5HLyI1 qDXNzAy48n3/3A5GkB/rNd2HYAFxFvaQAe03S0cJTgCw9pG+UigMqYyWVBB1k0HfiGoP hapg== 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=TeUeZVZsZsX7Cj4EKyWJOSu0We5VvU6yxINJhvffV38=; b=QzMWfg6WEmX9xM4RK+R0iKj6cJ0aRRUQ21tBwhfk48CmOZei0BkicOWUYdMKiFR/NM /iJJUDWMYPN1xWmFhurc6kSFiFzmJTTBnblAqYpx65XITg7HmMLVaH6UWv4WfW7ajFYT YPMdbjhbvJxbwbgBkzgtHlaQ3Mvt8162CgEm+L13d9jr1q8LRxdYk69R7itNU8BcOGps vqxhCqHwR7yVyaHzOTRFmu9KO2z8mdc/s/ELJ8cCVd4owLZCv9bnomQPOs+Xte8lU27F 65+FvvyuFiKDqYT/wVgr8b7fZt9pqf1S1GzqObKRs0q6YWp/UiyY4uViuBmDAW2zL8SK RmvQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=VR79kMZa; 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 js5si24232119ejc.656.2021.11.13.13.11.39; Sat, 13 Nov 2021 13:11:39 -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=VR79kMZa; 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 1F0C468AE9E; Sat, 13 Nov 2021 23:09:42 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-il1-f169.google.com (mail-il1-f169.google.com [209.85.166.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B1E5568AE5B for ; Sat, 13 Nov 2021 23:09:29 +0200 (EET) Received: by mail-il1-f169.google.com with SMTP id k1so12430975ilo.7 for ; Sat, 13 Nov 2021 13:09:29 -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=If/cn0iWWMo1oSL3h2KdtZ1kjrMcwTtM+rnB+I+Ngxw=; b=VR79kMZathmAR4yfwESFWm4F5J+0RMHzJBJJgK+dj3zHOXbpCONBYhNcupaBmCHjX7 Ag4vzmEaYDfDrzj4I0QeQhKHir67UnnS9BB1dl9XpFzDrBY8OdeQooBwW2b7VzF5TgTZ TItGLTIoKl1gwJvNnAYYLAfhi0Qkr82J8IV0pKMfTJhOvQ0JMScuiCpxfWLacbloovUU Zrgqy+7jdE7uozkVx52IxOR17Ts1i/VLf6QrX4vmw6LyLRD6XC4VzP0/iGXAXZqE3w6a 1HNmRuhrlZigjiQ9eDJdaLe3BU9rFMY8aRsMa+ydyyFINcx4t2ht637R3wuXXrXgrGgY xlVA== 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=If/cn0iWWMo1oSL3h2KdtZ1kjrMcwTtM+rnB+I+Ngxw=; b=s0gGjan8S97PVniSCSVM4g9GOlMyKp8kt3/4mzspO6FgYbyW06vu/KnolPOJQCkUIP RU3qlNi1xTQubD5rDUbh9drbRwFSVadg2UyyRq4GVPGGF0SBPEa5KqTF76iHNy4cVgi9 3rYKzdp1anAwe1PZRty6TE1jXmqyxHDQ+HAK6iyfwpYimDQPWSRYafHvNiKxlx22+3Hr niN2+DvPPJDUe1QbSiQ+SaLvhYLnWfA0iSsgnH7UXWqfRep7pl2FyrJVmo+8gTg+nKR0 F9c3VdyCiUUgQqTSE9QyodIvTsXzgdZ6BXLe8PxXA8XVbPmxm/v/sQkYKnwU2mm2nbkQ epSg== X-Gm-Message-State: AOAM5329NdilML275iPCtR9bDgJ4hbs60FtprOJndUiK7HVso4oNuvqB KiqW7hqYAKilJo7WY2mX0fetJo49jXONnwA= X-Received: by 2002:a05:6e02:218b:: with SMTP id j11mr14428811ila.264.1636837768213; Sat, 13 Nov 2021 13:09:28 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:516:f322:7db9:ae0a]) by smtp.gmail.com with ESMTPSA id j23sm5243896iog.53.2021.11.13.13.09.27 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Nov 2021 13:09:27 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Nov 2021 15:09:10 -0600 Message-Id: <20211113210916.49167-9-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211113210916.49167-1-rcombs@rcombs.me> References: <20211113210916.49167-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 09/15] lavc/hevcdec: support all color formats in videotoolbox hwaccel 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: TW5ixqfgCriQ --- libavcodec/hevcdec.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 246ffd7d80..f47e360935 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -401,6 +401,10 @@ static enum AVPixelFormat get_format(HEVCContext *s, const HEVCSPS *sps) CONFIG_HEVC_VDPAU_HWACCEL) enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmt = pix_fmts; +#if CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL + *fmt++ = AV_PIX_FMT_VIDEOTOOLBOX; +#endif + switch (sps->pix_fmt) { case AV_PIX_FMT_YUV420P: case AV_PIX_FMT_YUVJ420P: @@ -419,9 +423,6 @@ static enum AVPixelFormat get_format(HEVCContext *s, const HEVCSPS *sps) #endif #if CONFIG_HEVC_NVDEC_HWACCEL *fmt++ = AV_PIX_FMT_CUDA; -#endif -#if CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL - *fmt++ = AV_PIX_FMT_VIDEOTOOLBOX; #endif break; case AV_PIX_FMT_YUV420P10: @@ -435,9 +436,6 @@ static enum AVPixelFormat get_format(HEVCContext *s, const HEVCSPS *sps) #if CONFIG_HEVC_VAAPI_HWACCEL *fmt++ = AV_PIX_FMT_VAAPI; #endif -#if CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL - *fmt++ = AV_PIX_FMT_VIDEOTOOLBOX; -#endif #if CONFIG_HEVC_VDPAU_HWACCEL *fmt++ = AV_PIX_FMT_VDPAU; #endif From patchwork Sat Nov 13 21:09:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 31411 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3679836iob; Sat, 13 Nov 2021 13:12:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJysA+tawxQJ1Wg1OCd4Kypv1fHbtUYinsS0m2JxU/xrtc6/LifdZjtQ4z0P8EG0OsCh+Gdn X-Received: by 2002:a17:907:d9f:: with SMTP id go31mr34723750ejc.412.1636837923222; Sat, 13 Nov 2021 13:12:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636837923; cv=none; d=google.com; s=arc-20160816; b=Ev8R4DtTtCUI7/GaEBFnFDtmI94meISVErca/3sFHb8qLqvIAUoyOzAli6T+dV+REy Ny+iOj03w+XYLqdH/+kpGGQ1XSTKAvsOVaQTuRPrP2+gaJBAe8ttWgKHGXmesXaiWn1o 30/7VFomUHaVgRVmMmtkIVn6d+4CUZbbNMe9g8/RvB7hGuG2uRTMFnAA9LsLnHxktF5x R76+SyY1Su8tdWtwRG4AevnTsjt4LyWpOXErJwG1aT8BoDwqQdVHZY90Me/CwuXUclaI xin+RTwFyTG15GnXMVS3HEj34hPM2l9qlqZG7v475+dxMdIuCHX9QWcbUMrsLANBEJ1p M+mQ== 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=xeXlrhfnhaA5IVpSfYTEXjQqgrK+0YdQyhFmkWVehY8=; b=LEtGTAWg19DeKbhSwWnVM1KzYq38t1+O/frgTZ9KDqn6xqffM1P+OSbnmAZZCB7Kmn h3sWkZ4nSPHFvYwcDqqdsmk3f7tv7c/9fkm7GOJiSFZBHU6J1ku7ovXKs9I8qbhO59Wf nz2VjTf30l7HQ8ZiE4qNeAtu90P8GcADCdv64nIhO94TmlBIyTcZA09/BgpWLnsb8xMe rXKKX/u0BdSq03aBgKxIoWfVZG8ES59FsCVDoS3c+6g8kRpdI8k7kYkhmXPmCyIEqUoh DOYHCFXELgJoxcb0Uyrlbo+Y/tdjLN4ZHy7bQoNQAJbYMy1dUFWE5w4s4PZsF7dmNiU+ mOYQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=jDppPxSm; 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 da6si7706318edb.67.2021.11.13.13.12.02; Sat, 13 Nov 2021 13:12:03 -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=jDppPxSm; 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 2C12A68AEA9; Sat, 13 Nov 2021 23:09:44 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-il1-f177.google.com (mail-il1-f177.google.com [209.85.166.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 90B3568AE78 for ; Sat, 13 Nov 2021 23:09:30 +0200 (EET) Received: by mail-il1-f177.google.com with SMTP id l19so12476104ilk.0 for ; Sat, 13 Nov 2021 13:09:30 -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=LjdDPARjurln+Oczbb8HHEhcv3F9MHzkkMHZXgDGc1U=; b=jDppPxSm66saBojAMb/b2f106VEQwjRKbrMif60GpIfBgpK48fqL7oBKR5ujLYxQJW RkpOIX5EOXIW/8IadI1wkXhoS1OGAelfquJrmpbJ7Z1Qz46p/4D5FiDtW8ZA15L7zA6j JeeD7L1c4AxAuYx/d0bxRxrldXWjkY5vGooAWf1msx1Q5oaFxshtfJkt5039cyCaAZJ0 t31KtFZmHEhemmoT+EM8AgZASbfGPrTUgUa3nJeSjRn0Tn/JPr9ZPPjDFMMxwioK6Wo3 iDZta7ncs56PqaMXkuNHSQOM/0TISwxGYh3o6qVjpdtUIB6cGitadGzsSOtfFjWsNCw6 y5Fg== 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=LjdDPARjurln+Oczbb8HHEhcv3F9MHzkkMHZXgDGc1U=; b=zDs61oRUwkyd9uLZjVWgsUNNDG3XidtnMeZgoGiJiSTkPX4lAoihkAAhsKVpbmJWLU c5hLoY3yG6NZq03YiOeIhX8f9Ij2zPacb1F/16WmOZkKPD9T8f6dfZz9N82f+/Wo2Pea 15UPxK7czxJ8VAEdlULiwmzvmnzQNSBZy+iyI7aSzDddEaRko6YW6132HJvnGZE+GMIT fuqN+s1LWnbw/9AwMRAo+bQrjHyLbX95wQJ95e5Z8c1w9C37NSBRpkOH2zrPBzStxlcr FLJBG4Bxjrk7+56QmBBFAgH7O8UaAVMRkHmNesz01Q/OqDc4IbonPWwGjsPCT8+GOep5 QpHw== X-Gm-Message-State: AOAM530WwMRtN3M/tvEt9DAVHHHLjyYzN22QwA65VeKzzQh4ZUbR9BXu 0oiRHPKzSwyd7lg+5s4ZR7Jok3QW5bZBP6s= X-Received: by 2002:a92:c261:: with SMTP id h1mr13989978ild.291.1636837768920; Sat, 13 Nov 2021 13:09:28 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:516:f322:7db9:ae0a]) by smtp.gmail.com with ESMTPSA id j23sm5243896iog.53.2021.11.13.13.09.28 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Nov 2021 13:09:28 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Nov 2021 15:09:11 -0600 Message-Id: <20211113210916.49167-10-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211113210916.49167-1-rcombs@rcombs.me> References: <20211113210916.49167-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 10/15] lavc/videotoolbox: expose some functions as lavc-internal 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: Qqb9wqiL7qpc --- libavcodec/videotoolbox.c | 146 ++++++++++++++++++-------------------- libavcodec/vt_internal.h | 10 +++ 2 files changed, 78 insertions(+), 78 deletions(-) diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c index 764021586b..18cc589d2a 100644 --- a/libavcodec/videotoolbox.c +++ b/libavcodec/videotoolbox.c @@ -61,9 +61,9 @@ static void videotoolbox_buffer_release(void *opaque, uint8_t *data) av_free(data); } -static int videotoolbox_buffer_copy(VTContext *vtctx, - const uint8_t *buffer, - uint32_t size) +int ff_videotoolbox_buffer_copy(VTContext *vtctx, + const uint8_t *buffer, + uint32_t size) { void *tmp; @@ -374,7 +374,7 @@ int ff_videotoolbox_h264_start_frame(AVCodecContext *avctx, H264Context *h = avctx->priv_data; if (h->is_avc == 1) { - return videotoolbox_buffer_copy(vtctx, buffer, size); + return ff_videotoolbox_buffer_copy(vtctx, buffer, size); } return 0; @@ -438,18 +438,6 @@ int ff_videotoolbox_h264_decode_slice(AVCodecContext *avctx, return videotoolbox_common_decode_slice(avctx, buffer, size); } -int ff_videotoolbox_uninit(AVCodecContext *avctx) -{ - VTContext *vtctx = avctx->internal->hwaccel_priv_data; - if (vtctx) { - av_freep(&vtctx->bitstream); - if (vtctx->frame) - CVPixelBufferRelease(vtctx->frame); - } - - return 0; -} - #if CONFIG_VIDEOTOOLBOX // Return the AVVideotoolboxContext that matters currently. Where it comes from // depends on the API used. @@ -465,6 +453,43 @@ static AVVideotoolboxContext *videotoolbox_get_context(AVCodecContext *avctx) return avctx->hwaccel_context; } +static void videotoolbox_stop(AVCodecContext *avctx) +{ + AVVideotoolboxContext *videotoolbox = videotoolbox_get_context(avctx); + if (!videotoolbox) + return; + + if (videotoolbox->cm_fmt_desc) { + CFRelease(videotoolbox->cm_fmt_desc); + videotoolbox->cm_fmt_desc = NULL; + } + + if (videotoolbox->session) { + VTDecompressionSessionInvalidate(videotoolbox->session); + CFRelease(videotoolbox->session); + videotoolbox->session = NULL; + } +} + +int ff_videotoolbox_uninit(AVCodecContext *avctx) +{ + VTContext *vtctx = avctx->internal->hwaccel_priv_data; + if (!vtctx) + return 0; + + av_freep(&vtctx->bitstream); + if (vtctx->frame) + CVPixelBufferRelease(vtctx->frame); + + if (vtctx->vt_ctx) + videotoolbox_stop(avctx); + + av_buffer_unref(&vtctx->cached_hw_frames_ctx); + av_freep(&vtctx->vt_ctx); + + return 0; +} + static int videotoolbox_buffer_create(AVCodecContext *avctx, AVFrame *frame) { VTContext *vtctx = avctx->internal->hwaccel_priv_data; @@ -901,24 +926,6 @@ static int videotoolbox_start(AVCodecContext *avctx) } } -static void videotoolbox_stop(AVCodecContext *avctx) -{ - AVVideotoolboxContext *videotoolbox = videotoolbox_get_context(avctx); - if (!videotoolbox) - return; - - if (videotoolbox->cm_fmt_desc) { - CFRelease(videotoolbox->cm_fmt_desc); - videotoolbox->cm_fmt_desc = NULL; - } - - if (videotoolbox->session) { - VTDecompressionSessionInvalidate(videotoolbox->session); - CFRelease(videotoolbox->session); - videotoolbox->session = NULL; - } -} - static const char *videotoolbox_error_string(OSStatus status) { switch (status) { @@ -932,7 +939,7 @@ static const char *videotoolbox_error_string(OSStatus status) return "unknown"; } -static int videotoolbox_common_end_frame(AVCodecContext *avctx, AVFrame *frame) +int ff_videotoolbox_common_end_frame(AVCodecContext *avctx, AVFrame *frame) { OSStatus status; AVVideotoolboxContext *videotoolbox = videotoolbox_get_context(avctx); @@ -971,7 +978,7 @@ static int videotoolbox_h264_end_frame(AVCodecContext *avctx) H264Context *h = avctx->priv_data; AVFrame *frame = h->cur_pic_ptr->f; VTContext *vtctx = avctx->internal->hwaccel_priv_data; - int ret = videotoolbox_common_end_frame(avctx, frame); + int ret = ff_videotoolbox_common_end_frame(avctx, frame); vtctx->bitstream_size = 0; return ret; } @@ -1010,7 +1017,7 @@ static int videotoolbox_hevc_end_frame(AVCodecContext *avctx) h->output_frame->crop_top = 0; h->output_frame->crop_bottom = 0; - int ret = videotoolbox_common_end_frame(avctx, frame); + int ret = ff_videotoolbox_common_end_frame(avctx, frame); vtctx->bitstream_size = 0; return ret; } @@ -1021,7 +1028,7 @@ static int videotoolbox_mpeg_start_frame(AVCodecContext *avctx, { VTContext *vtctx = avctx->internal->hwaccel_priv_data; - return videotoolbox_buffer_copy(vtctx, buffer, size); + return ff_videotoolbox_buffer_copy(vtctx, buffer, size); } static int videotoolbox_mpeg_decode_slice(AVCodecContext *avctx, @@ -1036,24 +1043,7 @@ static int videotoolbox_mpeg_end_frame(AVCodecContext *avctx) MpegEncContext *s = avctx->priv_data; AVFrame *frame = s->current_picture_ptr->f; - return videotoolbox_common_end_frame(avctx, frame); -} - -static int videotoolbox_uninit(AVCodecContext *avctx) -{ - VTContext *vtctx = avctx->internal->hwaccel_priv_data; - if (!vtctx) - return 0; - - ff_videotoolbox_uninit(avctx); - - if (vtctx->vt_ctx) - videotoolbox_stop(avctx); - - av_buffer_unref(&vtctx->cached_hw_frames_ctx); - av_freep(&vtctx->vt_ctx); - - return 0; + return ff_videotoolbox_common_end_frame(avctx, frame); } static enum AVPixelFormat videotoolbox_best_pixel_format(AVCodecContext *avctx) { @@ -1095,7 +1085,7 @@ static enum AVPixelFormat videotoolbox_best_pixel_format(AVCodecContext *avctx) return AV_PIX_FMT_NV12; } -static int videotoolbox_common_init(AVCodecContext *avctx) +int ff_videotoolbox_common_init(AVCodecContext *avctx) { VTContext *vtctx = avctx->internal->hwaccel_priv_data; AVHWFramesContext *hw_frames; @@ -1167,12 +1157,12 @@ static int videotoolbox_common_init(AVCodecContext *avctx) return 0; fail: - videotoolbox_uninit(avctx); + ff_videotoolbox_uninit(avctx); return err; } -static int videotoolbox_frame_params(AVCodecContext *avctx, - AVBufferRef *hw_frames_ctx) +int ff_videotoolbox_frame_params(AVCodecContext *avctx, + AVBufferRef *hw_frames_ctx) { AVHWFramesContext *frames_ctx = (AVHWFramesContext*)hw_frames_ctx->data; @@ -1193,9 +1183,9 @@ const AVHWAccel ff_h263_videotoolbox_hwaccel = { .start_frame = videotoolbox_mpeg_start_frame, .decode_slice = videotoolbox_mpeg_decode_slice, .end_frame = videotoolbox_mpeg_end_frame, - .frame_params = videotoolbox_frame_params, - .init = videotoolbox_common_init, - .uninit = videotoolbox_uninit, + .frame_params = ff_videotoolbox_frame_params, + .init = ff_videotoolbox_common_init, + .uninit = ff_videotoolbox_uninit, .priv_data_size = sizeof(VTContext), }; @@ -1209,9 +1199,9 @@ const AVHWAccel ff_hevc_videotoolbox_hwaccel = { .decode_slice = videotoolbox_hevc_decode_slice, .decode_params = videotoolbox_hevc_decode_params, .end_frame = videotoolbox_hevc_end_frame, - .frame_params = videotoolbox_frame_params, - .init = videotoolbox_common_init, - .uninit = videotoolbox_uninit, + .frame_params = ff_videotoolbox_frame_params, + .init = ff_videotoolbox_common_init, + .uninit = ff_videotoolbox_uninit, .priv_data_size = sizeof(VTContext), }; @@ -1225,9 +1215,9 @@ const AVHWAccel ff_h264_videotoolbox_hwaccel = { .decode_slice = ff_videotoolbox_h264_decode_slice, .decode_params = videotoolbox_h264_decode_params, .end_frame = videotoolbox_h264_end_frame, - .frame_params = videotoolbox_frame_params, - .init = videotoolbox_common_init, - .uninit = videotoolbox_uninit, + .frame_params = ff_videotoolbox_frame_params, + .init = ff_videotoolbox_common_init, + .uninit = ff_videotoolbox_uninit, .priv_data_size = sizeof(VTContext), }; @@ -1240,9 +1230,9 @@ const AVHWAccel ff_mpeg1_videotoolbox_hwaccel = { .start_frame = videotoolbox_mpeg_start_frame, .decode_slice = videotoolbox_mpeg_decode_slice, .end_frame = videotoolbox_mpeg_end_frame, - .frame_params = videotoolbox_frame_params, - .init = videotoolbox_common_init, - .uninit = videotoolbox_uninit, + .frame_params = ff_videotoolbox_frame_params, + .init = ff_videotoolbox_common_init, + .uninit = ff_videotoolbox_uninit, .priv_data_size = sizeof(VTContext), }; @@ -1255,9 +1245,9 @@ const AVHWAccel ff_mpeg2_videotoolbox_hwaccel = { .start_frame = videotoolbox_mpeg_start_frame, .decode_slice = videotoolbox_mpeg_decode_slice, .end_frame = videotoolbox_mpeg_end_frame, - .frame_params = videotoolbox_frame_params, - .init = videotoolbox_common_init, - .uninit = videotoolbox_uninit, + .frame_params = ff_videotoolbox_frame_params, + .init = ff_videotoolbox_common_init, + .uninit = ff_videotoolbox_uninit, .priv_data_size = sizeof(VTContext), }; @@ -1270,9 +1260,9 @@ const AVHWAccel ff_mpeg4_videotoolbox_hwaccel = { .start_frame = videotoolbox_mpeg_start_frame, .decode_slice = videotoolbox_mpeg_decode_slice, .end_frame = videotoolbox_mpeg_end_frame, - .frame_params = videotoolbox_frame_params, - .init = videotoolbox_common_init, - .uninit = videotoolbox_uninit, + .frame_params = ff_videotoolbox_frame_params, + .init = ff_videotoolbox_common_init, + .uninit = ff_videotoolbox_uninit, .priv_data_size = sizeof(VTContext), }; diff --git a/libavcodec/vt_internal.h b/libavcodec/vt_internal.h index fb64735b8c..e2f279d0fc 100644 --- a/libavcodec/vt_internal.h +++ b/libavcodec/vt_internal.h @@ -19,6 +19,9 @@ #ifndef AVCODEC_VT_INTERNAL_H #define AVCODEC_VT_INTERNAL_H +#include "avcodec.h" +#include "videotoolbox.h" + typedef struct VTContext { // The current bitstream buffer. uint8_t *bitstream; @@ -45,6 +48,12 @@ typedef struct VTContext { } VTContext; int ff_videotoolbox_alloc_frame(AVCodecContext *avctx, AVFrame *frame); +int ff_videotoolbox_common_init(AVCodecContext *avctx); +int ff_videotoolbox_frame_params(AVCodecContext *avctx, + AVBufferRef *hw_frames_ctx); +int ff_videotoolbox_buffer_copy(VTContext *vtctx, + const uint8_t *buffer, + uint32_t size); int ff_videotoolbox_uninit(AVCodecContext *avctx); int ff_videotoolbox_h264_start_frame(AVCodecContext *avctx, const uint8_t *buffer, @@ -52,6 +61,7 @@ int ff_videotoolbox_h264_start_frame(AVCodecContext *avctx, int ff_videotoolbox_h264_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size); +int ff_videotoolbox_common_end_frame(AVCodecContext *avctx, AVFrame *frame); CFDataRef ff_videotoolbox_avcc_extradata_create(AVCodecContext *avctx); CFDataRef ff_videotoolbox_hvcc_extradata_create(AVCodecContext *avctx); From patchwork Sat Nov 13 21:09:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 31406 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3678233iob; Sat, 13 Nov 2021 13:10:27 -0800 (PST) X-Google-Smtp-Source: ABdhPJyVTPWTFgWHYDW/CqRcFTx8ZUucU94LncLoP553NR0QsrG0X/xfObfgViaXFVT9LN2G2T2j X-Received: by 2002:a17:906:f95:: with SMTP id q21mr9814175ejj.399.1636837827377; Sat, 13 Nov 2021 13:10:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636837827; cv=none; d=google.com; s=arc-20160816; b=n4EIBFVhx9trAraBeVzympUrkuHNsLlQciGeGBOCQ+Wl1PS67BM4jwX65zOb+A+xei wMNV4yQ2N1fAZ7DQKp6Krpcb/ULgkIbj1nCy1Vfh3k63V1S299pLs1JNigTEVq/OtcJi JfyQrbK1Hh23CQN6o419/oyrARGAd4KMVsuZiGBX9MeULwsKptAJVawPUkgcw0fFg03a epvpULA/uap/RrFApT3gBGHuF/E8EnusILs1LwPd8h3L6lo/CBcBcPp5B8H0/O1OVHCt RcjrBWXHnPy/wcYoQajv6ee93mtUWiznZ+rOUmoGNXEDuT/eghy9vbHXevlo0N6awwf6 HUAQ== 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=A246xF37iN0ZsQZ4jPTO5wVoGRxLYf+z8g2zsDRbcow=; b=BlRYcRuLLEFH+2jb3uqrYVqEl5XCVVcZEkXh1cFSsj+ce4KtuabtYljEG3KHmPlace KlBio6WvASByGyqE4vnY9ApkJBfUYcM2M4eIxz20FjvADOiV25vu5wPFcQBu7W+okaqu A1E0LJzyLeczEGfk0+0HQLD07HH+6l9E07FImoXvNCxR2Qc+mSsIqFe8866Jta5BdPPj c0qbaEc1tli9/P2E9jaazWBKflVvMhhG7ViHNP+wJCtgmuQFymH7GeRF9bG31J1sWJ+X KBXT4csQIfDosDXUssQevy887TBhWxApOdM2pGUNCIyrD9K7xYqZz95KJ1t8f0HggoSD pFYg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=ZQc2zcsd; 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 z22si28519902edd.633.2021.11.13.13.10.27; Sat, 13 Nov 2021 13:10:27 -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=ZQc2zcsd; 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 57D7968AE76; Sat, 13 Nov 2021 23:09:35 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-il1-f182.google.com (mail-il1-f182.google.com [209.85.166.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C0E6668AE34 for ; Sat, 13 Nov 2021 23:09:31 +0200 (EET) Received: by mail-il1-f182.google.com with SMTP id i12so12398459ila.12 for ; Sat, 13 Nov 2021 13:09:31 -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=eIvpV06Iad4dw8ii0vycps8ppScAwtJ4B5JNdSRegJM=; b=ZQc2zcsdaXXJWx56+Ra5z2cMHd3pkYTFCLjPW0iWHwuG2MG0i6K6OLCZ9XJykB7dlH 2PvygI0bmMDeUhiUjm/eryj0D4OgJAojfdyqtNOVZcqpUQ+04L5KpbXhFB6LGIqoU8+d 4Kay5D975/aJLL+gSj+Kt/VZBpYObhPN/+SyVfiFoVLr9Z9lk/RgyuMupHdS7GxIFOXs S51ZAaQThJ/8P6sI7fIcDTc9wprhhSn7D4875EtYJ4lYGdQXhObDPRBJ+B6VdsvVRYbi h7pm05oua5rEZxJQtnQ0jsX6sLHYkV4Q8dQ6WV7GezTl7Pje96c2+/hZuw81kqY6ieor jVAA== 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=eIvpV06Iad4dw8ii0vycps8ppScAwtJ4B5JNdSRegJM=; b=Vj2XeaIYz/dzvAnC8pbWnvsW2JErR1+ja0bU1iCSgS4p1avUYhV/Dbxfds+xvG3z3y 6hgvkh1sqljWjofZCDnWQkIMi+39gUK6dZk0ZU7r+KWhCI/g4+1cxpY2SFzlER5lAfIz MKoa+hMaycPZyb+Piew2LoPKVLz1cJ4yrt6jnfbSazHYpdhexpsr9y+v9V3N7V+RnQo6 TgVFE4FzJAPPr1NQkpgXUXkzaL1CMShVkDjXLrIIn9wNv3BE0a2S6ynbeDGBPVXHTqov wQYEQPyuD6qC6gBHR4OrlEYf7QSULEX/cMM1M/WW+dHPAsXLqBqpiaMJPuvVPloJzW02 sM2Q== X-Gm-Message-State: AOAM5334uUSWWcl5uXg6Ob7B1tbQDkOAY3bbhThW8WtagGfx1x55TkJC vmecWeAGDaB+HEMF6qmwTcJTQjDCzx/gyKw= X-Received: by 2002:a92:d408:: with SMTP id q8mr15587058ilm.158.1636837769884; Sat, 13 Nov 2021 13:09:29 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:516:f322:7db9:ae0a]) by smtp.gmail.com with ESMTPSA id j23sm5243896iog.53.2021.11.13.13.09.28 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Nov 2021 13:09:29 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Nov 2021 15:09:12 -0600 Message-Id: <20211113210916.49167-11-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211113210916.49167-1-rcombs@rcombs.me> References: <20211113210916.49167-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 11/15] lavc/videotoolbox: call VTRegisterSupplementalVideoDecoderIfAvailable 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: 1DoH4oSLdS2G This is required for VP9 to work. --- libavcodec/videotoolbox.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c index 18cc589d2a..0666446dbd 100644 --- a/libavcodec/videotoolbox.c +++ b/libavcodec/videotoolbox.c @@ -32,6 +32,7 @@ #include "h264dec.h" #include "hevcdec.h" #include "mpegvideo.h" +#include #include #ifndef kVTVideoDecoderSpecification_RequireHardwareAcceleratedVideoDecoder @@ -864,6 +865,12 @@ static int videotoolbox_start(AVCodecContext *avctx) break; } +#ifdef __MAC_10_11 + if (__builtin_available(macOS 10.11, *)) { + VTRegisterSupplementalVideoDecoderIfAvailable(videotoolbox->cm_codec_type); + } +#endif + decoder_spec = videotoolbox_decoder_config_create(videotoolbox->cm_codec_type, avctx); if (!decoder_spec) { From patchwork Sat Nov 13 21:09:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 31408 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3678559iob; Sat, 13 Nov 2021 13:10:47 -0800 (PST) X-Google-Smtp-Source: ABdhPJwmitKv+z7BxCMOqJfpuE5sJb/Eq88nGxFAWMHid993LzRq+AQBrX3o4JhMrHxxnplH3gEn X-Received: by 2002:a17:906:5d0b:: with SMTP id g11mr31341436ejt.295.1636837847277; Sat, 13 Nov 2021 13:10:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636837847; cv=none; d=google.com; s=arc-20160816; b=Hc4/sCSYptVnnLf2Xg68QlEceWHGx3R7e/qDk8Ii//d2WiGQaFGSyH1UOVUpRIe78x j8hB7fvTALlFBucp6AypeYiTS/QwTnVt7XiI0mtVTm4cHp/z4HSVzmhOllRVX5ixwa5D EEeIqJiIGd/oR00GT0uUimnsouFCAl0Xhn2S20nAP7lXgyQDPGyZH8qI2ZCgIeTXxgsS dRYvxTW5skBCWr5icLuExkE97CYByPQHOpIMCXOYauEZL9sfDg/BJEPxNHbRpShzOf9W vXmgEKrY2LnqN+eCmJ7K0nV4LNVr9sxExgIhiE9qxWe/X2Bl7Sjrvoijach8LklmNVQW PtPQ== 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=LVEs8mEJgtiG2DgqzwLekAc+ZqY4e4grjJmiHs5u/U4=; b=SjAkHb/ZPDkO/sD2SQc4gTlfmEBvd6LBheEcVxfDWT/epMF21PfHKq6BpLrROdMRFm zqN0eoJD3DEtXCpyVexK8BbMrIYofDbBrVUm6Qn6bWwgTZ6ZdhZWZZpoCNpUPf1yYeS7 0Gymf19X95o7A2OZGsdjySpAKrWcVEoFTWQSDUmWISO0uiSC5dB3PNHFX1oSymeNBeOX 4wtPuXLXsUb6lMYCqR3kSTO1mvUBWc9f4l6420uA4w8+QwY6uezgi8gmGjMRNod83IOX irzo0H3asAFRUQlM6Qwk7EY6CcMtYlybpMKRJ8dAhmOOrfoo5o9pbPEQZCyUyrYatuLq +gRw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=PmOXn4NF; 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 dp7si24293883ejc.755.2021.11.13.13.10.46; Sat, 13 Nov 2021 13:10:47 -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=PmOXn4NF; 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 43FC268AE4B; Sat, 13 Nov 2021 23:09:37 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-il1-f176.google.com (mail-il1-f176.google.com [209.85.166.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BA64168AE42 for ; Sat, 13 Nov 2021 23:09:32 +0200 (EET) Received: by mail-il1-f176.google.com with SMTP id k1so12431011ilo.7 for ; Sat, 13 Nov 2021 13:09:32 -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=B4oMpUujpqWZNoBl3PvzPR8lWGuG8LoR44X5xwo6Rls=; b=PmOXn4NFDZPNugDxdq1ZJM9rvwDE7hc2GQ8UdV4gdqqNWggJZEf+DDyKnW90LlwvE8 trY+OhOkGxO3VUJ6VGQluRzzTJLN+nWeTRVq3PGh8rkSfIIRDqQarDudQ9KnJqESJM3w Vdz2sYJPBMkCtMN4oZ+59Oz+DkOEkc+uqQ2Xt/YurTlvQQAFBenSh6+0cuxbw4LHp5LV fAgbeOqWpgkza7uixzEPzy8PJkjCgzJ5KAu9xX83RJrdkf0yPIBBzG2+7zP32HjhGo2s yVhy4JgnP/4DGqdhZm1Gxarp+ZvVPZBE/N7CIz3UJ6NLTCIU+PkNBeHEDtbvPYaoUsK6 snkg== 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=B4oMpUujpqWZNoBl3PvzPR8lWGuG8LoR44X5xwo6Rls=; b=lZEbpB4AiEVxtAeHj2u4Xlk5V7ZPKtcjolOHwJk5dzy+ysxfkGtb7La+o4oXdLvnda kUa0pB0k99IDXei+0GSGVPBfpHsANz56DzCnYjUMSBt1M9tJMGicDQ2EOasviYaOn7Zh po9m9K949J/PvXyDurz8A+TJmyHtuc9sNm0bByCljqEC6yF7EtCR6gb5ohprFXx1sFUh wMEmnnlQHfEZlL0WVQ3SIpAa5coH+p156+VeckqpLUrtQ3RrDfkXDdG2fLE31zbzabOA 9lTzeVHFMHEivP44O2B3y1CiWxMQeXlvMC2dLI1GtnwowD7FvMd0dGAIH1Up+YTyeqP3 5KBw== X-Gm-Message-State: AOAM531di+RdRVxPKOuVBoWx3UlPtoQQLbSD6k/CVuDkvHZNWd0K4tb1 Jm5vLR5oEe4RbzN20WZGAD9fjaUVYqhsUKs= X-Received: by 2002:a05:6e02:20e4:: with SMTP id q4mr14508177ilv.71.1636837770749; Sat, 13 Nov 2021 13:09:30 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:516:f322:7db9:ae0a]) by smtp.gmail.com with ESMTPSA id j23sm5243896iog.53.2021.11.13.13.09.29 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Nov 2021 13:09:30 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Nov 2021 15:09:13 -0600 Message-Id: <20211113210916.49167-12-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211113210916.49167-1-rcombs@rcombs.me> References: <20211113210916.49167-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 12/15] lavc/videotoolbox: add VP9 hardware acceleration 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: 4HFOvTqjzCme On M1 Max, this supports profiles 0 and 2, but not 1 and 3. --- configure | 4 + libavcodec/Makefile | 1 + libavcodec/hwaccels.h | 1 + libavcodec/videotoolbox.c | 12 +++ libavcodec/videotoolbox_vp9.c | 140 ++++++++++++++++++++++++++++++++++ libavcodec/vp9.c | 9 ++- libavcodec/vt_internal.h | 1 + 7 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 libavcodec/videotoolbox_vp9.c diff --git a/configure b/configure index 97c0133f8c..2c6dd59e62 100755 --- a/configure +++ b/configure @@ -2326,6 +2326,7 @@ TOOLCHAIN_FEATURES=" TYPES_LIST=" kCMVideoCodecType_HEVC kCMVideoCodecType_HEVCWithAlpha + kCMVideoCodecType_VP9 kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange kCVPixelFormatType_422YpCbCr8BiPlanarVideoRange kCVPixelFormatType_422YpCbCr10BiPlanarVideoRange @@ -3081,6 +3082,8 @@ vp9_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferVP9_bit_depth" vp9_vaapi_hwaccel_select="vp9_decoder" vp9_vdpau_hwaccel_deps="vdpau VdpPictureInfoVP9" vp9_vdpau_hwaccel_select="vp9_decoder" +vp9_videotoolbox_hwaccel_deps="videotoolbox" +vp9_videotoolbox_hwaccel_select="vp9_decoder" wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel" wmv3_d3d11va2_hwaccel_select="vc1_d3d11va2_hwaccel" wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel" @@ -6282,6 +6285,7 @@ enabled videotoolbox && { check_lib coreservices CoreServices/CoreServices.h UTGetOSTypeFromString "-framework CoreServices" check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVC "-framework CoreMedia" check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVCWithAlpha "-framework CoreMedia" + check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_VP9 "-framework CoreMedia" check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange "-framework CoreVideo" check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_422YpCbCr8BiPlanarVideoRange "-framework CoreVideo" check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_422YpCbCr10BiPlanarVideoRange "-framework CoreVideo" diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 14fbd2ecbc..32b35ebe75 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -975,6 +975,7 @@ OBJS-$(CONFIG_VP9_DXVA2_HWACCEL) += dxva2_vp9.o OBJS-$(CONFIG_VP9_NVDEC_HWACCEL) += nvdec_vp9.o OBJS-$(CONFIG_VP9_VAAPI_HWACCEL) += vaapi_vp9.o OBJS-$(CONFIG_VP9_VDPAU_HWACCEL) += vdpau_vp9.o +OBJS-$(CONFIG_VP9_VIDEOTOOLBOX_HWACCEL) += videotoolbox_vp9.o OBJS-$(CONFIG_VP8_QSV_HWACCEL) += qsvdec.o # libavformat dependencies diff --git a/libavcodec/hwaccels.h b/libavcodec/hwaccels.h index 8e54cf73f9..65e778f3e4 100644 --- a/libavcodec/hwaccels.h +++ b/libavcodec/hwaccels.h @@ -74,6 +74,7 @@ extern const AVHWAccel ff_vp9_dxva2_hwaccel; extern const AVHWAccel ff_vp9_nvdec_hwaccel; extern const AVHWAccel ff_vp9_vaapi_hwaccel; extern const AVHWAccel ff_vp9_vdpau_hwaccel; +extern const AVHWAccel ff_vp9_videotoolbox_hwaccel; extern const AVHWAccel ff_wmv3_d3d11va_hwaccel; extern const AVHWAccel ff_wmv3_d3d11va2_hwaccel; extern const AVHWAccel ff_wmv3_dxva2_hwaccel; diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c index 0666446dbd..2e9af2ab93 100644 --- a/libavcodec/videotoolbox.c +++ b/libavcodec/videotoolbox.c @@ -46,6 +46,10 @@ enum { kCMVideoCodecType_HEVC = 'hvc1' }; #endif +#if !HAVE_KCMVIDEOCODECTYPE_VP9 +enum { kCMVideoCodecType_VP9 = 'vp09' }; +#endif + #define VIDEOTOOLBOX_ESDS_EXTRADATA_PADDING 12 typedef struct VTHWFrame { @@ -814,6 +818,11 @@ static CFDictionaryRef videotoolbox_decoder_config_create(CMVideoCodecType codec if (data) CFDictionarySetValue(avc_info, CFSTR("hvcC"), data); break; + case kCMVideoCodecType_VP9 : + data = ff_videotoolbox_vpcc_extradata_create(avctx); + if (data) + CFDictionarySetValue(avc_info, CFSTR("vpcC"), data); + break; default: break; } @@ -861,6 +870,9 @@ static int videotoolbox_start(AVCodecContext *avctx) case AV_CODEC_ID_MPEG4 : videotoolbox->cm_codec_type = kCMVideoCodecType_MPEG4Video; break; + case AV_CODEC_ID_VP9 : + videotoolbox->cm_codec_type = kCMVideoCodecType_VP9; + break; default : break; } diff --git a/libavcodec/videotoolbox_vp9.c b/libavcodec/videotoolbox_vp9.c new file mode 100644 index 0000000000..1b6d08f00b --- /dev/null +++ b/libavcodec/videotoolbox_vp9.c @@ -0,0 +1,140 @@ +/* + * Videotoolbox hardware acceleration for VP9 + * + * copyright (c) 2021 rcombs + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "config.h" +#include "videotoolbox.h" +#include "libavutil/hwcontext_videotoolbox.h" +#include "vt_internal.h" +#include "libavutil/avutil.h" +#include "libavutil/frame.h" +#include "libavutil/hwcontext.h" +#include "libavutil/intreadwrite.h" +#include "libavutil/pixdesc.h" +#include "decode.h" +#include "internal.h" +#include "vp9shared.h" + +enum VPX_CHROMA_SUBSAMPLING +{ + VPX_SUBSAMPLING_420_VERTICAL = 0, + VPX_SUBSAMPLING_420_COLLOCATED_WITH_LUMA = 1, + VPX_SUBSAMPLING_422 = 2, + VPX_SUBSAMPLING_444 = 3, +}; + +static int get_vpx_chroma_subsampling(enum AVPixelFormat pixel_format, + enum AVChromaLocation chroma_location) +{ + int chroma_w, chroma_h; + if (av_pix_fmt_get_chroma_sub_sample(pixel_format, &chroma_w, &chroma_h) == 0) { + if (chroma_w == 1 && chroma_h == 1) { + return (chroma_location == AVCHROMA_LOC_LEFT) + ? VPX_SUBSAMPLING_420_VERTICAL + : VPX_SUBSAMPLING_420_COLLOCATED_WITH_LUMA; + } else if (chroma_w == 1 && chroma_h == 0) { + return VPX_SUBSAMPLING_422; + } else if (chroma_w == 0 && chroma_h == 0) { + return VPX_SUBSAMPLING_444; + } + } + return -1; +} + +CFDataRef ff_videotoolbox_vpcc_extradata_create(AVCodecContext *avctx) +{ + const VP9SharedContext *h = avctx->priv_data; + CFDataRef data = NULL; + uint8_t *p; + int vt_extradata_size; + uint8_t *vt_extradata; + int subsampling = get_vpx_chroma_subsampling(avctx->sw_pix_fmt, avctx->chroma_sample_location); + + vt_extradata_size = 1 + 3 + 6 + 2; + vt_extradata = av_malloc(vt_extradata_size); + + if (subsampling < 0) + return NULL; + + if (!vt_extradata) + return NULL; + + p = vt_extradata; + + *p++ = 1; /* version */ + AV_WB24(p + 1, 0); /* flags */ + p += 3; + + *p++ = h->h.profile; + *p++ = avctx->level; + *p++ = (h->h.bpp << 4) | (subsampling << 1) | (avctx->color_range == AVCOL_RANGE_JPEG); + *p++ = avctx->color_primaries; + *p++ = avctx->color_trc; + *p++ = avctx->colorspace; + + AV_WB16(p + 0, 0); + p += 2; + + av_assert0(p - vt_extradata == vt_extradata_size); + + data = CFDataCreate(kCFAllocatorDefault, vt_extradata, vt_extradata_size); + av_free(vt_extradata); + return data; +} + +static int videotoolbox_vp9_start_frame(AVCodecContext *avctx, + const uint8_t *buffer, + uint32_t size) +{ + return 0; +} + +static int videotoolbox_vp9_decode_slice(AVCodecContext *avctx, + const uint8_t *buffer, + uint32_t size) +{ + VTContext *vtctx = avctx->internal->hwaccel_priv_data; + + return ff_videotoolbox_buffer_copy(vtctx, buffer, size); +} + +static int videotoolbox_vp9_end_frame(AVCodecContext *avctx) +{ + const VP9SharedContext *h = avctx->priv_data; + AVFrame *frame = h->frames[CUR_FRAME].tf.f; + + return ff_videotoolbox_common_end_frame(avctx, frame); +} + +const AVHWAccel ff_vp9_videotoolbox_hwaccel = { + .name = "vp9_videotoolbox", + .type = AVMEDIA_TYPE_VIDEO, + .id = AV_CODEC_ID_VP9, + .pix_fmt = AV_PIX_FMT_VIDEOTOOLBOX, + .alloc_frame = ff_videotoolbox_alloc_frame, + .start_frame = videotoolbox_vp9_start_frame, + .decode_slice = videotoolbox_vp9_decode_slice, + .end_frame = videotoolbox_vp9_end_frame, + .frame_params = ff_videotoolbox_frame_params, + .init = ff_videotoolbox_common_init, + .uninit = ff_videotoolbox_uninit, + .priv_data_size = sizeof(VTContext), +}; diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c index 8317ac6bd8..24841c5b9f 100644 --- a/libavcodec/vp9.c +++ b/libavcodec/vp9.c @@ -181,7 +181,8 @@ static int update_size(AVCodecContext *avctx, int w, int h) CONFIG_VP9_D3D11VA_HWACCEL * 2 + \ CONFIG_VP9_NVDEC_HWACCEL + \ CONFIG_VP9_VAAPI_HWACCEL + \ - CONFIG_VP9_VDPAU_HWACCEL) + CONFIG_VP9_VDPAU_HWACCEL + \ + CONFIG_VP9_VIDEOTOOLBOX_HWACCEL) enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmtp = pix_fmts; VP9Context *s = avctx->priv_data; uint8_t *p; @@ -212,6 +213,9 @@ static int update_size(AVCodecContext *avctx, int w, int h) #endif #if CONFIG_VP9_VDPAU_HWACCEL *fmtp++ = AV_PIX_FMT_VDPAU; +#endif +#if CONFIG_VP9_VIDEOTOOLBOX_HWACCEL + *fmtp++ = AV_PIX_FMT_VIDEOTOOLBOX; #endif break; case AV_PIX_FMT_YUV420P12: @@ -1893,6 +1897,9 @@ const AVCodec ff_vp9_decoder = { #endif #if CONFIG_VP9_VDPAU_HWACCEL HWACCEL_VDPAU(vp9), +#endif +#if CONFIG_VP9_VIDEOTOOLBOX_HWACCEL + HWACCEL_VIDEOTOOLBOX(vp9), #endif NULL }, diff --git a/libavcodec/vt_internal.h b/libavcodec/vt_internal.h index e2f279d0fc..54a11fd1b5 100644 --- a/libavcodec/vt_internal.h +++ b/libavcodec/vt_internal.h @@ -64,5 +64,6 @@ int ff_videotoolbox_h264_decode_slice(AVCodecContext *avctx, int ff_videotoolbox_common_end_frame(AVCodecContext *avctx, AVFrame *frame); CFDataRef ff_videotoolbox_avcc_extradata_create(AVCodecContext *avctx); CFDataRef ff_videotoolbox_hvcc_extradata_create(AVCodecContext *avctx); +CFDataRef ff_videotoolbox_vpcc_extradata_create(AVCodecContext *avctx); #endif /* AVCODEC_VT_INTERNAL_H */ From patchwork Sat Nov 13 21:09:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 31407 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3678878iob; Sat, 13 Nov 2021 13:11:07 -0800 (PST) X-Google-Smtp-Source: ABdhPJySPe1vGRhI3RcRChN+D0q7hdJuGW6Nb33Ne1GCQeL/nqNizJmeO6vp0B8b7kioPrWknJAM X-Received: by 2002:a17:906:2606:: with SMTP id h6mr33194807ejc.301.1636837867063; Sat, 13 Nov 2021 13:11:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636837867; cv=none; d=google.com; s=arc-20160816; b=JzQJfPRc0nns+nyrJjVsSO5urDyutqaV4nHPBbl74VU8Z1OstPsbIYkavizrgjAJtv UqobuJEOj2S46vq2X++DmWC6oU/0AZ66IA+VVg3ML3G3fZ93+r5lL8POshmYqNHYGnjv yVUEJ6sUnlcYrZBNO4Houl8k4Wv3MsLFf5lh8iNWHB0TQMWYx+Z7Jre49ap6QbhfeoBd FYF3eIWdBWPUt9Z+/kwpspfv//PfV7u2Tka5BoMT5dzbSgy0ID+QytWBfxV8NVOa4g5P 5cixfWQN0e4wu/ZsSDaXcdCu9PhWkzHk6aiPc+IhW3c65YbdxatA0+ChD38KcCOTdfEf lppg== 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=WWF7iR97e+5ccouzi4jvN4YlPXA8jvhRlVWv24psFqs=; b=hGIi7V4FlfEyMz/tHd/5xjDLjKsqSB3/Cfa828xHB1QF6p/OoMSYKkSBKQneG/hofS /pzP4u5UjmgStHmB8ekRmx7VPBdyU5qlUhKGb+XDLWHi7kimhxPRINzvHx41BYxVoeWH HV2mS52rfiRdKuIjsMk2IK/4Hi8wtA24k1z+pVKl8VK0s3oaABWc0pWQXdtQqzd5x97R ediPo0o+eo3iVCed5vR7Qs3wHZnBdQQyhA1WqJ8HtcdqzPuZbQ4JDaQnw9HmlzEgdMYA vuCVY5T59YKkP2/EC1WEWceFyqoNRHX2Ug1eyybl9APS9rRn3omins+DcDnEPKHIkacb SvlA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=n1p8H5pN; 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 b7si25801951edd.564.2021.11.13.13.11.06; Sat, 13 Nov 2021 13:11:07 -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=n1p8H5pN; 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 32A8068AE83; Sat, 13 Nov 2021 23:09:39 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io1-f46.google.com (mail-io1-f46.google.com [209.85.166.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BBB2E68AE52 for ; Sat, 13 Nov 2021 23:09:33 +0200 (EET) Received: by mail-io1-f46.google.com with SMTP id r8so15850783iog.7 for ; Sat, 13 Nov 2021 13:09:33 -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=Y2W6BqC9rCn6ZlzNj2ZNi3Ruc5yRgha0zHmw92lzDM8=; b=n1p8H5pN+3GHmZrw7mpmaMtwiza0r+hyrFyoOXBtDZmmnfD7yfbZ3SAgM+nMc3JcOd YRE9BrKk9759Vi0Vw4T+BsP/Hs9AB3O+xa0kVF+v0lT6BpBCTyzdvKTpUwrqsKYq5mUW CqHJKfH5ruZpr2u1YQlnYF/TNU0xB/X77iHxQtWRGZhti/i114zAvCi+735ho8QZ39Ds KW8tn9VgovJ14c3jtQBGgsMtD+6ruEdMx4uzwE/QP2XraJ3e29Ld3BU6yvfneMdQlea4 3xr4g7N29ZYiPbm+WvWMv7hPoWuiIGYiBNMvQUCP6KAfSNouiWD9O0Y3YcpqNKgzmqLz CM4Q== 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=Y2W6BqC9rCn6ZlzNj2ZNi3Ruc5yRgha0zHmw92lzDM8=; b=u1upuOhQyIGe0z9MM6xNJ6iO8xDw6OB15BKvOMmHnRcrUN/IAefK2GINrU3NtnU/qo pP2cLqtoTtslPwaOlYV6Lo5Cu67gVW+u/uO+YBL3rjNTtY0Jf5n8AWeoPZSgkuUXuu03 mLC4Q+e9sB1/0va+V6sqo0ydIl88OGafMKxqDID0P5sp+o58/m8jgLf6vik5/recNFL/ YT/b7geRtolQy4BCljv0JarVsZ/PqdSRAO8FXf9Wo8d+F8vjP4BJKOf2cgVGbRqdr+lb uuP0Kd2psrMkJRUlHVfYL08nO8Z8a3YRcpjHlzWD/Jds+U3nXDb6Is2l5UFJzb+X5N8d 4Riw== X-Gm-Message-State: AOAM532Aqsd6VFQSLXvFWzmSuQXI4y9DeGLAYr2VcRNXG5FaB9PFstJk oMAFrLXxbwVZ5Xv1JupX12c2g5St+fk9SMs= X-Received: by 2002:a05:6638:2684:: with SMTP id o4mr11269413jat.70.1636837771707; Sat, 13 Nov 2021 13:09:31 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:516:f322:7db9:ae0a]) by smtp.gmail.com with ESMTPSA id j23sm5243896iog.53.2021.11.13.13.09.30 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Nov 2021 13:09:31 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Nov 2021 15:09:14 -0600 Message-Id: <20211113210916.49167-13-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211113210916.49167-1-rcombs@rcombs.me> References: <20211113210916.49167-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 13/15] videotoolbox: add alpha support 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: hiKLEiT4n64B --- fftools/ffmpeg_videotoolbox.c | 1 + libavcodec/videotoolbox.c | 3 +++ libavutil/hwcontext_videotoolbox.c | 2 ++ 3 files changed, 6 insertions(+) diff --git a/fftools/ffmpeg_videotoolbox.c b/fftools/ffmpeg_videotoolbox.c index 6c89fb48d1..66eaa572c8 100644 --- a/fftools/ffmpeg_videotoolbox.c +++ b/fftools/ffmpeg_videotoolbox.c @@ -88,6 +88,7 @@ static int videotoolbox_retrieve_data(AVCodecContext *s, AVFrame *frame) #if HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE case kCVPixelFormatType_444YpCbCr16BiPlanarVideoRange: vt->tmp_frame->format = AV_PIX_FMT_P416; break; #endif + case kCVPixelFormatType_4444AYpCbCr16: vt->tmp_frame->format = AV_PIX_FMT_AYUV64; break; default: av_log(NULL, AV_LOG_ERROR, "%s: Unsupported pixel format: %s\n", diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c index 2e9af2ab93..9ca84e873d 100644 --- a/libavcodec/videotoolbox.c +++ b/libavcodec/videotoolbox.c @@ -1072,6 +1072,9 @@ static enum AVPixelFormat videotoolbox_best_pixel_format(AVCodecContext *avctx) int depth = descriptor->comp[0].depth; + if (descriptor->flags & AV_PIX_FMT_FLAG_ALPHA) + return AV_PIX_FMT_AYUV64; + #if HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE if (depth > 10) return descriptor->log2_chroma_w == 0 ? AV_PIX_FMT_P416 : AV_PIX_FMT_P216; diff --git a/libavutil/hwcontext_videotoolbox.c b/libavutil/hwcontext_videotoolbox.c index 0a6c9ecfb0..7a9dbba7dd 100644 --- a/libavutil/hwcontext_videotoolbox.c +++ b/libavutil/hwcontext_videotoolbox.c @@ -48,6 +48,7 @@ static const struct { #ifdef kCFCoreFoundationVersionNumber10_7 { kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange, false, AV_PIX_FMT_NV12 }, { kCVPixelFormatType_420YpCbCr8BiPlanarFullRange, true, AV_PIX_FMT_NV12 }, + { kCVPixelFormatType_4444AYpCbCr16, false, AV_PIX_FMT_AYUV64 }, #endif #if HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE { kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange, false, AV_PIX_FMT_P010 }, @@ -80,6 +81,7 @@ static const struct { static const enum AVPixelFormat supported_formats[] = { #ifdef kCFCoreFoundationVersionNumber10_7 AV_PIX_FMT_NV12, + AV_PIX_FMT_AYUV64, #endif AV_PIX_FMT_YUV420P, AV_PIX_FMT_UYVY422, From patchwork Sat Nov 13 21:09:15 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 31404 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3679259iob; Sat, 13 Nov 2021 13:11:28 -0800 (PST) X-Google-Smtp-Source: ABdhPJx/68yT2iys+k0k5hZOtPOKV/XVZbiyz02JP7P/9L/pjlH3WOExd4p7mUpmusc7wkbPyc6g X-Received: by 2002:a17:907:7d94:: with SMTP id oz20mr34658849ejc.410.1636837888141; Sat, 13 Nov 2021 13:11:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636837888; cv=none; d=google.com; s=arc-20160816; b=E/Z9KhT9YD9ZjcwOIGyMs+L5YdROQqgQ7v1AR1qFRV4doppivgX+V/QCBYf5kBKMd7 1iXDEw0aMlsvvLDBMLbYO5lkHunX6DYGVMAKbnblcP6M7oRpGezY4+ABUuW0M5wKjpWo lSMHIRd1i5i6goF7q7Od+QMf6gZ80mCZ8BcOWZgYfIM4ECMj1R6Q77J94NO06hZXzHV2 YiHv4aWFgV+GXiiE80p50LAuwdVxc1u2gk73dqwWm58V6bQJtFkoHWZf6ElOMzVLk8J8 5aHhBK6hXoB2WL59glbPuzSy52GRE+uH1ap3F00a2lUGvLNkiC5ikq/aLYNLTCiTasvb Lt7A== 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=pEgnrnkKFRlF1NlpJGDuKRViWF0rIzbrbZElJrPDbWk=; b=SsTs1IkaRKrZQ5f/w1GajpVmaEMRCMKl2Ug1/vpWmuXx0gFPS3mFIE1Fr2IJkDtzO1 1lhC6Zn0PPkZNFeQsjDyWcpXmTTJ1bYmiWk/xwe6KAMzWJEb3HXAjQfArZWXb8UmdJG/ /4RyF86U77NrWmctWiHsiNPwRwcrevdv8+SvO4SYy9pgB/huMf9AULp3YKJl4Aw3KG9X 7ZDD1VqHcbLuAeZKCfFw6J+6+BwiG7gKKDv/AadWbtViU58EPGkguyjYrUjiefAHeIOk dcjk4i3mERvWm4aQeAa5CP3SU2nR9myH+oyTGho+85KZSgyuvT84TlBhY1JIMVwLu+Al mvvQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b="ghEL7/he"; 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 p15si22347104edj.97.2021.11.13.13.11.27; Sat, 13 Nov 2021 13:11:28 -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="ghEL7/he"; 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 1A3B368ACAB; Sat, 13 Nov 2021 23:09:41 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-il1-f174.google.com (mail-il1-f174.google.com [209.85.166.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2BF6E68AE52 for ; Sat, 13 Nov 2021 23:09:34 +0200 (EET) Received: by mail-il1-f174.google.com with SMTP id s15so12409313ild.9 for ; Sat, 13 Nov 2021 13:09:34 -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=zz+HQHPSZK+EjF/L2hCcqBg66cCuZTNzMLSYw+djs8Y=; b=ghEL7/hen7ZY9sBAB2ahcUy4SNWucrtsJ5YfcF3KxKXQT+3MOyfTdSx259IUr3FqN2 TB1JjZfD4OA2rHNtLfFBw8k+RPW2pMv8yhHbh0pfpCi4nkmHFPZ+5cTZYfQcsHB9++vo 1WaGRLmKdmp5/qzaYx3/TUQ7OA3AqnDp5OnTm1MPOavPavVuwMWIromgs90yjukwVZ60 mAHsdi75SqVPX01LQxZO7/Xsa+x15ukaarTdaYPBRC3g3NFkYQYGmUpkQKw+R0NgAA9s cGz25s+3FIQV41wnNaQQLP1ZgbdMBKMky6/XR19L5AD5Q6NIemo6Emco71Ra2wi/UHMJ j/wg== 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=zz+HQHPSZK+EjF/L2hCcqBg66cCuZTNzMLSYw+djs8Y=; b=gr7xQ2RZuU4zmiUQI2328qeVoJVlPbE7Y6IWPMgBW09ZF6Hl+zwcO+qTsn8i4hP4AH x4yEi/4oD4clBHfjhkUNlb/wgZbdxb7+JgyPX8CBSdW6Ax2JZuF3hMSlJii9HurG2SmJ Q3oq/bVHtxcK1xz8zjvO0PlZQHbyxduHlDhl21OxPcyOiNMW7WmUsp3YtL0IAHqiFZLI CeCD+jxWYvuUXh9UA+14oiBIwGP4Hd+0joW5HESXqsgJp+5Yas8RMZS3gZTnWKNCU/Hv bCbBk1jv2QsUW4nbS/svhDecqbMcN1EnxTozOLWJgJXlx+m+UtXbGx9ylJL4lIOAo+o/ jvjA== X-Gm-Message-State: AOAM531pLXezo52sftloJMg2p7NhWJJ2KX/p94qNCzTTS6pzWdC3ETa5 ypQXh1JWJdKjttH3335ApQNBo1G7F+kqJHk= X-Received: by 2002:a05:6e02:1bed:: with SMTP id y13mr14243885ilv.279.1636837772523; Sat, 13 Nov 2021 13:09:32 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:516:f322:7db9:ae0a]) by smtp.gmail.com with ESMTPSA id j23sm5243896iog.53.2021.11.13.13.09.31 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Nov 2021 13:09:32 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Nov 2021 15:09:15 -0600 Message-Id: <20211113210916.49167-14-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211113210916.49167-1-rcombs@rcombs.me> References: <20211113210916.49167-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 14/15] lavc/proresdec: add scaffolding for hwdec support 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: s4aME1qXNv9b --- libavcodec/proresdec.h | 1 + libavcodec/proresdec2.c | 48 ++++++++++++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/libavcodec/proresdec.h b/libavcodec/proresdec.h index 06e41dd09a..1e48752e6f 100644 --- a/libavcodec/proresdec.h +++ b/libavcodec/proresdec.h @@ -52,6 +52,7 @@ typedef struct { int first_field; int alpha_info; void (*unpack_alpha)(GetBitContext *gb, uint16_t *dst, int num_coeffs, const int num_bits); + enum AVPixelFormat pix_fmt; } ProresContext; #endif /* AVCODEC_PRORESDEC_H */ diff --git a/libavcodec/proresdec2.c b/libavcodec/proresdec2.c index 7750620b22..5b1d7da693 100644 --- a/libavcodec/proresdec2.c +++ b/libavcodec/proresdec2.c @@ -187,6 +187,8 @@ static av_cold int decode_init(AVCodecContext *avctx) permute(ctx->progressive_scan, ff_prores_progressive_scan, idct_permutation); permute(ctx->interlaced_scan, ff_prores_interlaced_scan, idct_permutation); + ctx->pix_fmt = AV_PIX_FMT_NONE; + if (avctx->bits_per_raw_sample == 10){ ctx->unpack_alpha = unpack_alpha_10; } else if (avctx->bits_per_raw_sample == 12){ @@ -204,6 +206,7 @@ static int decode_frame_header(ProresContext *ctx, const uint8_t *buf, int hdr_size, width, height, flags; int version; const uint8_t *ptr; + enum AVPixelFormat pix_fmt; hdr_size = AV_RB16(buf); ff_dlog(avctx, "header size %d\n", hdr_size); @@ -252,18 +255,34 @@ static int decode_frame_header(ProresContext *ctx, const uint8_t *buf, if (ctx->alpha_info) { if (avctx->bits_per_raw_sample == 10) { - avctx->pix_fmt = (buf[12] & 0xC0) == 0xC0 ? AV_PIX_FMT_YUVA444P10 : AV_PIX_FMT_YUVA422P10; + pix_fmt = (buf[12] & 0xC0) == 0xC0 ? AV_PIX_FMT_YUVA444P10 : AV_PIX_FMT_YUVA422P10; } else { /* 12b */ - avctx->pix_fmt = (buf[12] & 0xC0) == 0xC0 ? AV_PIX_FMT_YUVA444P12 : AV_PIX_FMT_YUVA422P12; + pix_fmt = (buf[12] & 0xC0) == 0xC0 ? AV_PIX_FMT_YUVA444P12 : AV_PIX_FMT_YUVA422P12; } } else { if (avctx->bits_per_raw_sample == 10) { - avctx->pix_fmt = (buf[12] & 0xC0) == 0xC0 ? AV_PIX_FMT_YUV444P10 : AV_PIX_FMT_YUV422P10; + pix_fmt = (buf[12] & 0xC0) == 0xC0 ? AV_PIX_FMT_YUV444P10 : AV_PIX_FMT_YUV422P10; } else { /* 12b */ - avctx->pix_fmt = (buf[12] & 0xC0) == 0xC0 ? AV_PIX_FMT_YUV444P12 : AV_PIX_FMT_YUV422P12; + pix_fmt = (buf[12] & 0xC0) == 0xC0 ? AV_PIX_FMT_YUV444P12 : AV_PIX_FMT_YUV422P12; } } + if (pix_fmt != ctx->pix_fmt) { +#define HWACCEL_MAX 0 + enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmtp = pix_fmts; + int ret; + + ctx->pix_fmt = pix_fmt; + + *fmtp++ = ctx->pix_fmt; + *fmtp = AV_PIX_FMT_NONE; + + if ((ret = ff_thread_get_format(avctx, pix_fmts)) < 0) + return ret; + + avctx->pix_fmt = ret; + } + avctx->color_primaries = buf[14]; avctx->color_trc = buf[15]; avctx->colorspace = buf[16]; @@ -782,6 +801,22 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, buf += frame_hdr_size; buf_size -= frame_hdr_size; + if ((ret = ff_thread_get_buffer(avctx, &tframe, 0)) < 0) + return ret; + + if (avctx->hwaccel) { + ret = avctx->hwaccel->start_frame(avctx, NULL, 0); + if (ret < 0) + return ret; + ret = avctx->hwaccel->decode_slice(avctx, avpkt->data, avpkt->size); + if (ret < 0) + return ret; + ret = avctx->hwaccel->end_frame(avctx); + if (ret < 0) + return ret; + goto finish; + } + decode_picture: pic_size = decode_picture_header(avctx, buf, buf_size); if (pic_size < 0) { @@ -789,10 +824,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, return pic_size; } - if (ctx->first_field) - if ((ret = ff_thread_get_buffer(avctx, &tframe, 0)) < 0) - return ret; - if ((ret = decode_picture(avctx)) < 0) { av_log(avctx, AV_LOG_ERROR, "error decoding picture\n"); return ret; @@ -806,6 +837,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, goto decode_picture; } +finish: *got_frame = 1; return avpkt->size; From patchwork Sat Nov 13 21:09:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 31399 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3679681iob; Sat, 13 Nov 2021 13:11:51 -0800 (PST) X-Google-Smtp-Source: ABdhPJwPegIxRunO16A6HoD+crr94TaFY6oKquY60+nInSD6ccgAdyVMUrCQRK9SSLttWg56mN2h X-Received: by 2002:a05:6402:2552:: with SMTP id l18mr35562107edb.90.1636837911398; Sat, 13 Nov 2021 13:11:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636837911; cv=none; d=google.com; s=arc-20160816; b=QuwJT/xew+ompqmpo1lZmNLX0Wi/JhOjA0Ei6HGTCGEdS8gr8lmwKk8ZnX60tjlxjL fXFqhEfXAyHUuBBlU9Cbev6ruk6rT/HbicZ7pJGXk0kSoID2BK5H8KpJKkU0helh6EGj 337fVGmATLBvXVT2IlkLzYm+5H3skCxFacVAailhv2oLP6kBUqyWY0rnwpEWcKJLl19T EA6xUh6TUfw6i6KUAXEJmOEw4JtraFVRv0i2aplu7GXGsy1JSzXX7EDXEOSFlcX5UrpQ Y7hUs2rnuIm6vlhFZhzPdlMNyNvELXWra4KoLPeRFteW/2/0x31SZ3uCsp1OmBTaT8MH 6X8g== 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=SJt6gsYiecM4ab+WrUMbUGgkjNbYZhdpcZDBT3fkMvI=; b=snOLgUPVnVDAxin1jEQx0Ktl6NbqndL98PU843Fr74zMdL0KpDhMjumKBQGMcUrsAu 1RdAtWKPUYnk36DwifxEyh75hT+TPGmfnmeKBwyKUjnscJcJDsO91Ft8vC2loLaNfjVL mN/D8oTJGQ6xr3STjcd/67Tn2KPI3ZMiEOCJacGUlnVgVxRU+hi9jjXxzrcJrlODGk+w wyVCL4caWJ6orpUZ4VPlxVTqJCEDS8SYpV3OUq7ytJZrXZ10K0+cwom+vKLT0bji28mu aEfoKTzFH1PuWURZNpYfHESVPbF9rRlttCv+s7fMD+UVGXORXF6cXnwGUK/IF+85eevR GD7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=HIqKL7k7; 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 g4si24963858ejt.338.2021.11.13.13.11.51; Sat, 13 Nov 2021 13:11:51 -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=HIqKL7k7; 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 26DC168ADE7; Sat, 13 Nov 2021 23:09:43 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io1-f46.google.com (mail-io1-f46.google.com [209.85.166.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 072F668AD50 for ; Sat, 13 Nov 2021 23:09:34 +0200 (EET) Received: by mail-io1-f46.google.com with SMTP id k21so15850210ioh.4 for ; Sat, 13 Nov 2021 13:09:34 -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=lQXUUSfpwLrgBpK8qtkkRZmHcoNryYVcHUT3X55DdMA=; b=HIqKL7k7louaX5M6NHQvGZ/kzKYM/qYga7bkPvjLWH14zG9hc+Ney2wC3YKF528VkQ tvWqCHk5xa18MoeQS0bGfJKCHw5jPbLubw5BY8gNIh8GVM1U+bMa+2CMm0lKrWb2o/5Q hH7k7fKeA7r4/fSygSUDVGdj4HrLAQoS7JACf1lbzoy+FvixSU9Ht99u/PgSm0K68lt5 1OCLu4rMX2E4h73MNDQmSHw7LflclLPG3mKIP6NaPAI+QRMzef0AoAG/F7XLdpOUL3DP 8C0w5usmoPdwgywrYJHKIXQn4oCKqA18/QB5qwOk0WVCHuRRZvPCAgfXcBcg1YsqvuuH vsNg== 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=lQXUUSfpwLrgBpK8qtkkRZmHcoNryYVcHUT3X55DdMA=; b=sJ5RrXZtUErhoM0BvQIoYHaTKvljgug7svUF8cJLRrG3MIbSX8n9HVW6PXUubFjGDC WMbgp1qBvY3QdVbRlK3JQlWkD396pR4fyuiwvY/ffgizOmFFx1rMB5EjVmCmZSaEF05H 4akvz2pHBXMLwyrCrGlteXtMb2kE/AZjw1IbxTElJinmz84EjIo4epvFYEBvU7bNZuAW LVSdme9toxehVvfcD8FRnvUI81pd+NdgFovcGV/K/Xc8yE47a7FpOMkCckdjCPMgFcDS IsceDdIXAIXBJjnuLJEc3XLHT6VzFxyDkpmlD1OkJgwr3431B228V/36B6lhOkpl4ZDJ 7h9g== X-Gm-Message-State: AOAM531uHXhDy3gHv6dn3yD74hcp1DClxfQOZGzQjcX1UmI0hH/S47N5 eneIVWLvYMJCJuURGSmmJmoIuCpOCSZlr7g= X-Received: by 2002:a05:6638:2656:: with SMTP id n22mr18454535jat.35.1636837773412; Sat, 13 Nov 2021 13:09:33 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:516:f322:7db9:ae0a]) by smtp.gmail.com with ESMTPSA id j23sm5243896iog.53.2021.11.13.13.09.32 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Nov 2021 13:09:32 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Nov 2021 15:09:16 -0600 Message-Id: <20211113210916.49167-15-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211113210916.49167-1-rcombs@rcombs.me> References: <20211113210916.49167-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 15/15] lavc/proresdec: add videotoolbox hwaccel 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: AWf2Wr0LKW7c --- configure | 2 + libavcodec/hwaccels.h | 1 + libavcodec/proresdec2.c | 12 +++++- libavcodec/videotoolbox.c | 77 ++++++++++++++++++++++++++++++++++++++- 4 files changed, 89 insertions(+), 3 deletions(-) diff --git a/configure b/configure index 2c6dd59e62..6983b8af7a 100755 --- a/configure +++ b/configure @@ -3054,6 +3054,8 @@ mpeg4_vdpau_hwaccel_deps="vdpau" mpeg4_vdpau_hwaccel_select="mpeg4_decoder" mpeg4_videotoolbox_hwaccel_deps="videotoolbox" mpeg4_videotoolbox_hwaccel_select="mpeg4_decoder" +prores_videotoolbox_hwaccel_deps="videotoolbox" +prores_videotoolbox_hwaccel_select="prores_decoder" vc1_d3d11va_hwaccel_deps="d3d11va" vc1_d3d11va_hwaccel_select="vc1_decoder" vc1_d3d11va2_hwaccel_deps="d3d11va" diff --git a/libavcodec/hwaccels.h b/libavcodec/hwaccels.h index 65e778f3e4..1e7b464950 100644 --- a/libavcodec/hwaccels.h +++ b/libavcodec/hwaccels.h @@ -60,6 +60,7 @@ extern const AVHWAccel ff_mpeg4_nvdec_hwaccel; extern const AVHWAccel ff_mpeg4_vaapi_hwaccel; extern const AVHWAccel ff_mpeg4_vdpau_hwaccel; extern const AVHWAccel ff_mpeg4_videotoolbox_hwaccel; +extern const AVHWAccel ff_prores_videotoolbox_hwaccel; extern const AVHWAccel ff_vc1_d3d11va_hwaccel; extern const AVHWAccel ff_vc1_d3d11va2_hwaccel; extern const AVHWAccel ff_vc1_dxva2_hwaccel; diff --git a/libavcodec/proresdec2.c b/libavcodec/proresdec2.c index 5b1d7da693..719194f21e 100644 --- a/libavcodec/proresdec2.c +++ b/libavcodec/proresdec2.c @@ -33,6 +33,7 @@ #include "avcodec.h" #include "get_bits.h" +#include "hwconfig.h" #include "idctdsp.h" #include "internal.h" #include "profiles.h" @@ -268,12 +269,15 @@ static int decode_frame_header(ProresContext *ctx, const uint8_t *buf, } if (pix_fmt != ctx->pix_fmt) { -#define HWACCEL_MAX 0 +#define HWACCEL_MAX (CONFIG_PRORES_VIDEOTOOLBOX_HWACCEL) enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmtp = pix_fmts; int ret; ctx->pix_fmt = pix_fmt; +#if CONFIG_PRORES_VIDEOTOOLBOX_HWACCEL + *fmtp++ = AV_PIX_FMT_VIDEOTOOLBOX; +#endif *fmtp++ = ctx->pix_fmt; *fmtp = AV_PIX_FMT_NONE; @@ -864,4 +868,10 @@ const AVCodec ff_prores_decoder = { .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS, .profiles = NULL_IF_CONFIG_SMALL(ff_prores_profiles), .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, + .hw_configs = (const AVCodecHWConfigInternal *const []) { +#if CONFIG_PRORES_VIDEOTOOLBOX_HWACCEL + HWACCEL_VIDEOTOOLBOX(prores), +#endif + NULL + }, }; diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c index 9ca84e873d..029c1c09c7 100644 --- a/libavcodec/videotoolbox.c +++ b/libavcodec/videotoolbox.c @@ -32,6 +32,7 @@ #include "h264dec.h" #include "hevcdec.h" #include "mpegvideo.h" +#include "proresdec.h" #include #include @@ -183,7 +184,6 @@ CFDataRef ff_videotoolbox_avcc_extradata_create(AVCodecContext *avctx) int pps_size = escape_ps(NULL, h->ps.pps->data, h->ps.pps->data_size); int vt_extradata_size; uint8_t *vt_extradata; - int i; vt_extradata_size = 6 + 2 + sps_size + 3 + pps_size; vt_extradata = av_malloc(vt_extradata_size); @@ -870,6 +870,31 @@ static int videotoolbox_start(AVCodecContext *avctx) case AV_CODEC_ID_MPEG4 : videotoolbox->cm_codec_type = kCMVideoCodecType_MPEG4Video; break; + case AV_CODEC_ID_PRORES : + switch (avctx->codec_tag) { + case MKTAG('a','p','c','o'): + videotoolbox->cm_codec_type = kCMVideoCodecType_AppleProRes422Proxy; + break; + case MKTAG('a','p','c','s'): + videotoolbox->cm_codec_type = kCMVideoCodecType_AppleProRes422LT; + break; + case MKTAG('a','p','c','n'): + videotoolbox->cm_codec_type = kCMVideoCodecType_AppleProRes422; + break; + case MKTAG('a','p','c','h'): + videotoolbox->cm_codec_type = kCMVideoCodecType_AppleProRes422HQ; + break; + case MKTAG('a','p','4','h'): + videotoolbox->cm_codec_type = kCMVideoCodecType_AppleProRes4444; + break; + case MKTAG('a','p','4','x'): + videotoolbox->cm_codec_type = kCMVideoCodecType_AppleProRes4444XQ; + break; + default: + videotoolbox->cm_codec_type = avctx->codec_tag; + av_log(avctx, AV_LOG_WARNING, "Unknown prores profile %d\n", avctx->codec_tag); + } + break; case AV_CODEC_ID_VP9 : videotoolbox->cm_codec_type = kCMVideoCodecType_VP9; break; @@ -877,6 +902,14 @@ static int videotoolbox_start(AVCodecContext *avctx) break; } +#ifdef __MAC_10_9 + if (avctx->codec_id == AV_CODEC_ID_PRORES) { + if (__builtin_available(macOS 10.9, *)) { + VTRegisterProfessionalVideoWorkflowVideoDecoders(); + } + } +#endif + #ifdef __MAC_10_11 if (__builtin_available(macOS 10.11, *)) { VTRegisterSupplementalVideoDecoderIfAvailable(videotoolbox->cm_codec_type); @@ -1065,6 +1098,30 @@ static int videotoolbox_mpeg_end_frame(AVCodecContext *avctx) return ff_videotoolbox_common_end_frame(avctx, frame); } +static int videotoolbox_prores_start_frame(AVCodecContext *avctx, + const uint8_t *buffer, + uint32_t size) +{ + return 0; +} + +static int videotoolbox_prores_decode_slice(AVCodecContext *avctx, + const uint8_t *buffer, + uint32_t size) +{ + VTContext *vtctx = avctx->internal->hwaccel_priv_data; + + return ff_videotoolbox_buffer_copy(vtctx, buffer, size); +} + +static int videotoolbox_prores_end_frame(AVCodecContext *avctx) +{ + ProresContext *ctx = avctx->priv_data; + AVFrame *frame = ctx->frame; + + return ff_videotoolbox_common_end_frame(avctx, frame); +} + static enum AVPixelFormat videotoolbox_best_pixel_format(AVCodecContext *avctx) { const AVPixFmtDescriptor *descriptor = av_pix_fmt_desc_get(avctx->sw_pix_fmt); if (!descriptor) @@ -1076,7 +1133,8 @@ static enum AVPixelFormat videotoolbox_best_pixel_format(AVCodecContext *avctx) return AV_PIX_FMT_AYUV64; #if HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE - if (depth > 10) + // ProRes has issues when decoding to 10-bit, so always use 16 + if (depth > 10 || avctx->codec_id == AV_CODEC_ID_PRORES) return descriptor->log2_chroma_w == 0 ? AV_PIX_FMT_P416 : AV_PIX_FMT_P216; #endif @@ -1288,6 +1346,21 @@ const AVHWAccel ff_mpeg4_videotoolbox_hwaccel = { .priv_data_size = sizeof(VTContext), }; +const AVHWAccel ff_prores_videotoolbox_hwaccel = { + .name = "prores_videotoolbox", + .type = AVMEDIA_TYPE_VIDEO, + .id = AV_CODEC_ID_PRORES, + .pix_fmt = AV_PIX_FMT_VIDEOTOOLBOX, + .alloc_frame = ff_videotoolbox_alloc_frame, + .start_frame = videotoolbox_prores_start_frame, + .decode_slice = videotoolbox_prores_decode_slice, + .end_frame = videotoolbox_prores_end_frame, + .frame_params = ff_videotoolbox_frame_params, + .init = ff_videotoolbox_common_init, + .uninit = ff_videotoolbox_uninit, + .priv_data_size = sizeof(VTContext), +}; + static AVVideotoolboxContext *av_videotoolbox_alloc_context_with_pix_fmt(enum AVPixelFormat pix_fmt, bool full_range) {