Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp626327pxt; Thu, 5 Aug 2021 07:54:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJycDFvWZ1bgImGFWRAKqzpi1aafUsYo7s+7o6qzZeNOuRb9gkeRwOiuN+F3b881sOxO6pj/ X-Received: by 2002:a17:906:94cd:: with SMTP id d13mr5439892ejy.158.1628175242174; Thu, 05 Aug 2021 07:54:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628175242; cv=none; d=google.com; s=arc-20160816; b=kWAfsqyRtlbmLy+VR1IAqbhtWGgRQddfRiFro7DdvV5Pi0KsRXZj6NnuOR86kF+oGC vkb7A/fHo0QGm6iNucVXnngV0SU6xJEOVx9ih4uT7OlFEIUa6ptBfnHBsvS91MXvn4pc t7nasU0r7Q6P1Xr97kAYthSaZHxgDiAKOfTSCG/1i/AekbrhTfDR7lakKzM/qyqe4JTE rWhdq0kCspj0gRTb29wBrgpMq7O5BLD1G5bc5BapQItdUf61MzBvy9ILGhLeCWtdULQQ CiZuGjCFI8UjnNvtYz5ysdKToZov/zjy1vMZPDwb0xUVDiY5tLcPDd2LUH2+kT0vSaGe bkRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from; bh=bsFhlcc3h86KjrSEsaYPZWZi/epfUBGYSs2UyfagJrQ=; b=KiYSblKi2bxwBBxGgGoYAB0qfj4n60H6n9NBBtwDDPC5D4zSKOYb8LsjcSXudD+OZE QVPj4VEhl+RmKTy2A5rguslEQJIs6HtbkEqPQ4YDgcj19iMe6rNPpHhR85OsHeHMh4XP PNodHdmPk0Hj1u16xbQgY/oqSpl3lZx6TQJRztau48Y3witmUm8kw+Xq+HZ9JB3ISr9e m4y4DabnMBgmofMl0hwYJyrA/xLRbiuSnWlw0EuCfnOGJLoILd4EbG80XSsFDstCXH3e yvs/rxNECyXbv8UzfbZf/WzLwJtfdKeMJLCUmFRWBZmY8YtupVEYXHZ8MckeWFZHKFQY bSVg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o7si5355660edv.68.2021.08.05.07.53.38; Thu, 05 Aug 2021 07:54:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242028AbhHEOpw (ORCPT + 99 others); Thu, 5 Aug 2021 10:45:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45312 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233059AbhHEOnK (ORCPT ); Thu, 5 Aug 2021 10:43:10 -0400 Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 965E1C061765; Thu, 5 Aug 2021 07:42:56 -0700 (PDT) Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: andrzej.p) with ESMTPSA id C14C51F44097 From: Andrzej Pietrasiewicz To: linux-media@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-staging@lists.linux.dev Cc: Andrzej Pietrasiewicz , Benjamin Gaignard , Boris Brezillon , Ezequiel Garcia , Fabio Estevam , Greg Kroah-Hartman , Hans Verkuil , Heiko Stuebner , Jernej Skrabec , Mauro Carvalho Chehab , Nicolas Dufresne , NXP Linux Team , Pengutronix Kernel Team , Philipp Zabel , Sascha Hauer , Shawn Guo , kernel@collabora.com Subject: [PATCH v3 00/10] VP9 codec V4L2 control interface Date: Thu, 5 Aug 2021 16:42:36 +0200 Message-Id: <20210805144246.11998-1-andrzej.p@collabora.com> X-Mailer: git-send-email 2.17.1 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Dear all, This patch series adds VP9 codec V4L2 control interface and two drivers using the new controls. It is a follow-up of previous RFC v2 series [1]. In this new iteration, we've implemented VP9 hardware decoding on two devices: Rockchip VDEC and Hantro G2, and tested on RK3399, i.MX8MQ and i.MX8MP. The i.MX8M driver needs proper power domains support, though, which is a subject of a different effort, but in all 3 cases we were able to run the drivers. GStreamer support is also available, the needed changes have been submitted by Daniel Almeida [2]. This MR is ready to be merged, and just needs the VP9 V4L2 controls to be merged and released. Both rkvdec and hantro drivers are passing a significant number of VP9 tests using Fluster[3]. There are still a few tests that are not passing, due to dynamic frame resize (not yet supported by V4L2) and small size videos (due to IP block limitations). The series adds the VP9 codec V4L2 control API as uAPI, so it aims at being merged without passing through staging, as agreed[4]. The ABI has been checked for padding and verified to contain no holes. Please note, though, that I kindly ask not to merge this until Nicolas Dufresne reviews it. [1] https://patchwork.linuxtv.org/project/linux-media/cover/20210505123836.9573-1-andrzej.p@collabora.com/ [2] https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2144 [3] https://github.com/fluendo/fluster [4] https://lore.kernel.org/linux-media/b8f83c93-67fd-09f5-9314-15746cbfdc61@xs4all.nl/ Changes related to the RFC v2: - added another driver including a postprocessor to de-tile codec-specific tiling - reworked uAPI structs layout to follow VP8 style - changed validation of loop filter params - changed validation of segmentation params - changed validation of VP9 frame params - removed level lookup array from loop filter struct (can be computed by drivers) - renamed some enum values to match the spec more closely - V4L2 VP9 library changed the 'eob' member of 'struct v4l2_vp9_frame_symbol_counts' so that it is an array of pointers instead of an array of pointers to arrays (IPs such as g2 creatively pass parts of the 'eob' counts in the 'coeff' counts) - factored out several repeated portions of code - minor nitpicks and cleanups The series depends on the YUV tiled format support prepared by Ezequiel: https://patchwork.linuxtv.org/project/linux-media/list/?series=6049. Andrzej Pietrasiewicz (4): media: uapi: Add VP9 stateless decoder controls media: Add VP9 v4l2 library media: hantro: Prepare for other G2 codecs media: hantro: Support VP9 on the G2 core Boris Brezillon (1): media: rkvdec: Add the VP9 backend Ezequiel Garcia (5): hantro: postproc: Fix motion vector space size hantro: postproc: Introduce struct hantro_postproc_ops hantro: Simplify postprocessor hantro: Add quirk for NV12/NV12_4L4 capture format media: hantro: Support NV12 on the G2 core .../userspace-api/media/v4l/biblio.rst | 10 + .../media/v4l/ext-ctrls-codec-stateless.rst | 545 +++++ .../media/v4l/pixfmt-compressed.rst | 15 + .../media/v4l/vidioc-g-ext-ctrls.rst | 8 + .../media/v4l/vidioc-queryctrl.rst | 12 + .../media/videodev2.h.rst.exceptions | 2 + drivers/media/v4l2-core/Kconfig | 4 + drivers/media/v4l2-core/Makefile | 1 + drivers/media/v4l2-core/v4l2-ctrls-core.c | 174 ++ drivers/media/v4l2-core/v4l2-ctrls-defs.c | 8 + drivers/media/v4l2-core/v4l2-ioctl.c | 1 + drivers/media/v4l2-core/v4l2-vp9.c | 1850 +++++++++++++++++ drivers/staging/media/hantro/Kconfig | 1 + drivers/staging/media/hantro/Makefile | 7 +- drivers/staging/media/hantro/hantro.h | 40 +- drivers/staging/media/hantro/hantro_drv.c | 18 +- drivers/staging/media/hantro/hantro_g2.c | 27 + .../staging/media/hantro/hantro_g2_hevc_dec.c | 31 - drivers/staging/media/hantro/hantro_g2_regs.h | 104 + .../staging/media/hantro/hantro_g2_vp9_dec.c | 978 +++++++++ drivers/staging/media/hantro/hantro_hw.h | 83 +- .../staging/media/hantro/hantro_postproc.c | 79 +- drivers/staging/media/hantro/hantro_v4l2.c | 20 + drivers/staging/media/hantro/hantro_vp9.c | 240 +++ drivers/staging/media/hantro/hantro_vp9.h | 103 + drivers/staging/media/hantro/imx8m_vpu_hw.c | 38 +- .../staging/media/hantro/rockchip_vpu_hw.c | 7 +- .../staging/media/hantro/sama5d4_vdec_hw.c | 3 +- drivers/staging/media/rkvdec/Kconfig | 1 + drivers/staging/media/rkvdec/Makefile | 2 +- drivers/staging/media/rkvdec/rkvdec-vp9.c | 1078 ++++++++++ drivers/staging/media/rkvdec/rkvdec.c | 52 +- drivers/staging/media/rkvdec/rkvdec.h | 12 +- include/media/v4l2-ctrls.h | 4 + include/media/v4l2-vp9.h | 182 ++ include/uapi/linux/v4l2-controls.h | 433 ++++ include/uapi/linux/videodev2.h | 6 + 37 files changed, 6108 insertions(+), 71 deletions(-) create mode 100644 drivers/media/v4l2-core/v4l2-vp9.c create mode 100644 drivers/staging/media/hantro/hantro_g2.c create mode 100644 drivers/staging/media/hantro/hantro_g2_vp9_dec.c create mode 100644 drivers/staging/media/hantro/hantro_vp9.c create mode 100644 drivers/staging/media/hantro/hantro_vp9.h create mode 100644 drivers/staging/media/rkvdec/rkvdec-vp9.c create mode 100644 include/media/v4l2-vp9.h base-commit: bfee75f73c37a2f46a6326eaa06f5db701f76f01 -- 2.17.1