mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-04-12 16:06:42 +02:00
2119 lines
84 KiB
Diff
2119 lines
84 KiB
Diff
From mboxrd@z Thu Jan 1 00:00:00 1970
|
|
Return-Path: <linux-media-owner@vger.kernel.org>
|
|
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
|
|
aws-us-west-2-korg-lkml-1.web.codeaurora.org
|
|
Received: from vger.kernel.org (vger.kernel.org [23.128.96.18])
|
|
by smtp.lore.kernel.org (Postfix) with ESMTP id F1266C4332F
|
|
for <linux-media@archiver.kernel.org>; Sun, 5 Nov 2023 16:55:40 +0000 (UTC)
|
|
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
|
id S229599AbjKEQzl (ORCPT <rfc822;linux-media@archiver.kernel.org>);
|
|
Sun, 5 Nov 2023 11:55:41 -0500
|
|
Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55938 "EHLO
|
|
lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
|
with ESMTP id S229445AbjKEQzk (ORCPT
|
|
<rfc822;linux-media@vger.kernel.org>); Sun, 5 Nov 2023 11:55:40 -0500
|
|
Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223])
|
|
by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C5FEE83;
|
|
Sun, 5 Nov 2023 08:55:35 -0800 (PST)
|
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se;
|
|
h=Content-Transfer-Encoding: MIME-Version: Message-ID: Date: Subject: Cc:
|
|
To: From; q=dns/txt; s=fe-e1b5cab7be; t=1699203327;
|
|
bh=gpEWyFLpFVQA/Y7FAcamWOkPAGDRoHusQHT6WoMBcvI=;
|
|
b=K0OH+eJxuk0CnFzeiViuoctJ7h50ZC066xjRckTpJRZnM/oC/4dvBdhNAWZI7fjkfQDHnPvuz
|
|
sugfkZzS1jJgb9iFSYJgJvRzqFTw/UDEmvH9Xaa+vg8/YtjuZNoQeeBr5KNdIGfXEMa2GFKFdyH
|
|
5UNc0EM8JL/HAEG0Abjj7JudHNAqAYOViJrxPFGiJpMpjCdzukShWBLzhORwN0pqU7u2AP9PbLN
|
|
9wMy86L2PDL71vlFLOMaTUvoat8S8lCrmZ8s/3r0NnTsSvvkIoIW7CpqigEIq+Tus8059ev81AE
|
|
Cv72ZOB6ZYNsv/1lqQwD3ZbyyDQWTixsefj76wGEr07g==
|
|
From: Jonas Karlman <jonas@kwiboo.se>
|
|
To: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
|
|
Mauro Carvalho Chehab <mchehab@kernel.org>,
|
|
Hans Verkuil <hverkuil-cisco@xs4all.nl>
|
|
Cc: Alex Bee <knaerzche@gmail.com>,
|
|
Nicolas Dufresne <nicolas.dufresne@collabora.com>,
|
|
Benjamin Gaignard <benjamin.gaignard@collabora.com>,
|
|
Sebastian Fricke <sebastian.fricke@collabora.com>,
|
|
Christopher Obbard <chris.obbard@collabora.com>,
|
|
linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
|
|
linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
|
|
Jonas Karlman <jonas@kwiboo.se>
|
|
Subject: [PATCH v4 00/11] media: rkvdec: Add H.264 High 10 and 4:2:2 profile support
|
|
Date: Sun, 5 Nov 2023 16:54:59 +0000
|
|
Message-ID: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
X-Mailer: git-send-email 2.42.0
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 8bit
|
|
X-Report-Abuse-To: abuse@forwardemail.net
|
|
X-Report-Abuse: abuse@forwardemail.net
|
|
X-Complaints-To: abuse@forwardemail.net
|
|
X-ForwardEmail-Version: 0.4.40
|
|
X-ForwardEmail-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net,
|
|
149.28.215.223
|
|
X-ForwardEmail-ID: 6547c8ff42ad2f8d152468da
|
|
Precedence: bulk
|
|
List-ID: <linux-media.vger.kernel.org>
|
|
X-Mailing-List: linux-media@vger.kernel.org
|
|
Status: RO
|
|
Content-Length: 4223
|
|
Lines: 104
|
|
|
|
This is a revival of a 3 year old series [1] now that NV15/NV20/NV30 support
|
|
for display driver have landed in mainline tree.
|
|
|
|
This series adds H.264 High 10 and 4:2:2 profile support to the Rockchip
|
|
Video Decoder driver.
|
|
|
|
Patch 1 adds helpers for calculating plane bytesperline and sizeimage.
|
|
Patch 2 adds two new pixelformats for semi-planer 10-bit 4:2:0/4:2:2 YUV.
|
|
|
|
Patch 3 change to use bytesperline and buffer height to configure strides.
|
|
Patch 4 change to use values from SPS/PPS control to configure the HW.
|
|
Patch 5 remove an unnecessary call to validate sps at streaming start.
|
|
|
|
Patch 6-10 refactor code to support filtering of CAPUTRE formats based
|
|
on the image format returned from a get_image_fmt ops.
|
|
|
|
Patch 11 adds final bits to support H.264 High 10 and 4:2:2 profiles.
|
|
|
|
Tested on a ROCK Pi 4 (RK3399) and Rock64 (RK3328):
|
|
|
|
v4l2-compliance 1.24.1, 64 bits, 64-bit time_t
|
|
...
|
|
Total for rkvdec device /dev/video1: 46, Succeeded: 46, Failed: 0, Warnings: 0
|
|
|
|
Running test suite JVT-FR-EXT with decoder FFmpeg-H.264-V4L2-request
|
|
...
|
|
Ran 65/69 tests successfully
|
|
|
|
Running test suite JVT-AVC_V1 with decoder FFmpeg-H.264-V4L2-request
|
|
...
|
|
Ran 127/135 tests successfully
|
|
|
|
Before this series:
|
|
|
|
Running test suite JVT-FR-EXT with decoder FFmpeg-H.264-V4L2-request
|
|
...
|
|
Ran 44/69 tests successfully
|
|
|
|
Changes in v4:
|
|
- Fix failed v4l2-compliance tests related to CAPTURE queue
|
|
- Rework CAPTURE format filter anv validate to use an image format
|
|
- Run fluster test suite JVT-FR-EXT [4] and JVT-AVC_V1 [5]
|
|
Link to v3: https://lore.kernel.org/linux-media/20231029183427.1781554-1-jonas@kwiboo.se/
|
|
|
|
Changes in v3:
|
|
- Drop merged patches
|
|
- Use bpp and bpp_div instead of prior misuse of block_w/block_h
|
|
- New patch to use values from SPS/PPS control to configure the HW
|
|
- New patch to remove an unnecessary call to validate sps at streaming start
|
|
- Reworked pixel format validation
|
|
Link to v2: https://lore.kernel.org/linux-media/20200706215430.22859-1-jonas@kwiboo.se/
|
|
|
|
Changes in v2:
|
|
- Collect r-b tags
|
|
- SPS pic width and height in mbs validation moved to rkvdec_try_ctrl
|
|
- New patch to not override output buffer sizeimage
|
|
- Reworked pixel format validation
|
|
- Only align decoded buffer instead of changing frmsize step_width
|
|
Link to v1: https://lore.kernel.org/linux-media/20200701215616.30874-1-jonas@kwiboo.se/
|
|
|
|
Following commits adds support for NV15/NV20/NV30 to VOP driver:
|
|
728c15b4b5f3 ("drm/fourcc: Add NV20 and NV30 YUV formats")
|
|
d4b384228562 ("drm/rockchip: vop: Add NV15, NV20 and NV30 support")
|
|
|
|
To fully runtime test this series you may need above drm commits and ffmpeg
|
|
patches from [2], this series and drm patches is also available at [3].
|
|
|
|
[1] https://lore.kernel.org/linux-media/20200706215430.22859-1-jonas@kwiboo.se/
|
|
[2] https://github.com/Kwiboo/FFmpeg/commits/v4l2-request-n6.1-dev/
|
|
[3] https://github.com/Kwiboo/linux-rockchip/commits/linuxtv-rkvdec-high-10-v4/
|
|
[4] https://gist.github.com/Kwiboo/f4ac15576b2c72887ae2bc5d58b5c865
|
|
[5] https://gist.github.com/Kwiboo/459a1c8f1dcb56e45dc7a7a29cc28adf
|
|
|
|
Regards,
|
|
Jonas
|
|
|
|
Alex Bee (1):
|
|
media: rkvdec: h264: Don't hardcode SPS/PPS parameters
|
|
|
|
Jonas Karlman (10):
|
|
media: v4l2-common: Add helpers to calculate bytesperline and
|
|
sizeimage
|
|
media: v4l2: Add NV15 and NV20 pixel formats
|
|
media: rkvdec: h264: Use bytesperline and buffer height as virstride
|
|
media: rkvdec: h264: Remove SPS validation at streaming start
|
|
media: rkvdec: Extract rkvdec_fill_decoded_pixfmt into helper
|
|
media: rkvdec: Move rkvdec_reset_decoded_fmt helper
|
|
media: rkvdec: Extract decoded format enumeration into helper
|
|
media: rkvdec: Add image format concept
|
|
media: rkvdec: Add get_image_fmt ops
|
|
media: rkvdec: h264: Support High 10 and 4:2:2 profiles
|
|
|
|
.../media/v4l/pixfmt-yuv-planar.rst | 128 +++++++++++
|
|
drivers/media/v4l2-core/v4l2-common.c | 80 +++----
|
|
drivers/media/v4l2-core/v4l2-ioctl.c | 2 +
|
|
drivers/staging/media/rkvdec/rkvdec-h264.c | 83 +++----
|
|
drivers/staging/media/rkvdec/rkvdec.c | 217 +++++++++++++-----
|
|
drivers/staging/media/rkvdec/rkvdec.h | 18 +-
|
|
include/uapi/linux/videodev2.h | 2 +
|
|
7 files changed, 396 insertions(+), 134 deletions(-)
|
|
|
|
--
|
|
2.42.0
|
|
|
|
|
|
From mboxrd@z Thu Jan 1 00:00:00 1970
|
|
Return-Path: <linux-media-owner@vger.kernel.org>
|
|
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
|
|
aws-us-west-2-korg-lkml-1.web.codeaurora.org
|
|
Received: from vger.kernel.org (vger.kernel.org [23.128.96.18])
|
|
by smtp.lore.kernel.org (Postfix) with ESMTP id DE389C4332F
|
|
for <linux-media@archiver.kernel.org>; Sun, 5 Nov 2023 16:55:44 +0000 (UTC)
|
|
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
|
id S229689AbjKEQzp (ORCPT <rfc822;linux-media@archiver.kernel.org>);
|
|
Sun, 5 Nov 2023 11:55:45 -0500
|
|
Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55952 "EHLO
|
|
lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
|
with ESMTP id S229445AbjKEQzm (ORCPT
|
|
<rfc822;linux-media@vger.kernel.org>); Sun, 5 Nov 2023 11:55:42 -0500
|
|
Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223])
|
|
by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D1C1083;
|
|
Sun, 5 Nov 2023 08:55:39 -0800 (PST)
|
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se;
|
|
h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To:
|
|
Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be;
|
|
t=1699203336; bh=VBY0FHZGIpUm3P9r+IeT6rGp7Go4Kcp8zODviR0ogjA=;
|
|
b=BKDG4dDc9E/ZgiRG/Ru2++h4WwhGmSBs+ypZlLeawtW/RGt/AaLCHiGqdm+rglxe3LuoobCDP
|
|
Z1McdMSA8+pGaOGUjrkNcejfcOiStGk2dyup5CL6o2cffFmwXiddU2IHSGyIsuPiKQMdW9vg06V
|
|
+Am3LQs7O/C62i61U99NwL+/OQLIrYdmIa4qIfN0Q2jD0pzCSQNUQqT9Km6MaKtalT6vgB5uBkz
|
|
dUUFyzSfjUIGLYrDsn7Krz0TAMgW3h1o+DmNrU9ADxowdsgtpe/KXGyoNvgNzmZVjUl1yPHmV2N
|
|
tXo2xLb10U5ZdhnEMg9J5mdqQWl3Z0x8mVyzpn4DbH8g==
|
|
From: Jonas Karlman <jonas@kwiboo.se>
|
|
To: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
|
|
Mauro Carvalho Chehab <mchehab@kernel.org>,
|
|
Hans Verkuil <hverkuil-cisco@xs4all.nl>
|
|
Cc: Alex Bee <knaerzche@gmail.com>,
|
|
Nicolas Dufresne <nicolas.dufresne@collabora.com>,
|
|
Benjamin Gaignard <benjamin.gaignard@collabora.com>,
|
|
Sebastian Fricke <sebastian.fricke@collabora.com>,
|
|
Christopher Obbard <chris.obbard@collabora.com>,
|
|
linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
|
|
linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
|
|
Jonas Karlman <jonas@kwiboo.se>
|
|
Subject: [PATCH v4 02/11] media: v4l2: Add NV15 and NV20 pixel formats
|
|
Date: Sun, 5 Nov 2023 16:55:01 +0000
|
|
Message-ID: <20231105165521.3592037-3-jonas@kwiboo.se>
|
|
X-Mailer: git-send-email 2.42.0
|
|
In-Reply-To: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
References: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 8bit
|
|
X-Report-Abuse-To: abuse@forwardemail.net
|
|
X-Report-Abuse: abuse@forwardemail.net
|
|
X-Complaints-To: abuse@forwardemail.net
|
|
X-ForwardEmail-Version: 0.4.40
|
|
X-ForwardEmail-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net,
|
|
149.28.215.223
|
|
X-ForwardEmail-ID: 6547c90742ad2f8d152468f4
|
|
Precedence: bulk
|
|
List-ID: <linux-media.vger.kernel.org>
|
|
X-Mailing-List: linux-media@vger.kernel.org
|
|
Status: RO
|
|
Content-Length: 9980
|
|
Lines: 237
|
|
|
|
Add NV15 and NV20 pixel formats used by the Rockchip Video Decoder for
|
|
10-bit buffers.
|
|
|
|
NV15 and NV20 is 10-bit 4:2:0/4:2:2 semi-planar YUV formats similar to
|
|
NV12 and NV16, using 10-bit components with no padding between each
|
|
component. Instead, a group of 4 luminance/chrominance samples are
|
|
stored over 5 bytes in little endian order:
|
|
|
|
YYYY = UVUV = 4 * 10 bits = 40 bits = 5 bytes
|
|
|
|
The '15' and '20' suffix refers to the optimum effective bits per pixel
|
|
which is achieved when the total number of luminance samples is a
|
|
multiple of 8 for NV15 and 4 for NV20.
|
|
|
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|
---
|
|
v4:
|
|
- No change
|
|
|
|
v3:
|
|
- Use bpp and bpp_div instead of the misuse of block_w/block_h
|
|
- Update documentation, expand to use full 4x4 sample image
|
|
|
|
.../media/v4l/pixfmt-yuv-planar.rst | 128 ++++++++++++++++++
|
|
drivers/media/v4l2-core/v4l2-common.c | 2 +
|
|
drivers/media/v4l2-core/v4l2-ioctl.c | 2 +
|
|
include/uapi/linux/videodev2.h | 2 +
|
|
4 files changed, 134 insertions(+)
|
|
|
|
diff --git a/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst b/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst
|
|
index 1840224faa41..4366cdcb970e 100644
|
|
--- a/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst
|
|
+++ b/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst
|
|
@@ -79,6 +79,13 @@ All components are stored with the same number of bits per component.
|
|
- Cr, Cb
|
|
- Yes
|
|
- Linear
|
|
+ * - V4L2_PIX_FMT_NV15
|
|
+ - 'NV15'
|
|
+ - 10
|
|
+ - 4:2:0
|
|
+ - Cb, Cr
|
|
+ - Yes
|
|
+ - Linear
|
|
* - V4L2_PIX_FMT_NV12M
|
|
- 'NM12'
|
|
- 8
|
|
@@ -158,6 +165,13 @@ All components are stored with the same number of bits per component.
|
|
- Cr, Cb
|
|
- Yes
|
|
- Linear
|
|
+ * - V4L2_PIX_FMT_NV20
|
|
+ - 'NV20'
|
|
+ - 10
|
|
+ - 4:2:2
|
|
+ - Cb, Cr
|
|
+ - Yes
|
|
+ - Linear
|
|
* - V4L2_PIX_FMT_NV16M
|
|
- 'NM16'
|
|
- 8
|
|
@@ -288,6 +302,57 @@ of the luma plane.
|
|
- Cr\ :sub:`11`
|
|
|
|
|
|
+.. _V4L2-PIX-FMT-NV15:
|
|
+
|
|
+NV15
|
|
+----
|
|
+
|
|
+Semi-planar 10-bit YUV 4:2:0 format similar to NV12, using 10-bit components
|
|
+with no padding between each component. A group of 4 components are stored over
|
|
+5 bytes in little endian order.
|
|
+
|
|
+.. flat-table:: Sample 4x4 NV15 Image (1 byte per cell)
|
|
+ :header-rows: 0
|
|
+ :stub-columns: 0
|
|
+
|
|
+ * - start + 0:
|
|
+ - Y'\ :sub:`00[7:0]`
|
|
+ - Y'\ :sub:`01[5:0]`\ Y'\ :sub:`00[9:8]`
|
|
+ - Y'\ :sub:`02[3:0]`\ Y'\ :sub:`01[9:6]`
|
|
+ - Y'\ :sub:`03[1:0]`\ Y'\ :sub:`02[9:4]`
|
|
+ - Y'\ :sub:`03[9:2]`
|
|
+ * - start + 5:
|
|
+ - Y'\ :sub:`10[7:0]`
|
|
+ - Y'\ :sub:`11[5:0]`\ Y'\ :sub:`10[9:8]`
|
|
+ - Y'\ :sub:`12[3:0]`\ Y'\ :sub:`11[9:6]`
|
|
+ - Y'\ :sub:`13[1:0]`\ Y'\ :sub:`12[9:4]`
|
|
+ - Y'\ :sub:`13[9:2]`
|
|
+ * - start + 10:
|
|
+ - Y'\ :sub:`20[7:0]`
|
|
+ - Y'\ :sub:`21[5:0]`\ Y'\ :sub:`20[9:8]`
|
|
+ - Y'\ :sub:`22[3:0]`\ Y'\ :sub:`21[9:6]`
|
|
+ - Y'\ :sub:`23[1:0]`\ Y'\ :sub:`22[9:4]`
|
|
+ - Y'\ :sub:`23[9:2]`
|
|
+ * - start + 15:
|
|
+ - Y'\ :sub:`30[7:0]`
|
|
+ - Y'\ :sub:`31[5:0]`\ Y'\ :sub:`30[9:8]`
|
|
+ - Y'\ :sub:`32[3:0]`\ Y'\ :sub:`31[9:6]`
|
|
+ - Y'\ :sub:`33[1:0]`\ Y'\ :sub:`32[9:4]`
|
|
+ - Y'\ :sub:`33[9:2]`
|
|
+ * - start + 20:
|
|
+ - Cb\ :sub:`00[7:0]`
|
|
+ - Cr\ :sub:`00[5:0]`\ Cb\ :sub:`00[9:8]`
|
|
+ - Cb\ :sub:`01[3:0]`\ Cr\ :sub:`00[9:6]`
|
|
+ - Cr\ :sub:`01[1:0]`\ Cb\ :sub:`01[9:4]`
|
|
+ - Cr\ :sub:`01[9:2]`
|
|
+ * - start + 25:
|
|
+ - Cb\ :sub:`10[7:0]`
|
|
+ - Cr\ :sub:`10[5:0]`\ Cb\ :sub:`10[9:8]`
|
|
+ - Cb\ :sub:`11[3:0]`\ Cr\ :sub:`10[9:6]`
|
|
+ - Cr\ :sub:`11[1:0]`\ Cb\ :sub:`11[9:4]`
|
|
+ - Cr\ :sub:`11[9:2]`
|
|
+
|
|
+
|
|
.. _V4L2-PIX-FMT-NV12MT:
|
|
.. _V4L2-PIX-FMT-NV12MT-16X16:
|
|
.. _V4L2-PIX-FMT-NV12-4L4:
|
|
@@ -500,6 +565,69 @@ number of lines as the luma plane.
|
|
- Cr\ :sub:`32`
|
|
|
|
|
|
+.. _V4L2-PIX-FMT-NV20:
|
|
+
|
|
+NV20
|
|
+----
|
|
+
|
|
+Semi-planar 10-bit YUV 4:2:2 format similar to NV16, using 10-bit components
|
|
+with no padding between each component. A group of 4 components are stored over
|
|
+5 bytes in little endian order.
|
|
+
|
|
+.. flat-table:: Sample 4x4 NV20 Image (1 byte per cell)
|
|
+ :header-rows: 0
|
|
+ :stub-columns: 0
|
|
+
|
|
+ * - start + 0:
|
|
+ - Y'\ :sub:`00[7:0]`
|
|
+ - Y'\ :sub:`01[5:0]`\ Y'\ :sub:`00[9:8]`
|
|
+ - Y'\ :sub:`02[3:0]`\ Y'\ :sub:`01[9:6]`
|
|
+ - Y'\ :sub:`03[1:0]`\ Y'\ :sub:`02[9:4]`
|
|
+ - Y'\ :sub:`03[9:2]`
|
|
+ * - start + 5:
|
|
+ - Y'\ :sub:`10[7:0]`
|
|
+ - Y'\ :sub:`11[5:0]`\ Y'\ :sub:`10[9:8]`
|
|
+ - Y'\ :sub:`12[3:0]`\ Y'\ :sub:`11[9:6]`
|
|
+ - Y'\ :sub:`13[1:0]`\ Y'\ :sub:`12[9:4]`
|
|
+ - Y'\ :sub:`13[9:2]`
|
|
+ * - start + 10:
|
|
+ - Y'\ :sub:`20[7:0]`
|
|
+ - Y'\ :sub:`21[5:0]`\ Y'\ :sub:`20[9:8]`
|
|
+ - Y'\ :sub:`22[3:0]`\ Y'\ :sub:`21[9:6]`
|
|
+ - Y'\ :sub:`23[1:0]`\ Y'\ :sub:`22[9:4]`
|
|
+ - Y'\ :sub:`23[9:2]`
|
|
+ * - start + 15:
|
|
+ - Y'\ :sub:`30[7:0]`
|
|
+ - Y'\ :sub:`31[5:0]`\ Y'\ :sub:`30[9:8]`
|
|
+ - Y'\ :sub:`32[3:0]`\ Y'\ :sub:`31[9:6]`
|
|
+ - Y'\ :sub:`33[1:0]`\ Y'\ :sub:`32[9:4]`
|
|
+ - Y'\ :sub:`33[9:2]`
|
|
+ * - start + 20:
|
|
+ - Cb\ :sub:`00[7:0]`
|
|
+ - Cr\ :sub:`00[5:0]`\ Cb\ :sub:`00[9:8]`
|
|
+ - Cb\ :sub:`01[3:0]`\ Cr\ :sub:`00[9:6]`
|
|
+ - Cr\ :sub:`01[1:0]`\ Cb\ :sub:`01[9:4]`
|
|
+ - Cr\ :sub:`01[9:2]`
|
|
+ * - start + 25:
|
|
+ - Cb\ :sub:`10[7:0]`
|
|
+ - Cr\ :sub:`10[5:0]`\ Cb\ :sub:`10[9:8]`
|
|
+ - Cb\ :sub:`11[3:0]`\ Cr\ :sub:`10[9:6]`
|
|
+ - Cr\ :sub:`11[1:0]`\ Cb\ :sub:`11[9:4]`
|
|
+ - Cr\ :sub:`11[9:2]`
|
|
+ * - start + 30:
|
|
+ - Cb\ :sub:`20[7:0]`
|
|
+ - Cr\ :sub:`20[5:0]`\ Cb\ :sub:`20[9:8]`
|
|
+ - Cb\ :sub:`21[3:0]`\ Cr\ :sub:`20[9:6]`
|
|
+ - Cr\ :sub:`21[1:0]`\ Cb\ :sub:`21[9:4]`
|
|
+ - Cr\ :sub:`21[9:2]`
|
|
+ * - start + 35:
|
|
+ - Cb\ :sub:`30[7:0]`
|
|
+ - Cr\ :sub:`30[5:0]`\ Cb\ :sub:`30[9:8]`
|
|
+ - Cb\ :sub:`31[3:0]`\ Cr\ :sub:`30[9:6]`
|
|
+ - Cr\ :sub:`31[1:0]`\ Cb\ :sub:`31[9:4]`
|
|
+ - Cr\ :sub:`31[9:2]`
|
|
+
|
|
+
|
|
.. _V4L2-PIX-FMT-NV24:
|
|
.. _V4L2-PIX-FMT-NV42:
|
|
|
|
diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
|
|
index 834b426da8b1..c65ffab5800a 100644
|
|
--- a/drivers/media/v4l2-core/v4l2-common.c
|
|
+++ b/drivers/media/v4l2-core/v4l2-common.c
|
|
@@ -270,8 +270,10 @@ const struct v4l2_format_info *v4l2_format_info(u32 format)
|
|
/* YUV planar formats */
|
|
{ .format = V4L2_PIX_FMT_NV12, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .bpp_div = { 1, 1, 1, 1 }, .hdiv = 2, .vdiv = 2 },
|
|
{ .format = V4L2_PIX_FMT_NV21, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .bpp_div = { 1, 1, 1, 1 }, .hdiv = 2, .vdiv = 2 },
|
|
+ { .format = V4L2_PIX_FMT_NV15, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 5, 10, 0, 0 }, .bpp_div = { 4, 4, 1, 1 }, .hdiv = 2, .vdiv = 2 },
|
|
{ .format = V4L2_PIX_FMT_NV16, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .bpp_div = { 1, 1, 1, 1 }, .hdiv = 2, .vdiv = 1 },
|
|
{ .format = V4L2_PIX_FMT_NV61, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .bpp_div = { 1, 1, 1, 1 }, .hdiv = 2, .vdiv = 1 },
|
|
+ { .format = V4L2_PIX_FMT_NV20, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 5, 10, 0, 0 }, .bpp_div = { 4, 4, 1, 1 }, .hdiv = 2, .vdiv = 1 },
|
|
{ .format = V4L2_PIX_FMT_NV24, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
|
|
{ .format = V4L2_PIX_FMT_NV42, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
|
|
{ .format = V4L2_PIX_FMT_P010, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 2, 2, 0, 0 }, .bpp_div = { 1, 1, 1, 1 }, .hdiv = 2, .vdiv = 1 },
|
|
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
|
|
index 9b1de54ce379..937434e5f2c1 100644
|
|
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
|
|
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
|
|
@@ -1347,8 +1347,10 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
|
|
case V4L2_PIX_FMT_YUV48_12: descr = "12-bit YUV 4:4:4 Packed"; break;
|
|
case V4L2_PIX_FMT_NV12: descr = "Y/UV 4:2:0"; break;
|
|
case V4L2_PIX_FMT_NV21: descr = "Y/VU 4:2:0"; break;
|
|
+ case V4L2_PIX_FMT_NV15: descr = "10-bit Y/UV 4:2:0 (Packed)"; break;
|
|
case V4L2_PIX_FMT_NV16: descr = "Y/UV 4:2:2"; break;
|
|
case V4L2_PIX_FMT_NV61: descr = "Y/VU 4:2:2"; break;
|
|
+ case V4L2_PIX_FMT_NV20: descr = "10-bit Y/UV 4:2:2 (Packed)"; break;
|
|
case V4L2_PIX_FMT_NV24: descr = "Y/UV 4:4:4"; break;
|
|
case V4L2_PIX_FMT_NV42: descr = "Y/VU 4:4:4"; break;
|
|
case V4L2_PIX_FMT_P010: descr = "10-bit Y/UV 4:2:0"; break;
|
|
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
|
|
index c3d4e490ce7c..617340c43e40 100644
|
|
--- a/include/uapi/linux/videodev2.h
|
|
+++ b/include/uapi/linux/videodev2.h
|
|
@@ -638,8 +638,10 @@ struct v4l2_pix_format {
|
|
/* two planes -- one Y, one Cr + Cb interleaved */
|
|
#define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */
|
|
#define V4L2_PIX_FMT_NV21 v4l2_fourcc('N', 'V', '2', '1') /* 12 Y/CrCb 4:2:0 */
|
|
+#define V4L2_PIX_FMT_NV15 v4l2_fourcc('N', 'V', '1', '5') /* 15 Y/CbCr 4:2:0 10-bit packed */
|
|
#define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */
|
|
#define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */
|
|
+#define V4L2_PIX_FMT_NV20 v4l2_fourcc('N', 'V', '2', '0') /* 20 Y/CbCr 4:2:2 10-bit packed */
|
|
#define V4L2_PIX_FMT_NV24 v4l2_fourcc('N', 'V', '2', '4') /* 24 Y/CbCr 4:4:4 */
|
|
#define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2') /* 24 Y/CrCb 4:4:4 */
|
|
#define V4L2_PIX_FMT_P010 v4l2_fourcc('P', '0', '1', '0') /* 24 Y/CbCr 4:2:0 10-bit per component */
|
|
--
|
|
2.42.0
|
|
|
|
|
|
From mboxrd@z Thu Jan 1 00:00:00 1970
|
|
Return-Path: <linux-media-owner@vger.kernel.org>
|
|
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
|
|
aws-us-west-2-korg-lkml-1.web.codeaurora.org
|
|
Received: from vger.kernel.org (vger.kernel.org [23.128.96.18])
|
|
by smtp.lore.kernel.org (Postfix) with ESMTP id D15E5C41535
|
|
for <linux-media@archiver.kernel.org>; Sun, 5 Nov 2023 16:55:46 +0000 (UTC)
|
|
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
|
id S229783AbjKEQzr (ORCPT <rfc822;linux-media@archiver.kernel.org>);
|
|
Sun, 5 Nov 2023 11:55:47 -0500
|
|
Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55960 "EHLO
|
|
lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
|
with ESMTP id S229750AbjKEQzp (ORCPT
|
|
<rfc822;linux-media@vger.kernel.org>); Sun, 5 Nov 2023 11:55:45 -0500
|
|
Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223])
|
|
by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3E66683;
|
|
Sun, 5 Nov 2023 08:55:43 -0800 (PST)
|
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se;
|
|
h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To:
|
|
Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be;
|
|
t=1699203340; bh=+OFG4YG5FDD0E7pqkDYNn/y86VqErWzPoJTEkQmn5bo=;
|
|
b=StlZA6dajX8qKmnknsBdHP3Zb/+n/5VM9fvjRarx8NdJAOE9c0/LroE7FCRJMTpAd2QeYPqEk
|
|
GlBJF8Tkoce8+on3TMDoVVVcDVoe64X9F3I8sky3f3QMVM0hRMfESCloGAfBmgJMQOlFbiYJoF8
|
|
jyas+Ej+T3Hdf7GpbMvKscpxZWPdkAR/L0TcjRZ1ecrJCV3tjQb3B0AgNn16RUNk8xal98zksRH
|
|
8AZIkScpnmidofdFs4XzySMSGmQZ8Xm9d2rtbdBZJBhV0izwzGuXM74kGbD1Sfn/PSJvoc1NwTP
|
|
YspiFhJeP4kTyJBikzZ2FU7MJpZRGMnjGYIWOf8kdEQA==
|
|
From: Jonas Karlman <jonas@kwiboo.se>
|
|
To: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
|
|
Mauro Carvalho Chehab <mchehab@kernel.org>,
|
|
Hans Verkuil <hverkuil-cisco@xs4all.nl>,
|
|
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
|
|
Cc: Alex Bee <knaerzche@gmail.com>,
|
|
Nicolas Dufresne <nicolas.dufresne@collabora.com>,
|
|
Benjamin Gaignard <benjamin.gaignard@collabora.com>,
|
|
Sebastian Fricke <sebastian.fricke@collabora.com>,
|
|
Christopher Obbard <chris.obbard@collabora.com>,
|
|
linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
|
|
linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
|
|
Jonas Karlman <jonas@kwiboo.se>
|
|
Subject: [PATCH v4 03/11] media: rkvdec: h264: Use bytesperline and buffer height as virstride
|
|
Date: Sun, 5 Nov 2023 16:55:02 +0000
|
|
Message-ID: <20231105165521.3592037-4-jonas@kwiboo.se>
|
|
X-Mailer: git-send-email 2.42.0
|
|
In-Reply-To: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
References: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 8bit
|
|
X-Report-Abuse-To: abuse@forwardemail.net
|
|
X-Report-Abuse: abuse@forwardemail.net
|
|
X-Complaints-To: abuse@forwardemail.net
|
|
X-ForwardEmail-Version: 0.4.40
|
|
X-ForwardEmail-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net,
|
|
149.28.215.223
|
|
X-ForwardEmail-ID: 6547c90b42ad2f8d15246901
|
|
Precedence: bulk
|
|
List-ID: <linux-media.vger.kernel.org>
|
|
X-Mailing-List: linux-media@vger.kernel.org
|
|
Status: RO
|
|
Content-Length: 1840
|
|
Lines: 58
|
|
|
|
Use bytesperline and buffer height to calculate the strides configured.
|
|
|
|
This does not really change anything other than ensuring the
|
|
bytesperline that is signaled to userspace matches what is configured
|
|
in HW.
|
|
|
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|
---
|
|
v4:
|
|
- No change
|
|
|
|
v3:
|
|
- Remove unnecessary yuv_virstride +=
|
|
|
|
drivers/staging/media/rkvdec/rkvdec-h264.c | 14 +++++++-------
|
|
1 file changed, 7 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
|
index 4fc167b42cf0..7a1e76d423df 100644
|
|
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
|
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
|
@@ -896,9 +896,9 @@ static void config_registers(struct rkvdec_ctx *ctx,
|
|
dma_addr_t rlc_addr;
|
|
dma_addr_t refer_addr;
|
|
u32 rlc_len;
|
|
- u32 hor_virstride = 0;
|
|
- u32 ver_virstride = 0;
|
|
- u32 y_virstride = 0;
|
|
+ u32 hor_virstride;
|
|
+ u32 ver_virstride;
|
|
+ u32 y_virstride;
|
|
u32 yuv_virstride = 0;
|
|
u32 offset;
|
|
dma_addr_t dst_addr;
|
|
@@ -909,16 +909,16 @@ static void config_registers(struct rkvdec_ctx *ctx,
|
|
|
|
f = &ctx->decoded_fmt;
|
|
dst_fmt = &f->fmt.pix_mp;
|
|
- hor_virstride = (sps->bit_depth_luma_minus8 + 8) * dst_fmt->width / 8;
|
|
- ver_virstride = round_up(dst_fmt->height, 16);
|
|
+ hor_virstride = dst_fmt->plane_fmt[0].bytesperline;
|
|
+ ver_virstride = dst_fmt->height;
|
|
y_virstride = hor_virstride * ver_virstride;
|
|
|
|
if (sps->chroma_format_idc == 0)
|
|
yuv_virstride = y_virstride;
|
|
else if (sps->chroma_format_idc == 1)
|
|
- yuv_virstride += y_virstride + y_virstride / 2;
|
|
+ yuv_virstride = y_virstride + y_virstride / 2;
|
|
else if (sps->chroma_format_idc == 2)
|
|
- yuv_virstride += 2 * y_virstride;
|
|
+ yuv_virstride = 2 * y_virstride;
|
|
|
|
reg = RKVDEC_Y_HOR_VIRSTRIDE(hor_virstride / 16) |
|
|
RKVDEC_UV_HOR_VIRSTRIDE(hor_virstride / 16) |
|
|
--
|
|
2.42.0
|
|
|
|
|
|
From mboxrd@z Thu Jan 1 00:00:00 1970
|
|
Return-Path: <linux-media-owner@vger.kernel.org>
|
|
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
|
|
aws-us-west-2-korg-lkml-1.web.codeaurora.org
|
|
Received: from vger.kernel.org (vger.kernel.org [23.128.96.18])
|
|
by smtp.lore.kernel.org (Postfix) with ESMTP id 20224C4167B
|
|
for <linux-media@archiver.kernel.org>; Sun, 5 Nov 2023 16:55:51 +0000 (UTC)
|
|
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
|
id S229863AbjKEQzv (ORCPT <rfc822;linux-media@archiver.kernel.org>);
|
|
Sun, 5 Nov 2023 11:55:51 -0500
|
|
Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38594 "EHLO
|
|
lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
|
with ESMTP id S229750AbjKEQzu (ORCPT
|
|
<rfc822;linux-media@vger.kernel.org>); Sun, 5 Nov 2023 11:55:50 -0500
|
|
Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223])
|
|
by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9A35E83;
|
|
Sun, 5 Nov 2023 08:55:47 -0800 (PST)
|
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se;
|
|
h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To:
|
|
Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be;
|
|
t=1699203344; bh=9YYcLQUrnGdihBMIqGOq7h6o3o2vBA6zqeQq5WUvP+E=;
|
|
b=eD1bLCz2tEhCI1tolmZ2Vjzp0MZ0gVT9Jvs1nWFjuFxp8N+NKZT7j0QlBDBaD1+w7cmQCFei8
|
|
4F5T0hyjf2cAB5Q8QrcBhKv4qTTY+WCbPYE/wfGku+1gS6asFDkGE+ws7ggy7WuAzRP80crHHYY
|
|
aJ0wLjygKoFoM4JDmk8foW2RPtEpn+C5D3J8C6NM+BnYSqQ5I2Pt4edVa9o8Xou7VXSSLMo/d2P
|
|
GFcatom08AiaB6WcjllBvOSR+Aey0GU3xrvkWT3QghBLDhLvb+UBMg8b/UoMU2r5gepuQrhduVU
|
|
QEztP/n2G3V3Ne51W5539Y9gynfSfM1XXNkgJJAubGGg==
|
|
From: Jonas Karlman <jonas@kwiboo.se>
|
|
To: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
|
|
Mauro Carvalho Chehab <mchehab@kernel.org>,
|
|
Hans Verkuil <hverkuil-cisco@xs4all.nl>,
|
|
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
|
|
Cc: Alex Bee <knaerzche@gmail.com>,
|
|
Nicolas Dufresne <nicolas.dufresne@collabora.com>,
|
|
Benjamin Gaignard <benjamin.gaignard@collabora.com>,
|
|
Sebastian Fricke <sebastian.fricke@collabora.com>,
|
|
Christopher Obbard <chris.obbard@collabora.com>,
|
|
linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
|
|
linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
|
|
Jonas Karlman <jonas@kwiboo.se>
|
|
Subject: [PATCH v4 04/11] media: rkvdec: h264: Don't hardcode SPS/PPS parameters
|
|
Date: Sun, 5 Nov 2023 16:55:03 +0000
|
|
Message-ID: <20231105165521.3592037-5-jonas@kwiboo.se>
|
|
X-Mailer: git-send-email 2.42.0
|
|
In-Reply-To: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
References: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 8bit
|
|
X-Report-Abuse-To: abuse@forwardemail.net
|
|
X-Report-Abuse: abuse@forwardemail.net
|
|
X-Complaints-To: abuse@forwardemail.net
|
|
X-ForwardEmail-Version: 0.4.40
|
|
X-ForwardEmail-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net,
|
|
149.28.215.223
|
|
X-ForwardEmail-ID: 6547c90f42ad2f8d1524690e
|
|
Precedence: bulk
|
|
List-ID: <linux-media.vger.kernel.org>
|
|
X-Mailing-List: linux-media@vger.kernel.org
|
|
Status: RO
|
|
Content-Length: 2306
|
|
Lines: 57
|
|
|
|
From: Alex Bee <knaerzche@gmail.com>
|
|
|
|
Some SPS/PPS parameters are currently hardcoded in the driver even
|
|
though they exist in the stable uapi controls.
|
|
|
|
Use values from SPS/PPS controls instead of hardcoding them.
|
|
|
|
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|
[jonas@kwiboo.se: constraint_set_flags condition, commit message]
|
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|
---
|
|
v4:
|
|
- No change
|
|
|
|
v3:
|
|
- New patch
|
|
|
|
drivers/staging/media/rkvdec/rkvdec-h264.c | 13 +++++++------
|
|
1 file changed, 7 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
|
index 7a1e76d423df..8bce8902b8dd 100644
|
|
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
|
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
|
@@ -655,13 +655,14 @@ static void assemble_hw_pps(struct rkvdec_ctx *ctx,
|
|
|
|
#define WRITE_PPS(value, field) set_ps_field(hw_ps->info, field, value)
|
|
/* write sps */
|
|
- WRITE_PPS(0xf, SEQ_PARAMETER_SET_ID);
|
|
- WRITE_PPS(0xff, PROFILE_IDC);
|
|
- WRITE_PPS(1, CONSTRAINT_SET3_FLAG);
|
|
+ WRITE_PPS(sps->seq_parameter_set_id, SEQ_PARAMETER_SET_ID);
|
|
+ WRITE_PPS(sps->profile_idc, PROFILE_IDC);
|
|
+ WRITE_PPS(!!(sps->constraint_set_flags & (1 << 3)), CONSTRAINT_SET3_FLAG);
|
|
WRITE_PPS(sps->chroma_format_idc, CHROMA_FORMAT_IDC);
|
|
WRITE_PPS(sps->bit_depth_luma_minus8, BIT_DEPTH_LUMA);
|
|
WRITE_PPS(sps->bit_depth_chroma_minus8, BIT_DEPTH_CHROMA);
|
|
- WRITE_PPS(0, QPPRIME_Y_ZERO_TRANSFORM_BYPASS_FLAG);
|
|
+ WRITE_PPS(!!(sps->flags & V4L2_H264_SPS_FLAG_QPPRIME_Y_ZERO_TRANSFORM_BYPASS),
|
|
+ QPPRIME_Y_ZERO_TRANSFORM_BYPASS_FLAG);
|
|
WRITE_PPS(sps->log2_max_frame_num_minus4, LOG2_MAX_FRAME_NUM_MINUS4);
|
|
WRITE_PPS(sps->max_num_ref_frames, MAX_NUM_REF_FRAMES);
|
|
WRITE_PPS(sps->pic_order_cnt_type, PIC_ORDER_CNT_TYPE);
|
|
@@ -688,8 +689,8 @@ static void assemble_hw_pps(struct rkvdec_ctx *ctx,
|
|
DIRECT_8X8_INFERENCE_FLAG);
|
|
|
|
/* write pps */
|
|
- WRITE_PPS(0xff, PIC_PARAMETER_SET_ID);
|
|
- WRITE_PPS(0x1f, PPS_SEQ_PARAMETER_SET_ID);
|
|
+ WRITE_PPS(pps->pic_parameter_set_id, PIC_PARAMETER_SET_ID);
|
|
+ WRITE_PPS(pps->seq_parameter_set_id, PPS_SEQ_PARAMETER_SET_ID);
|
|
WRITE_PPS(!!(pps->flags & V4L2_H264_PPS_FLAG_ENTROPY_CODING_MODE),
|
|
ENTROPY_CODING_MODE_FLAG);
|
|
WRITE_PPS(!!(pps->flags & V4L2_H264_PPS_FLAG_BOTTOM_FIELD_PIC_ORDER_IN_FRAME_PRESENT),
|
|
--
|
|
2.42.0
|
|
|
|
|
|
From mboxrd@z Thu Jan 1 00:00:00 1970
|
|
Return-Path: <linux-media-owner@vger.kernel.org>
|
|
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
|
|
aws-us-west-2-korg-lkml-1.web.codeaurora.org
|
|
Received: from vger.kernel.org (vger.kernel.org [23.128.96.18])
|
|
by smtp.lore.kernel.org (Postfix) with ESMTP id 1E995C4332F
|
|
for <linux-media@archiver.kernel.org>; Sun, 5 Nov 2023 16:55:59 +0000 (UTC)
|
|
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
|
id S229908AbjKEQz7 (ORCPT <rfc822;linux-media@archiver.kernel.org>);
|
|
Sun, 5 Nov 2023 11:55:59 -0500
|
|
Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38624 "EHLO
|
|
lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
|
with ESMTP id S229750AbjKEQzy (ORCPT
|
|
<rfc822;linux-media@vger.kernel.org>); Sun, 5 Nov 2023 11:55:54 -0500
|
|
Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223])
|
|
by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0F582D9;
|
|
Sun, 5 Nov 2023 08:55:51 -0800 (PST)
|
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se;
|
|
h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To:
|
|
Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be;
|
|
t=1699203347; bh=QFwovX5RPW7IMq4uUoTrIwvqoq7/7Q8z3p4frGKGekE=;
|
|
b=iogMt8BWbZ0IMRmVXbXItCv2PMI90AvIJerLiaBkLdr5Iz3gxsyeA+sJtYcyrGpEiAq4Cx4jh
|
|
CU6e08rrf0+3hAGVy+uUEWSLW1V9mgO3K0MhMjoD5j3sNnCLB/zlyIgQKEVPNEPMsJJsCjUPrSp
|
|
bkjdHkeuCSVnNC6wRPf9nVTntHFNca6abSevGZl1ivQkXbc4zjsKD0bby05TvBxzYGNDV4jJEvN
|
|
msaVQ7ak2pAhjvxTFBh/wR7hcGbvTNhHB8PrknCBLCMXttDHfgNPsOPd5mIGi3gHBL284C2+afM
|
|
/TMAOTHtW2vO7Dp0JJU8Pi7PNGYV/XciaErgvSuz78Hw==
|
|
From: Jonas Karlman <jonas@kwiboo.se>
|
|
To: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
|
|
Mauro Carvalho Chehab <mchehab@kernel.org>,
|
|
Hans Verkuil <hverkuil-cisco@xs4all.nl>,
|
|
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
|
|
Cc: Alex Bee <knaerzche@gmail.com>,
|
|
Nicolas Dufresne <nicolas.dufresne@collabora.com>,
|
|
Benjamin Gaignard <benjamin.gaignard@collabora.com>,
|
|
Sebastian Fricke <sebastian.fricke@collabora.com>,
|
|
Christopher Obbard <chris.obbard@collabora.com>,
|
|
linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
|
|
linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
|
|
Jonas Karlman <jonas@kwiboo.se>
|
|
Subject: [PATCH v4 05/11] media: rkvdec: h264: Remove SPS validation at streaming start
|
|
Date: Sun, 5 Nov 2023 16:55:04 +0000
|
|
Message-ID: <20231105165521.3592037-6-jonas@kwiboo.se>
|
|
X-Mailer: git-send-email 2.42.0
|
|
In-Reply-To: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
References: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 8bit
|
|
X-Report-Abuse-To: abuse@forwardemail.net
|
|
X-Report-Abuse: abuse@forwardemail.net
|
|
X-Complaints-To: abuse@forwardemail.net
|
|
X-ForwardEmail-Version: 0.4.40
|
|
X-ForwardEmail-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net,
|
|
149.28.215.223
|
|
X-ForwardEmail-ID: 6547c91342ad2f8d1524691b
|
|
Precedence: bulk
|
|
List-ID: <linux-media.vger.kernel.org>
|
|
X-Mailing-List: linux-media@vger.kernel.org
|
|
Status: RO
|
|
Content-Length: 1757
|
|
Lines: 64
|
|
|
|
SPS parameters is validated in try_ctrl() ops so there is no need to
|
|
re-validate when streaming starts.
|
|
|
|
Remove the unnecessary call to validate sps at streaming start.
|
|
|
|
Suggested-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
|
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|
---
|
|
v4:
|
|
- No change
|
|
|
|
v3:
|
|
- New patch
|
|
|
|
drivers/staging/media/rkvdec/rkvdec-h264.c | 19 ++-----------------
|
|
1 file changed, 2 insertions(+), 17 deletions(-)
|
|
|
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
|
index 8bce8902b8dd..815d5359ddd5 100644
|
|
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
|
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
|
@@ -1070,17 +1070,6 @@ static int rkvdec_h264_start(struct rkvdec_ctx *ctx)
|
|
struct rkvdec_dev *rkvdec = ctx->dev;
|
|
struct rkvdec_h264_priv_tbl *priv_tbl;
|
|
struct rkvdec_h264_ctx *h264_ctx;
|
|
- struct v4l2_ctrl *ctrl;
|
|
- int ret;
|
|
-
|
|
- ctrl = v4l2_ctrl_find(&ctx->ctrl_hdl,
|
|
- V4L2_CID_STATELESS_H264_SPS);
|
|
- if (!ctrl)
|
|
- return -EINVAL;
|
|
-
|
|
- ret = rkvdec_h264_validate_sps(ctx, ctrl->p_new.p_h264_sps);
|
|
- if (ret)
|
|
- return ret;
|
|
|
|
h264_ctx = kzalloc(sizeof(*h264_ctx), GFP_KERNEL);
|
|
if (!h264_ctx)
|
|
@@ -1089,8 +1078,8 @@ static int rkvdec_h264_start(struct rkvdec_ctx *ctx)
|
|
priv_tbl = dma_alloc_coherent(rkvdec->dev, sizeof(*priv_tbl),
|
|
&h264_ctx->priv_tbl.dma, GFP_KERNEL);
|
|
if (!priv_tbl) {
|
|
- ret = -ENOMEM;
|
|
- goto err_free_ctx;
|
|
+ kfree(h264_ctx);
|
|
+ return -ENOMEM;
|
|
}
|
|
|
|
h264_ctx->priv_tbl.size = sizeof(*priv_tbl);
|
|
@@ -1100,10 +1089,6 @@ static int rkvdec_h264_start(struct rkvdec_ctx *ctx)
|
|
|
|
ctx->priv = h264_ctx;
|
|
return 0;
|
|
-
|
|
-err_free_ctx:
|
|
- kfree(h264_ctx);
|
|
- return ret;
|
|
}
|
|
|
|
static void rkvdec_h264_stop(struct rkvdec_ctx *ctx)
|
|
--
|
|
2.42.0
|
|
|
|
|
|
From mboxrd@z Thu Jan 1 00:00:00 1970
|
|
Return-Path: <linux-media-owner@vger.kernel.org>
|
|
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
|
|
aws-us-west-2-korg-lkml-1.web.codeaurora.org
|
|
Received: from vger.kernel.org (vger.kernel.org [23.128.96.18])
|
|
by smtp.lore.kernel.org (Postfix) with ESMTP id E72FAC4332F
|
|
for <linux-media@archiver.kernel.org>; Sun, 5 Nov 2023 16:56:03 +0000 (UTC)
|
|
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
|
id S229929AbjKEQ4D (ORCPT <rfc822;linux-media@archiver.kernel.org>);
|
|
Sun, 5 Nov 2023 11:56:03 -0500
|
|
Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40048 "EHLO
|
|
lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
|
with ESMTP id S229972AbjKEQ4B (ORCPT
|
|
<rfc822;linux-media@vger.kernel.org>); Sun, 5 Nov 2023 11:56:01 -0500
|
|
Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223])
|
|
by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ABBE0134;
|
|
Sun, 5 Nov 2023 08:55:55 -0800 (PST)
|
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se;
|
|
h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To:
|
|
Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be;
|
|
t=1699203351; bh=eOQ3o+VKmQncWFPGxsnugYz9IoSdcHeasfArhQJpc8A=;
|
|
b=DxSazXkmvBaYEXuEfUZTO2CrIiKkwVLyRvf+CutflUqddjZ4lu9V1QaDKwHxPC/KnpomVLB/z
|
|
wP0RVGihxRnMmONsgqV7RLCUZFP1U/EyG4zUYMwM5teK2RpY4trsrGiRX7wwbH1KsJiZ/GHnotH
|
|
JWTMsOeokFfQ9dt0Q/RPoHt32/zJciZjvwr3Q3UN6xL0TWgg+AlweSo2bi45hwk6SV/CQVWGl0E
|
|
STWBOr6lOhYkdkyXL4Mu8dKb0VOhjfU6eKaWBNdqlktBK5jFo6ep3Smt0aEZnQWrdE5T/QMuc6h
|
|
LF6bqgyHkpIzskFFblPBoYmMAXhSB3XBVMnzwpZVC40g==
|
|
From: Jonas Karlman <jonas@kwiboo.se>
|
|
To: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
|
|
Mauro Carvalho Chehab <mchehab@kernel.org>,
|
|
Hans Verkuil <hverkuil-cisco@xs4all.nl>,
|
|
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
|
|
Cc: Alex Bee <knaerzche@gmail.com>,
|
|
Nicolas Dufresne <nicolas.dufresne@collabora.com>,
|
|
Benjamin Gaignard <benjamin.gaignard@collabora.com>,
|
|
Sebastian Fricke <sebastian.fricke@collabora.com>,
|
|
Christopher Obbard <chris.obbard@collabora.com>,
|
|
linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
|
|
linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
|
|
Jonas Karlman <jonas@kwiboo.se>
|
|
Subject: [PATCH v4 06/11] media: rkvdec: Extract rkvdec_fill_decoded_pixfmt into helper
|
|
Date: Sun, 5 Nov 2023 16:55:05 +0000
|
|
Message-ID: <20231105165521.3592037-7-jonas@kwiboo.se>
|
|
X-Mailer: git-send-email 2.42.0
|
|
In-Reply-To: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
References: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 8bit
|
|
X-Report-Abuse-To: abuse@forwardemail.net
|
|
X-Report-Abuse: abuse@forwardemail.net
|
|
X-Complaints-To: abuse@forwardemail.net
|
|
X-ForwardEmail-Version: 0.4.40
|
|
X-ForwardEmail-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net,
|
|
149.28.215.223
|
|
X-ForwardEmail-ID: 6547c91742ad2f8d15246928
|
|
Precedence: bulk
|
|
List-ID: <linux-media.vger.kernel.org>
|
|
X-Mailing-List: linux-media@vger.kernel.org
|
|
Status: RO
|
|
Content-Length: 2352
|
|
Lines: 69
|
|
|
|
Extract call to v4l2_fill_pixfmt_mp() and ajusting of sizeimage into a
|
|
helper. Replace current code with a call to the new helper.
|
|
|
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|
---
|
|
v4:
|
|
- Do not reset pix_mp->field in rkvdec_fill_decoded_pixfmt()
|
|
|
|
v3:
|
|
- No changes
|
|
|
|
drivers/staging/media/rkvdec/rkvdec.c | 27 ++++++++++++++-------------
|
|
1 file changed, 14 insertions(+), 13 deletions(-)
|
|
|
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
|
index 84a41792cb4b..0570c790ad08 100644
|
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
|
@@ -27,6 +27,16 @@
|
|
#include "rkvdec.h"
|
|
#include "rkvdec-regs.h"
|
|
|
|
+static void rkvdec_fill_decoded_pixfmt(struct rkvdec_ctx *ctx,
|
|
+ struct v4l2_pix_format_mplane *pix_mp)
|
|
+{
|
|
+ v4l2_fill_pixfmt_mp(pix_mp, pix_mp->pixelformat,
|
|
+ pix_mp->width, pix_mp->height);
|
|
+ pix_mp->plane_fmt[0].sizeimage += 128 *
|
|
+ DIV_ROUND_UP(pix_mp->width, 16) *
|
|
+ DIV_ROUND_UP(pix_mp->height, 16);
|
|
+}
|
|
+
|
|
static int rkvdec_try_ctrl(struct v4l2_ctrl *ctrl)
|
|
{
|
|
struct rkvdec_ctx *ctx = container_of(ctrl->handler, struct rkvdec_ctx, ctrl_hdl);
|
|
@@ -192,13 +202,9 @@ static void rkvdec_reset_decoded_fmt(struct rkvdec_ctx *ctx)
|
|
|
|
rkvdec_reset_fmt(ctx, f, ctx->coded_fmt_desc->decoded_fmts[0]);
|
|
f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
|
- v4l2_fill_pixfmt_mp(&f->fmt.pix_mp,
|
|
- ctx->coded_fmt_desc->decoded_fmts[0],
|
|
- ctx->coded_fmt.fmt.pix_mp.width,
|
|
- ctx->coded_fmt.fmt.pix_mp.height);
|
|
- f->fmt.pix_mp.plane_fmt[0].sizeimage += 128 *
|
|
- DIV_ROUND_UP(f->fmt.pix_mp.width, 16) *
|
|
- DIV_ROUND_UP(f->fmt.pix_mp.height, 16);
|
|
+ f->fmt.pix_mp.width = ctx->coded_fmt.fmt.pix_mp.width;
|
|
+ f->fmt.pix_mp.height = ctx->coded_fmt.fmt.pix_mp.height;
|
|
+ rkvdec_fill_decoded_pixfmt(ctx, &f->fmt.pix_mp);
|
|
}
|
|
|
|
static int rkvdec_enum_framesizes(struct file *file, void *priv,
|
|
@@ -264,12 +270,7 @@ static int rkvdec_try_capture_fmt(struct file *file, void *priv,
|
|
&pix_mp->height,
|
|
&coded_desc->frmsize);
|
|
|
|
- v4l2_fill_pixfmt_mp(pix_mp, pix_mp->pixelformat,
|
|
- pix_mp->width, pix_mp->height);
|
|
- pix_mp->plane_fmt[0].sizeimage +=
|
|
- 128 *
|
|
- DIV_ROUND_UP(pix_mp->width, 16) *
|
|
- DIV_ROUND_UP(pix_mp->height, 16);
|
|
+ rkvdec_fill_decoded_pixfmt(ctx, pix_mp);
|
|
pix_mp->field = V4L2_FIELD_NONE;
|
|
|
|
return 0;
|
|
--
|
|
2.42.0
|
|
|
|
|
|
From mboxrd@z Thu Jan 1 00:00:00 1970
|
|
Return-Path: <linux-media-owner@vger.kernel.org>
|
|
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
|
|
aws-us-west-2-korg-lkml-1.web.codeaurora.org
|
|
Received: from vger.kernel.org (vger.kernel.org [23.128.96.18])
|
|
by smtp.lore.kernel.org (Postfix) with ESMTP id A9C69C4332F
|
|
for <linux-media@archiver.kernel.org>; Sun, 5 Nov 2023 16:56:26 +0000 (UTC)
|
|
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
|
id S230438AbjKEQ41 (ORCPT <rfc822;linux-media@archiver.kernel.org>);
|
|
Sun, 5 Nov 2023 11:56:27 -0500
|
|
Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40098 "EHLO
|
|
lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
|
with ESMTP id S230256AbjKEQ4Q (ORCPT
|
|
<rfc822;linux-media@vger.kernel.org>); Sun, 5 Nov 2023 11:56:16 -0500
|
|
Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223])
|
|
by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1192910C8;
|
|
Sun, 5 Nov 2023 08:56:11 -0800 (PST)
|
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se;
|
|
h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To:
|
|
Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be;
|
|
t=1699203367; bh=lpnBJaNiSOXF2fbVkARa+33opskrlpRAhdbPZ7vR6lI=;
|
|
b=VM49k8elFZ6RRgB1nf7LwO33PFuV3oU0yPReic/VjHWVuJIWjF1BAAqQeJ/kSNr4WviBYt7wc
|
|
yoAzmSrMaXchniGD9+P+AClnI10zGhD6Ms5PVd5D3+60btZDafhrPK3z58o1orIkwbQorItpCN7
|
|
C9SwGc78iqWSqt00jt/1LXXtxIPZmJidD6Hl8dszXb/mSxHFCy02zpZeMCQSZ1t0WPI2jokH9c8
|
|
SI4a8ajRdYOEWjyKSv9R54v8NGjE99w9sBKIJDgTSNbokoEgRzO2xFaBXHTHmM3jEMIvJDFRn04
|
|
LvpAtA46NwI+N4+6y/C2XtBij8WOvmhPWH3EmiP1bMHQ==
|
|
From: Jonas Karlman <jonas@kwiboo.se>
|
|
To: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
|
|
Mauro Carvalho Chehab <mchehab@kernel.org>,
|
|
Hans Verkuil <hverkuil-cisco@xs4all.nl>,
|
|
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
|
|
Cc: Alex Bee <knaerzche@gmail.com>,
|
|
Nicolas Dufresne <nicolas.dufresne@collabora.com>,
|
|
Benjamin Gaignard <benjamin.gaignard@collabora.com>,
|
|
Sebastian Fricke <sebastian.fricke@collabora.com>,
|
|
Christopher Obbard <chris.obbard@collabora.com>,
|
|
linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
|
|
linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
|
|
Jonas Karlman <jonas@kwiboo.se>
|
|
Subject: [PATCH v4 10/11] media: rkvdec: Add get_image_fmt ops
|
|
Date: Sun, 5 Nov 2023 16:55:09 +0000
|
|
Message-ID: <20231105165521.3592037-11-jonas@kwiboo.se>
|
|
X-Mailer: git-send-email 2.42.0
|
|
In-Reply-To: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
References: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 8bit
|
|
X-Report-Abuse-To: abuse@forwardemail.net
|
|
X-Report-Abuse: abuse@forwardemail.net
|
|
X-Complaints-To: abuse@forwardemail.net
|
|
X-ForwardEmail-Version: 0.4.40
|
|
X-ForwardEmail-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net,
|
|
149.28.215.223
|
|
X-ForwardEmail-ID: 6547c92642ad2f8d1524695c
|
|
Precedence: bulk
|
|
List-ID: <linux-media.vger.kernel.org>
|
|
X-Mailing-List: linux-media@vger.kernel.org
|
|
Status: RO
|
|
Content-Length: 3036
|
|
Lines: 102
|
|
|
|
Add support for a get_image_fmt() ops that return the required image
|
|
format.
|
|
|
|
The CAPTURE format is reset when required image format changes and the
|
|
buffer queue is not busy.
|
|
|
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|
---
|
|
v4:
|
|
- Change fmt_opaque into an image format
|
|
- Split patch into two
|
|
|
|
v3:
|
|
- New patch
|
|
|
|
drivers/staging/media/rkvdec/rkvdec.c | 49 +++++++++++++++++++++++++--
|
|
drivers/staging/media/rkvdec/rkvdec.h | 2 ++
|
|
2 files changed, 49 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
|
index 5949d59d4cf9..225aa1f0ac48 100644
|
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
|
@@ -108,15 +108,60 @@ static int rkvdec_try_ctrl(struct v4l2_ctrl *ctrl)
|
|
{
|
|
struct rkvdec_ctx *ctx = container_of(ctrl->handler, struct rkvdec_ctx, ctrl_hdl);
|
|
const struct rkvdec_coded_fmt_desc *desc = ctx->coded_fmt_desc;
|
|
+ struct v4l2_pix_format_mplane *pix_mp = &ctx->decoded_fmt.fmt.pix_mp;
|
|
+ enum rkvdec_image_fmt image_fmt;
|
|
+ struct vb2_queue *vq;
|
|
+ int ret;
|
|
+
|
|
+ if (desc->ops->try_ctrl) {
|
|
+ ret = desc->ops->try_ctrl(ctx, ctrl);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+ }
|
|
+
|
|
+ if (!desc->ops->get_image_fmt)
|
|
+ return 0;
|
|
|
|
- if (desc->ops->try_ctrl)
|
|
- return desc->ops->try_ctrl(ctx, ctrl);
|
|
+ image_fmt = desc->ops->get_image_fmt(ctx, ctrl);
|
|
+ if (ctx->image_fmt == image_fmt)
|
|
+ return 0;
|
|
+
|
|
+ if (rkvdec_is_valid_fmt(ctx, pix_mp->pixelformat, image_fmt))
|
|
+ return 0;
|
|
+
|
|
+ /* format change not allowed when queue is busy */
|
|
+ vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx,
|
|
+ V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
|
|
+ if (vb2_is_busy(vq))
|
|
+ return -EINVAL;
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int rkvdec_s_ctrl(struct v4l2_ctrl *ctrl)
|
|
+{
|
|
+ struct rkvdec_ctx *ctx = container_of(ctrl->handler, struct rkvdec_ctx, ctrl_hdl);
|
|
+ const struct rkvdec_coded_fmt_desc *desc = ctx->coded_fmt_desc;
|
|
+ struct v4l2_pix_format_mplane *pix_mp = &ctx->decoded_fmt.fmt.pix_mp;
|
|
+ enum rkvdec_image_fmt image_fmt;
|
|
+
|
|
+ if (!desc->ops->get_image_fmt)
|
|
+ return 0;
|
|
+
|
|
+ image_fmt = desc->ops->get_image_fmt(ctx, ctrl);
|
|
+ if (ctx->image_fmt == image_fmt)
|
|
+ return 0;
|
|
+
|
|
+ ctx->image_fmt = image_fmt;
|
|
+ if (!rkvdec_is_valid_fmt(ctx, pix_mp->pixelformat, ctx->image_fmt))
|
|
+ rkvdec_reset_decoded_fmt(ctx);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static const struct v4l2_ctrl_ops rkvdec_ctrl_ops = {
|
|
.try_ctrl = rkvdec_try_ctrl,
|
|
+ .s_ctrl = rkvdec_s_ctrl,
|
|
};
|
|
|
|
static const struct rkvdec_ctrl_desc rkvdec_h264_ctrl_descs[] = {
|
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
|
index 6f8cf50c5d99..e466a2753ccf 100644
|
|
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
|
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
|
@@ -73,6 +73,8 @@ struct rkvdec_coded_fmt_ops {
|
|
struct vb2_v4l2_buffer *dst_buf,
|
|
enum vb2_buffer_state result);
|
|
int (*try_ctrl)(struct rkvdec_ctx *ctx, struct v4l2_ctrl *ctrl);
|
|
+ enum rkvdec_image_fmt (*get_image_fmt)(struct rkvdec_ctx *ctx,
|
|
+ struct v4l2_ctrl *ctrl);
|
|
};
|
|
|
|
enum rkvdec_image_fmt {
|
|
--
|
|
2.42.0
|
|
|
|
|
|
From mboxrd@z Thu Jan 1 00:00:00 1970
|
|
Return-Path: <linux-media-owner@vger.kernel.org>
|
|
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
|
|
aws-us-west-2-korg-lkml-1.web.codeaurora.org
|
|
Received: from vger.kernel.org (vger.kernel.org [23.128.96.18])
|
|
by smtp.lore.kernel.org (Postfix) with ESMTP id DF360C4332F
|
|
for <linux-media@archiver.kernel.org>; Sun, 5 Nov 2023 17:05:42 +0000 (UTC)
|
|
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
|
id S229489AbjKERFn (ORCPT <rfc822;linux-media@archiver.kernel.org>);
|
|
Sun, 5 Nov 2023 12:05:43 -0500
|
|
Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36374 "EHLO
|
|
lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
|
with ESMTP id S229445AbjKERFn (ORCPT
|
|
<rfc822;linux-media@vger.kernel.org>); Sun, 5 Nov 2023 12:05:43 -0500
|
|
Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223])
|
|
by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 174C497;
|
|
Sun, 5 Nov 2023 09:05:40 -0800 (PST)
|
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se;
|
|
h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To:
|
|
Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be;
|
|
t=1699203938; bh=7TvJ7hJu85Rv+IB9dyvciIwrrP9mf2NII64BLyqL6pI=;
|
|
b=c6ljQ0zc5Ummv/9BSWkxu9BtNA/+DCE2lXoUKtp9N4iUnWtyAwwNjkL2Bir0OIk0oyAfDbVaO
|
|
DydCMQZT7Xw9thbnRaxqGjl9JxlsfsM1MFfeiApOYBFCYpWvEFdZ4LCAo4KuhyYKaAjXPajcxa1
|
|
AsKteI80bM0J+jDIkZ7JW3WhVsayK8EFvvkRzG0/p/ioaVcDJH00SNkaTSgGVra9Qlb7VK43LKJ
|
|
Z2R+RvTtBArmGOPuOJqasDeCAWCp2U+FQW2KsF0hP4s1QWjBTWvMK5kOCuJ/mJ8TiS1Fj0VP/DY
|
|
7T4m6ZNaWP0ja3sMROTPADMdc+dBmfooxn74yBsZw0xQ==
|
|
From: Jonas Karlman <jonas@kwiboo.se>
|
|
To: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
|
|
Mauro Carvalho Chehab <mchehab@kernel.org>,
|
|
Hans Verkuil <hverkuil-cisco@xs4all.nl>
|
|
Cc: Alex Bee <knaerzche@gmail.com>,
|
|
Nicolas Dufresne <nicolas.dufresne@collabora.com>,
|
|
Benjamin Gaignard <benjamin.gaignard@collabora.com>,
|
|
Sebastian Fricke <sebastian.fricke@collabora.com>,
|
|
Christopher Obbard <chris.obbard@collabora.com>,
|
|
linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
|
|
linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
|
|
Jonas Karlman <jonas@kwiboo.se>
|
|
Subject: [PATCH v4 01/11] media: v4l2-common: Add helpers to calculate bytesperline and sizeimage
|
|
Date: Sun, 5 Nov 2023 16:55:00 +0000
|
|
Message-ID: <20231105165521.3592037-2-jonas@kwiboo.se>
|
|
X-Mailer: git-send-email 2.42.0
|
|
In-Reply-To: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
References: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 8bit
|
|
X-Report-Abuse-To: abuse@forwardemail.net
|
|
X-Report-Abuse: abuse@forwardemail.net
|
|
X-Complaints-To: abuse@forwardemail.net
|
|
X-ForwardEmail-Version: 0.4.40
|
|
X-ForwardEmail-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net,
|
|
149.28.215.223
|
|
X-ForwardEmail-ID: 6547c90342ad2f8d152468e7
|
|
Precedence: bulk
|
|
List-ID: <linux-media.vger.kernel.org>
|
|
X-Mailing-List: linux-media@vger.kernel.org
|
|
Status: RO
|
|
Content-Length: 4617
|
|
Lines: 129
|
|
|
|
Add helper functions to calculate plane bytesperline and sizeimage,
|
|
these new helpers consider bpp div, block width and height when
|
|
calculating plane bytesperline and sizeimage.
|
|
|
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|
---
|
|
v4:
|
|
- No change
|
|
|
|
v3:
|
|
- Consider bpp_div in calculation
|
|
|
|
drivers/media/v4l2-core/v4l2-common.c | 78 +++++++++++++--------------
|
|
1 file changed, 39 insertions(+), 39 deletions(-)
|
|
|
|
diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
|
|
index 3a4b15a98e02..834b426da8b1 100644
|
|
--- a/drivers/media/v4l2-core/v4l2-common.c
|
|
+++ b/drivers/media/v4l2-core/v4l2-common.c
|
|
@@ -350,6 +350,34 @@ static inline unsigned int v4l2_format_block_height(const struct v4l2_format_inf
|
|
return info->block_h[plane];
|
|
}
|
|
|
|
+static inline unsigned int v4l2_format_plane_width(const struct v4l2_format_info *info, int plane,
|
|
+ unsigned int width)
|
|
+{
|
|
+ unsigned int hdiv = plane ? info->hdiv : 1;
|
|
+ unsigned int aligned_width =
|
|
+ ALIGN(width, v4l2_format_block_width(info, plane));
|
|
+
|
|
+ return DIV_ROUND_UP(aligned_width, hdiv) *
|
|
+ info->bpp[plane] / info->bpp_div[plane];
|
|
+}
|
|
+
|
|
+static inline unsigned int v4l2_format_plane_height(const struct v4l2_format_info *info, int plane,
|
|
+ unsigned int height)
|
|
+{
|
|
+ unsigned int vdiv = plane ? info->vdiv : 1;
|
|
+ unsigned int aligned_height =
|
|
+ ALIGN(height, v4l2_format_block_height(info, plane));
|
|
+
|
|
+ return DIV_ROUND_UP(aligned_height, vdiv);
|
|
+}
|
|
+
|
|
+static inline unsigned int v4l2_format_plane_size(const struct v4l2_format_info *info, int plane,
|
|
+ unsigned int width, unsigned int height)
|
|
+{
|
|
+ return v4l2_format_plane_width(info, plane, width) *
|
|
+ v4l2_format_plane_height(info, plane, height);
|
|
+}
|
|
+
|
|
void v4l2_apply_frmsize_constraints(u32 *width, u32 *height,
|
|
const struct v4l2_frmsize_stepwise *frmsize)
|
|
{
|
|
@@ -385,37 +413,19 @@ int v4l2_fill_pixfmt_mp(struct v4l2_pix_format_mplane *pixfmt,
|
|
|
|
if (info->mem_planes == 1) {
|
|
plane = &pixfmt->plane_fmt[0];
|
|
- plane->bytesperline = ALIGN(width, v4l2_format_block_width(info, 0)) * info->bpp[0] / info->bpp_div[0];
|
|
+ plane->bytesperline = v4l2_format_plane_width(info, 0, width);
|
|
plane->sizeimage = 0;
|
|
|
|
- for (i = 0; i < info->comp_planes; i++) {
|
|
- unsigned int hdiv = (i == 0) ? 1 : info->hdiv;
|
|
- unsigned int vdiv = (i == 0) ? 1 : info->vdiv;
|
|
- unsigned int aligned_width;
|
|
- unsigned int aligned_height;
|
|
-
|
|
- aligned_width = ALIGN(width, v4l2_format_block_width(info, i));
|
|
- aligned_height = ALIGN(height, v4l2_format_block_height(info, i));
|
|
-
|
|
- plane->sizeimage += info->bpp[i] *
|
|
- DIV_ROUND_UP(aligned_width, hdiv) *
|
|
- DIV_ROUND_UP(aligned_height, vdiv) / info->bpp_div[i];
|
|
- }
|
|
+ for (i = 0; i < info->comp_planes; i++)
|
|
+ plane->sizeimage +=
|
|
+ v4l2_format_plane_size(info, i, width, height);
|
|
} else {
|
|
for (i = 0; i < info->comp_planes; i++) {
|
|
- unsigned int hdiv = (i == 0) ? 1 : info->hdiv;
|
|
- unsigned int vdiv = (i == 0) ? 1 : info->vdiv;
|
|
- unsigned int aligned_width;
|
|
- unsigned int aligned_height;
|
|
-
|
|
- aligned_width = ALIGN(width, v4l2_format_block_width(info, i));
|
|
- aligned_height = ALIGN(height, v4l2_format_block_height(info, i));
|
|
-
|
|
plane = &pixfmt->plane_fmt[i];
|
|
plane->bytesperline =
|
|
- info->bpp[i] * DIV_ROUND_UP(aligned_width, hdiv) / info->bpp_div[i];
|
|
- plane->sizeimage =
|
|
- plane->bytesperline * DIV_ROUND_UP(aligned_height, vdiv);
|
|
+ v4l2_format_plane_width(info, i, width);
|
|
+ plane->sizeimage = plane->bytesperline *
|
|
+ v4l2_format_plane_height(info, i, height);
|
|
}
|
|
}
|
|
return 0;
|
|
@@ -439,22 +449,12 @@ int v4l2_fill_pixfmt(struct v4l2_pix_format *pixfmt, u32 pixelformat,
|
|
pixfmt->width = width;
|
|
pixfmt->height = height;
|
|
pixfmt->pixelformat = pixelformat;
|
|
- pixfmt->bytesperline = ALIGN(width, v4l2_format_block_width(info, 0)) * info->bpp[0] / info->bpp_div[0];
|
|
+ pixfmt->bytesperline = v4l2_format_plane_width(info, 0, width);
|
|
pixfmt->sizeimage = 0;
|
|
|
|
- for (i = 0; i < info->comp_planes; i++) {
|
|
- unsigned int hdiv = (i == 0) ? 1 : info->hdiv;
|
|
- unsigned int vdiv = (i == 0) ? 1 : info->vdiv;
|
|
- unsigned int aligned_width;
|
|
- unsigned int aligned_height;
|
|
-
|
|
- aligned_width = ALIGN(width, v4l2_format_block_width(info, i));
|
|
- aligned_height = ALIGN(height, v4l2_format_block_height(info, i));
|
|
-
|
|
- pixfmt->sizeimage += info->bpp[i] *
|
|
- DIV_ROUND_UP(aligned_width, hdiv) *
|
|
- DIV_ROUND_UP(aligned_height, vdiv) / info->bpp_div[i];
|
|
- }
|
|
+ for (i = 0; i < info->comp_planes; i++)
|
|
+ pixfmt->sizeimage +=
|
|
+ v4l2_format_plane_size(info, i, width, height);
|
|
return 0;
|
|
}
|
|
EXPORT_SYMBOL_GPL(v4l2_fill_pixfmt);
|
|
--
|
|
2.42.0
|
|
|
|
|
|
From mboxrd@z Thu Jan 1 00:00:00 1970
|
|
Return-Path: <linux-media-owner@vger.kernel.org>
|
|
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
|
|
aws-us-west-2-korg-lkml-1.web.codeaurora.org
|
|
Received: from vger.kernel.org (vger.kernel.org [23.128.96.18])
|
|
by smtp.lore.kernel.org (Postfix) with ESMTP id E8AB8C4332F
|
|
for <linux-media@archiver.kernel.org>; Sun, 5 Nov 2023 17:06:34 +0000 (UTC)
|
|
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
|
id S229599AbjKERGf (ORCPT <rfc822;linux-media@archiver.kernel.org>);
|
|
Sun, 5 Nov 2023 12:06:35 -0500
|
|
Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49762 "EHLO
|
|
lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
|
with ESMTP id S229448AbjKERGe (ORCPT
|
|
<rfc822;linux-media@vger.kernel.org>); Sun, 5 Nov 2023 12:06:34 -0500
|
|
Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223])
|
|
by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 86726CC;
|
|
Sun, 5 Nov 2023 09:06:31 -0800 (PST)
|
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se;
|
|
h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To:
|
|
Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be;
|
|
t=1699203989; bh=DHrB2MDEvgLvMGiiGW4ysBRF9ISWcTsdFhQXpZT8qmk=;
|
|
b=qmG2UqLYMHESXsPdAlgbWWmznBQ+5Rc/W8EIDO0qSi+1yFUmMT+7+LjPru6aNwNGUsKKRYzb/
|
|
EY6npsho/gelDfv/bMhMUH5ndDkQCcOqZCToPdUe0PMb38XzUz5XHCLQMEYwMYTtgLjz4KhCRUu
|
|
g2nf26aFjz09K1jtw4iXOLCLAUYi36nTcDGJD9A13XdIsr8M7IWP/XQB+e7g+eWEKqsgD4JOqzH
|
|
Nab8uOYS4hQZIMT/Ova8vLF2KuzcAjAK6OQVaDE3MvKT7EjLO0Ole1+rQ98P5NmDGs12WosfF9m
|
|
4StMPGZuIZleIWK657/cEYge1ZXLPL+xPAI2af7/C2uQ==
|
|
From: Jonas Karlman <jonas@kwiboo.se>
|
|
To: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
|
|
Mauro Carvalho Chehab <mchehab@kernel.org>,
|
|
Hans Verkuil <hverkuil-cisco@xs4all.nl>,
|
|
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
|
|
Cc: Alex Bee <knaerzche@gmail.com>,
|
|
Nicolas Dufresne <nicolas.dufresne@collabora.com>,
|
|
Benjamin Gaignard <benjamin.gaignard@collabora.com>,
|
|
Sebastian Fricke <sebastian.fricke@collabora.com>,
|
|
Christopher Obbard <chris.obbard@collabora.com>,
|
|
linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
|
|
linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
|
|
Jonas Karlman <jonas@kwiboo.se>
|
|
Subject: [PATCH v4 07/11] media: rkvdec: Move rkvdec_reset_decoded_fmt helper
|
|
Date: Sun, 5 Nov 2023 16:55:06 +0000
|
|
Message-ID: <20231105165521.3592037-8-jonas@kwiboo.se>
|
|
X-Mailer: git-send-email 2.42.0
|
|
In-Reply-To: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
References: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 8bit
|
|
X-Report-Abuse-To: abuse@forwardemail.net
|
|
X-Report-Abuse: abuse@forwardemail.net
|
|
X-Complaints-To: abuse@forwardemail.net
|
|
X-ForwardEmail-Version: 0.4.40
|
|
X-ForwardEmail-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net,
|
|
149.28.215.223
|
|
X-ForwardEmail-ID: 6547c91a42ad2f8d15246935
|
|
Precedence: bulk
|
|
List-ID: <linux-media.vger.kernel.org>
|
|
X-Mailing-List: linux-media@vger.kernel.org
|
|
Status: RO
|
|
Content-Length: 2929
|
|
Lines: 88
|
|
|
|
Move rkvdec_reset_decoded_fmt() and the called rkvdec_reset_fmt() helper
|
|
functions in preparation for adding a new caller in an upcoming patch.
|
|
|
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|
---
|
|
v4:
|
|
- No change
|
|
|
|
v3:
|
|
- New patch
|
|
|
|
drivers/staging/media/rkvdec/rkvdec.c | 46 +++++++++++++--------------
|
|
1 file changed, 23 insertions(+), 23 deletions(-)
|
|
|
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
|
index 0570c790ad08..7a79840470e1 100644
|
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
|
@@ -37,6 +37,29 @@ static void rkvdec_fill_decoded_pixfmt(struct rkvdec_ctx *ctx,
|
|
DIV_ROUND_UP(pix_mp->height, 16);
|
|
}
|
|
|
|
+static void rkvdec_reset_fmt(struct rkvdec_ctx *ctx, struct v4l2_format *f,
|
|
+ u32 fourcc)
|
|
+{
|
|
+ memset(f, 0, sizeof(*f));
|
|
+ f->fmt.pix_mp.pixelformat = fourcc;
|
|
+ f->fmt.pix_mp.field = V4L2_FIELD_NONE;
|
|
+ f->fmt.pix_mp.colorspace = V4L2_COLORSPACE_REC709;
|
|
+ f->fmt.pix_mp.ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT;
|
|
+ f->fmt.pix_mp.quantization = V4L2_QUANTIZATION_DEFAULT;
|
|
+ f->fmt.pix_mp.xfer_func = V4L2_XFER_FUNC_DEFAULT;
|
|
+}
|
|
+
|
|
+static void rkvdec_reset_decoded_fmt(struct rkvdec_ctx *ctx)
|
|
+{
|
|
+ struct v4l2_format *f = &ctx->decoded_fmt;
|
|
+
|
|
+ rkvdec_reset_fmt(ctx, f, ctx->coded_fmt_desc->decoded_fmts[0]);
|
|
+ f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
|
+ f->fmt.pix_mp.width = ctx->coded_fmt.fmt.pix_mp.width;
|
|
+ f->fmt.pix_mp.height = ctx->coded_fmt.fmt.pix_mp.height;
|
|
+ rkvdec_fill_decoded_pixfmt(ctx, &f->fmt.pix_mp);
|
|
+}
|
|
+
|
|
static int rkvdec_try_ctrl(struct v4l2_ctrl *ctrl)
|
|
{
|
|
struct rkvdec_ctx *ctx = container_of(ctrl->handler, struct rkvdec_ctx, ctrl_hdl);
|
|
@@ -169,18 +192,6 @@ rkvdec_find_coded_fmt_desc(u32 fourcc)
|
|
return NULL;
|
|
}
|
|
|
|
-static void rkvdec_reset_fmt(struct rkvdec_ctx *ctx, struct v4l2_format *f,
|
|
- u32 fourcc)
|
|
-{
|
|
- memset(f, 0, sizeof(*f));
|
|
- f->fmt.pix_mp.pixelformat = fourcc;
|
|
- f->fmt.pix_mp.field = V4L2_FIELD_NONE;
|
|
- f->fmt.pix_mp.colorspace = V4L2_COLORSPACE_REC709;
|
|
- f->fmt.pix_mp.ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT;
|
|
- f->fmt.pix_mp.quantization = V4L2_QUANTIZATION_DEFAULT;
|
|
- f->fmt.pix_mp.xfer_func = V4L2_XFER_FUNC_DEFAULT;
|
|
-}
|
|
-
|
|
static void rkvdec_reset_coded_fmt(struct rkvdec_ctx *ctx)
|
|
{
|
|
struct v4l2_format *f = &ctx->coded_fmt;
|
|
@@ -196,17 +207,6 @@ static void rkvdec_reset_coded_fmt(struct rkvdec_ctx *ctx)
|
|
ctx->coded_fmt_desc->ops->adjust_fmt(ctx, f);
|
|
}
|
|
|
|
-static void rkvdec_reset_decoded_fmt(struct rkvdec_ctx *ctx)
|
|
-{
|
|
- struct v4l2_format *f = &ctx->decoded_fmt;
|
|
-
|
|
- rkvdec_reset_fmt(ctx, f, ctx->coded_fmt_desc->decoded_fmts[0]);
|
|
- f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
|
- f->fmt.pix_mp.width = ctx->coded_fmt.fmt.pix_mp.width;
|
|
- f->fmt.pix_mp.height = ctx->coded_fmt.fmt.pix_mp.height;
|
|
- rkvdec_fill_decoded_pixfmt(ctx, &f->fmt.pix_mp);
|
|
-}
|
|
-
|
|
static int rkvdec_enum_framesizes(struct file *file, void *priv,
|
|
struct v4l2_frmsizeenum *fsize)
|
|
{
|
|
--
|
|
2.42.0
|
|
|
|
|
|
From mboxrd@z Thu Jan 1 00:00:00 1970
|
|
Return-Path: <linux-media-owner@vger.kernel.org>
|
|
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
|
|
aws-us-west-2-korg-lkml-1.web.codeaurora.org
|
|
Received: from vger.kernel.org (vger.kernel.org [23.128.96.18])
|
|
by smtp.lore.kernel.org (Postfix) with ESMTP id 13D34C4167D
|
|
for <linux-media@archiver.kernel.org>; Sun, 5 Nov 2023 17:06:36 +0000 (UTC)
|
|
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
|
id S229713AbjKERGg (ORCPT <rfc822;linux-media@archiver.kernel.org>);
|
|
Sun, 5 Nov 2023 12:06:36 -0500
|
|
Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49742 "EHLO
|
|
lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
|
with ESMTP id S229445AbjKERGe (ORCPT
|
|
<rfc822;linux-media@vger.kernel.org>); Sun, 5 Nov 2023 12:06:34 -0500
|
|
Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223])
|
|
by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 658B0BE;
|
|
Sun, 5 Nov 2023 09:06:31 -0800 (PST)
|
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se;
|
|
h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To:
|
|
Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be;
|
|
t=1699203989; bh=xMWdTI2tUEFKp2F1sr+htYd15e9XusEq/UI6wwQ23Zo=;
|
|
b=ZyiltVXf8DDsLqPsgtPJgmb3HjfrtesgDPcdXKeTv9LmdPuf5p/dHGViNsOMP55fb0AllTPZI
|
|
+GYZTNfnkZRUci2yDg85xvcVfB4qqwcOerT5AiZ2yI+b3fluYbcT/aQYBcOfWFmsC38AMYUObPE
|
|
7uB+brrbLncf+LOFQvobQi1o9aZKobaW7glDrpjrHlmXU5Cd6sGaFubfnqBZSKhRcnhUdV5F2se
|
|
3h1YHIp7EfEXXyMy6TRcqAn4dQWILwcVQPSfBjLUGRNOGxmXVBxQ/ucfLmqBfGnCqYezK/EhLhu
|
|
VaHDM9J/9hnv8XqC38Tp71ktBmt0DX+gjp/G4cJ9tXsA==
|
|
From: Jonas Karlman <jonas@kwiboo.se>
|
|
To: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
|
|
Mauro Carvalho Chehab <mchehab@kernel.org>,
|
|
Hans Verkuil <hverkuil-cisco@xs4all.nl>,
|
|
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
|
|
Cc: Alex Bee <knaerzche@gmail.com>,
|
|
Nicolas Dufresne <nicolas.dufresne@collabora.com>,
|
|
Benjamin Gaignard <benjamin.gaignard@collabora.com>,
|
|
Sebastian Fricke <sebastian.fricke@collabora.com>,
|
|
Christopher Obbard <chris.obbard@collabora.com>,
|
|
linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
|
|
linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
|
|
Jonas Karlman <jonas@kwiboo.se>
|
|
Subject: [PATCH v4 08/11] media: rkvdec: Extract decoded format enumeration into helper
|
|
Date: Sun, 5 Nov 2023 16:55:07 +0000
|
|
Message-ID: <20231105165521.3592037-9-jonas@kwiboo.se>
|
|
X-Mailer: git-send-email 2.42.0
|
|
In-Reply-To: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
References: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 8bit
|
|
X-Report-Abuse-To: abuse@forwardemail.net
|
|
X-Report-Abuse: abuse@forwardemail.net
|
|
X-Complaints-To: abuse@forwardemail.net
|
|
X-ForwardEmail-Version: 0.4.40
|
|
X-ForwardEmail-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net,
|
|
149.28.215.223
|
|
X-ForwardEmail-ID: 6547c91e42ad2f8d15246942
|
|
Precedence: bulk
|
|
List-ID: <linux-media.vger.kernel.org>
|
|
X-Mailing-List: linux-media@vger.kernel.org
|
|
Status: RO
|
|
Content-Length: 3560
|
|
Lines: 114
|
|
|
|
Add a rkvdec_is_valid_fmt() helper that check if a fourcc is a supported
|
|
CAPTURE format, and a rkvdec_enum_decoded_fmt() helper that enumerate
|
|
valid formats.
|
|
|
|
This move current code into helper functions in preparation for adding
|
|
CAPTURE format filtering and validation in next patch.
|
|
|
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|
---
|
|
v4:
|
|
- Rename rkvdec_decoded_fmts() to rkvdec_enum_decoded_fmt()
|
|
- Rename rkvdec_valid_fmt() to rkvdec_is_valid_fmt()
|
|
|
|
v3:
|
|
- New patch
|
|
|
|
drivers/staging/media/rkvdec/rkvdec.c | 49 +++++++++++++++++++--------
|
|
1 file changed, 35 insertions(+), 14 deletions(-)
|
|
|
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
|
index 7a79840470e1..c3aede94c872 100644
|
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
|
@@ -27,6 +27,32 @@
|
|
#include "rkvdec.h"
|
|
#include "rkvdec-regs.h"
|
|
|
|
+static u32 rkvdec_enum_decoded_fmt(struct rkvdec_ctx *ctx, int index)
|
|
+{
|
|
+ const struct rkvdec_coded_fmt_desc *desc = ctx->coded_fmt_desc;
|
|
+
|
|
+ if (WARN_ON(!desc))
|
|
+ return 0;
|
|
+
|
|
+ if (index >= desc->num_decoded_fmts)
|
|
+ return 0;
|
|
+
|
|
+ return desc->decoded_fmts[index];
|
|
+}
|
|
+
|
|
+static bool rkvdec_is_valid_fmt(struct rkvdec_ctx *ctx, u32 fourcc)
|
|
+{
|
|
+ const struct rkvdec_coded_fmt_desc *desc = ctx->coded_fmt_desc;
|
|
+ unsigned int i;
|
|
+
|
|
+ for (i = 0; i < desc->num_decoded_fmts; i++) {
|
|
+ if (desc->decoded_fmts[i] == fourcc)
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ return false;
|
|
+}
|
|
+
|
|
static void rkvdec_fill_decoded_pixfmt(struct rkvdec_ctx *ctx,
|
|
struct v4l2_pix_format_mplane *pix_mp)
|
|
{
|
|
@@ -52,8 +78,10 @@ static void rkvdec_reset_fmt(struct rkvdec_ctx *ctx, struct v4l2_format *f,
|
|
static void rkvdec_reset_decoded_fmt(struct rkvdec_ctx *ctx)
|
|
{
|
|
struct v4l2_format *f = &ctx->decoded_fmt;
|
|
+ u32 fourcc;
|
|
|
|
- rkvdec_reset_fmt(ctx, f, ctx->coded_fmt_desc->decoded_fmts[0]);
|
|
+ fourcc = rkvdec_enum_decoded_fmt(ctx, 0);
|
|
+ rkvdec_reset_fmt(ctx, f, fourcc);
|
|
f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
|
f->fmt.pix_mp.width = ctx->coded_fmt.fmt.pix_mp.width;
|
|
f->fmt.pix_mp.height = ctx->coded_fmt.fmt.pix_mp.height;
|
|
@@ -244,7 +272,6 @@ static int rkvdec_try_capture_fmt(struct file *file, void *priv,
|
|
struct v4l2_pix_format_mplane *pix_mp = &f->fmt.pix_mp;
|
|
struct rkvdec_ctx *ctx = fh_to_rkvdec_ctx(priv);
|
|
const struct rkvdec_coded_fmt_desc *coded_desc;
|
|
- unsigned int i;
|
|
|
|
/*
|
|
* The codec context should point to a coded format desc, if the format
|
|
@@ -255,13 +282,8 @@ static int rkvdec_try_capture_fmt(struct file *file, void *priv,
|
|
if (WARN_ON(!coded_desc))
|
|
return -EINVAL;
|
|
|
|
- for (i = 0; i < coded_desc->num_decoded_fmts; i++) {
|
|
- if (coded_desc->decoded_fmts[i] == pix_mp->pixelformat)
|
|
- break;
|
|
- }
|
|
-
|
|
- if (i == coded_desc->num_decoded_fmts)
|
|
- pix_mp->pixelformat = coded_desc->decoded_fmts[0];
|
|
+ if (!rkvdec_is_valid_fmt(ctx, pix_mp->pixelformat))
|
|
+ pix_mp->pixelformat = rkvdec_enum_decoded_fmt(ctx, 0);
|
|
|
|
/* Always apply the frmsize constraint of the coded end. */
|
|
pix_mp->width = max(pix_mp->width, ctx->coded_fmt.fmt.pix_mp.width);
|
|
@@ -425,14 +447,13 @@ static int rkvdec_enum_capture_fmt(struct file *file, void *priv,
|
|
struct v4l2_fmtdesc *f)
|
|
{
|
|
struct rkvdec_ctx *ctx = fh_to_rkvdec_ctx(priv);
|
|
+ u32 fourcc;
|
|
|
|
- if (WARN_ON(!ctx->coded_fmt_desc))
|
|
- return -EINVAL;
|
|
-
|
|
- if (f->index >= ctx->coded_fmt_desc->num_decoded_fmts)
|
|
+ fourcc = rkvdec_enum_decoded_fmt(ctx, f->index);
|
|
+ if (!fourcc)
|
|
return -EINVAL;
|
|
|
|
- f->pixelformat = ctx->coded_fmt_desc->decoded_fmts[f->index];
|
|
+ f->pixelformat = fourcc;
|
|
return 0;
|
|
}
|
|
|
|
--
|
|
2.42.0
|
|
|
|
|
|
From mboxrd@z Thu Jan 1 00:00:00 1970
|
|
Return-Path: <linux-media-owner@vger.kernel.org>
|
|
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
|
|
aws-us-west-2-korg-lkml-1.web.codeaurora.org
|
|
Received: from vger.kernel.org (vger.kernel.org [23.128.96.18])
|
|
by smtp.lore.kernel.org (Postfix) with ESMTP id 76EB5C4332F
|
|
for <linux-media@archiver.kernel.org>; Sun, 5 Nov 2023 17:06:37 +0000 (UTC)
|
|
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
|
id S229763AbjKERGh (ORCPT <rfc822;linux-media@archiver.kernel.org>);
|
|
Sun, 5 Nov 2023 12:06:37 -0500
|
|
Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49746 "EHLO
|
|
lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
|
with ESMTP id S229468AbjKERGe (ORCPT
|
|
<rfc822;linux-media@vger.kernel.org>); Sun, 5 Nov 2023 12:06:34 -0500
|
|
Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223])
|
|
by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 65B2FC0;
|
|
Sun, 5 Nov 2023 09:06:31 -0800 (PST)
|
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se;
|
|
h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To:
|
|
Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be;
|
|
t=1699203989; bh=agrfRALBNiUBrIChitGx/tWeu1YIIhSrbadQHiAr0/U=;
|
|
b=EqAb0U5L9SU595Hn0hOfOqRGiHEhR7msr6AoN8PLhH//fPEIGnD2XGrABq//gcZ0L4iFzDMn1
|
|
LQVWfRPX2+HolbeaZU5GJYid4xPzyEiMaE7b1ME83f895yElL7cWkVNNruYw2+OZEwf83G1gOhX
|
|
30GscCQ6yADNSg0vZUkJ8O+Gn0wsiC/8o491YC2Vm633H2NTnYBfnn8DD8mt8QjOteS1iO2CLGV
|
|
qRol7kkRs4B5Sw159YFgD2PjT5phdzjb3s5weGf4bC0Oy4NKAzVq8PfKtsRyGjLUWFwyOr5gLf/
|
|
VoOB+lXhBbfM9YZcTvjcotOutLz4xDS89FXy5NWgjjlw==
|
|
From: Jonas Karlman <jonas@kwiboo.se>
|
|
To: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
|
|
Mauro Carvalho Chehab <mchehab@kernel.org>,
|
|
Hans Verkuil <hverkuil-cisco@xs4all.nl>,
|
|
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
|
|
Cc: Alex Bee <knaerzche@gmail.com>,
|
|
Nicolas Dufresne <nicolas.dufresne@collabora.com>,
|
|
Benjamin Gaignard <benjamin.gaignard@collabora.com>,
|
|
Sebastian Fricke <sebastian.fricke@collabora.com>,
|
|
Christopher Obbard <chris.obbard@collabora.com>,
|
|
linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
|
|
linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
|
|
Jonas Karlman <jonas@kwiboo.se>
|
|
Subject: [PATCH v4 09/11] media: rkvdec: Add image format concept
|
|
Date: Sun, 5 Nov 2023 16:55:08 +0000
|
|
Message-ID: <20231105165521.3592037-10-jonas@kwiboo.se>
|
|
X-Mailer: git-send-email 2.42.0
|
|
In-Reply-To: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
References: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 8bit
|
|
X-Report-Abuse-To: abuse@forwardemail.net
|
|
X-Report-Abuse: abuse@forwardemail.net
|
|
X-Complaints-To: abuse@forwardemail.net
|
|
X-ForwardEmail-Version: 0.4.40
|
|
X-ForwardEmail-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net,
|
|
149.28.215.223
|
|
X-ForwardEmail-ID: 6547c92242ad2f8d1524694f
|
|
Precedence: bulk
|
|
List-ID: <linux-media.vger.kernel.org>
|
|
X-Mailing-List: linux-media@vger.kernel.org
|
|
Status: RO
|
|
Content-Length: 5178
|
|
Lines: 164
|
|
|
|
Add an enum rkvdec_image_fmt used to signal an image format, e.g.
|
|
4:2:0 8-bit, 4:2:0 10-bit or any.
|
|
|
|
Tag each supported CAPUTRE format with an image format and use this tag
|
|
to filter out unsupported CAPTURE formats.
|
|
|
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|
---
|
|
v4:
|
|
- Change fmt_opaque into an image format
|
|
- Split patch into two
|
|
|
|
v3:
|
|
- New patch
|
|
|
|
drivers/staging/media/rkvdec/rkvdec.c | 45 ++++++++++++++++++++-------
|
|
drivers/staging/media/rkvdec/rkvdec.h | 13 +++++++-
|
|
2 files changed, 45 insertions(+), 13 deletions(-)
|
|
|
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
|
index c3aede94c872..5949d59d4cf9 100644
|
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
|
@@ -27,26 +27,42 @@
|
|
#include "rkvdec.h"
|
|
#include "rkvdec-regs.h"
|
|
|
|
-static u32 rkvdec_enum_decoded_fmt(struct rkvdec_ctx *ctx, int index)
|
|
+static inline bool rkvdec_image_fmt_match(enum rkvdec_image_fmt fmt1,
|
|
+ enum rkvdec_image_fmt fmt2)
|
|
+{
|
|
+ return fmt1 == fmt2 || fmt2 == RKVDEC_IMG_FMT_ANY ||
|
|
+ fmt1 == RKVDEC_IMG_FMT_ANY;
|
|
+}
|
|
+
|
|
+static u32 rkvdec_enum_decoded_fmt(struct rkvdec_ctx *ctx, int index,
|
|
+ enum rkvdec_image_fmt image_fmt)
|
|
{
|
|
const struct rkvdec_coded_fmt_desc *desc = ctx->coded_fmt_desc;
|
|
+ unsigned int i, j;
|
|
|
|
if (WARN_ON(!desc))
|
|
return 0;
|
|
|
|
- if (index >= desc->num_decoded_fmts)
|
|
- return 0;
|
|
+ for (i = 0, j = 0; i < desc->num_decoded_fmts; i++) {
|
|
+ if (rkvdec_image_fmt_match(desc->decoded_fmts[i].image_fmt,
|
|
+ image_fmt) &&
|
|
+ index == j++)
|
|
+ return desc->decoded_fmts[i].fourcc;
|
|
+ }
|
|
|
|
- return desc->decoded_fmts[index];
|
|
+ return 0;
|
|
}
|
|
|
|
-static bool rkvdec_is_valid_fmt(struct rkvdec_ctx *ctx, u32 fourcc)
|
|
+static bool rkvdec_is_valid_fmt(struct rkvdec_ctx *ctx, u32 fourcc,
|
|
+ enum rkvdec_image_fmt image_fmt)
|
|
{
|
|
const struct rkvdec_coded_fmt_desc *desc = ctx->coded_fmt_desc;
|
|
unsigned int i;
|
|
|
|
for (i = 0; i < desc->num_decoded_fmts; i++) {
|
|
- if (desc->decoded_fmts[i] == fourcc)
|
|
+ if (rkvdec_image_fmt_match(desc->decoded_fmts[i].image_fmt,
|
|
+ image_fmt) &&
|
|
+ desc->decoded_fmts[i].fourcc == fourcc)
|
|
return true;
|
|
}
|
|
|
|
@@ -80,7 +96,7 @@ static void rkvdec_reset_decoded_fmt(struct rkvdec_ctx *ctx)
|
|
struct v4l2_format *f = &ctx->decoded_fmt;
|
|
u32 fourcc;
|
|
|
|
- fourcc = rkvdec_enum_decoded_fmt(ctx, 0);
|
|
+ fourcc = rkvdec_enum_decoded_fmt(ctx, 0, ctx->image_fmt);
|
|
rkvdec_reset_fmt(ctx, f, fourcc);
|
|
f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
|
f->fmt.pix_mp.width = ctx->coded_fmt.fmt.pix_mp.width;
|
|
@@ -149,8 +165,11 @@ static const struct rkvdec_ctrls rkvdec_h264_ctrls = {
|
|
.num_ctrls = ARRAY_SIZE(rkvdec_h264_ctrl_descs),
|
|
};
|
|
|
|
-static const u32 rkvdec_h264_vp9_decoded_fmts[] = {
|
|
- V4L2_PIX_FMT_NV12,
|
|
+static const struct rkvdec_decoded_fmt_desc rkvdec_h264_vp9_decoded_fmts[] = {
|
|
+ {
|
|
+ .fourcc = V4L2_PIX_FMT_NV12,
|
|
+ .image_fmt = RKVDEC_IMG_FMT_420_8BIT,
|
|
+ },
|
|
};
|
|
|
|
static const struct rkvdec_ctrl_desc rkvdec_vp9_ctrl_descs[] = {
|
|
@@ -282,8 +301,9 @@ static int rkvdec_try_capture_fmt(struct file *file, void *priv,
|
|
if (WARN_ON(!coded_desc))
|
|
return -EINVAL;
|
|
|
|
- if (!rkvdec_is_valid_fmt(ctx, pix_mp->pixelformat))
|
|
- pix_mp->pixelformat = rkvdec_enum_decoded_fmt(ctx, 0);
|
|
+ if (!rkvdec_is_valid_fmt(ctx, pix_mp->pixelformat, ctx->image_fmt))
|
|
+ pix_mp->pixelformat = rkvdec_enum_decoded_fmt(ctx, 0,
|
|
+ ctx->image_fmt);
|
|
|
|
/* Always apply the frmsize constraint of the coded end. */
|
|
pix_mp->width = max(pix_mp->width, ctx->coded_fmt.fmt.pix_mp.width);
|
|
@@ -400,6 +420,7 @@ static int rkvdec_s_output_fmt(struct file *file, void *priv,
|
|
*
|
|
* Note that this will propagates any size changes to the decoded format.
|
|
*/
|
|
+ ctx->image_fmt = RKVDEC_IMG_FMT_ANY;
|
|
rkvdec_reset_decoded_fmt(ctx);
|
|
|
|
/* Propagate colorspace information to capture. */
|
|
@@ -449,7 +470,7 @@ static int rkvdec_enum_capture_fmt(struct file *file, void *priv,
|
|
struct rkvdec_ctx *ctx = fh_to_rkvdec_ctx(priv);
|
|
u32 fourcc;
|
|
|
|
- fourcc = rkvdec_enum_decoded_fmt(ctx, f->index);
|
|
+ fourcc = rkvdec_enum_decoded_fmt(ctx, f->index, ctx->image_fmt);
|
|
if (!fourcc)
|
|
return -EINVAL;
|
|
|
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
|
index 633335ebb9c4..6f8cf50c5d99 100644
|
|
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
|
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
|
@@ -75,13 +75,23 @@ struct rkvdec_coded_fmt_ops {
|
|
int (*try_ctrl)(struct rkvdec_ctx *ctx, struct v4l2_ctrl *ctrl);
|
|
};
|
|
|
|
+enum rkvdec_image_fmt {
|
|
+ RKVDEC_IMG_FMT_ANY = 0,
|
|
+ RKVDEC_IMG_FMT_420_8BIT,
|
|
+};
|
|
+
|
|
+struct rkvdec_decoded_fmt_desc {
|
|
+ u32 fourcc;
|
|
+ enum rkvdec_image_fmt image_fmt;
|
|
+};
|
|
+
|
|
struct rkvdec_coded_fmt_desc {
|
|
u32 fourcc;
|
|
struct v4l2_frmsize_stepwise frmsize;
|
|
const struct rkvdec_ctrls *ctrls;
|
|
const struct rkvdec_coded_fmt_ops *ops;
|
|
unsigned int num_decoded_fmts;
|
|
- const u32 *decoded_fmts;
|
|
+ const struct rkvdec_decoded_fmt_desc *decoded_fmts;
|
|
u32 subsystem_flags;
|
|
};
|
|
|
|
@@ -104,6 +114,7 @@ struct rkvdec_ctx {
|
|
const struct rkvdec_coded_fmt_desc *coded_fmt_desc;
|
|
struct v4l2_ctrl_handler ctrl_hdl;
|
|
struct rkvdec_dev *dev;
|
|
+ enum rkvdec_image_fmt image_fmt;
|
|
void *priv;
|
|
};
|
|
|
|
--
|
|
2.42.0
|
|
|
|
|
|
From mboxrd@z Thu Jan 1 00:00:00 1970
|
|
Return-Path: <linux-media-owner@vger.kernel.org>
|
|
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
|
|
aws-us-west-2-korg-lkml-1.web.codeaurora.org
|
|
Received: from vger.kernel.org (vger.kernel.org [23.128.96.18])
|
|
by smtp.lore.kernel.org (Postfix) with ESMTP id B3251C4167D
|
|
for <linux-media@archiver.kernel.org>; Sun, 5 Nov 2023 17:06:38 +0000 (UTC)
|
|
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
|
id S229819AbjKERGi (ORCPT <rfc822;linux-media@archiver.kernel.org>);
|
|
Sun, 5 Nov 2023 12:06:38 -0500
|
|
Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49766 "EHLO
|
|
lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
|
with ESMTP id S229485AbjKERGe (ORCPT
|
|
<rfc822;linux-media@vger.kernel.org>); Sun, 5 Nov 2023 12:06:34 -0500
|
|
Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223])
|
|
by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8D673CF;
|
|
Sun, 5 Nov 2023 09:06:31 -0800 (PST)
|
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se;
|
|
h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To:
|
|
Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be;
|
|
t=1699203989; bh=WmsBIZTUryXo8sAoKKwOi0tlNS64CkDxgo5K4gfiot4=;
|
|
b=dWnV8LMI4yaUluAmzqSRc780oE8KkxYXJ766IuIV+C7KMLeTDayvTUoFGRLBjgwEWQO422y3R
|
|
G3Agw4uO2OdiC2oHEvn7WzfUN3aqCE41gviOY4xU2Nsc69VNj9j6RtI4c850hkoL/UM++ACftrG
|
|
O6FAClJ47jWIWHZyFCkyb1zIP3zcjf/BIrmw1+sQtHl3vQfBWkz3nN7t20p9G/yUu3gFVKA0wCe
|
|
xkX75Fw61bnYYaHCYsDCH73qRfroG6ZEfcsO+8aumYL0Relj0XqGshXGFTxV1nO6YzXEo16K5as
|
|
ezQuCyd80lFKj3mDBawIjB8Nd2RlMGQYFpxIdE26g5/g==
|
|
From: Jonas Karlman <jonas@kwiboo.se>
|
|
To: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
|
|
Mauro Carvalho Chehab <mchehab@kernel.org>,
|
|
Hans Verkuil <hverkuil-cisco@xs4all.nl>,
|
|
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
|
|
Cc: Alex Bee <knaerzche@gmail.com>,
|
|
Nicolas Dufresne <nicolas.dufresne@collabora.com>,
|
|
Benjamin Gaignard <benjamin.gaignard@collabora.com>,
|
|
Sebastian Fricke <sebastian.fricke@collabora.com>,
|
|
Christopher Obbard <chris.obbard@collabora.com>,
|
|
linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
|
|
linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
|
|
Jonas Karlman <jonas@kwiboo.se>
|
|
Subject: [PATCH v4 11/11] media: rkvdec: h264: Support High 10 and 4:2:2 profiles
|
|
Date: Sun, 5 Nov 2023 16:55:10 +0000
|
|
Message-ID: <20231105165521.3592037-12-jonas@kwiboo.se>
|
|
X-Mailer: git-send-email 2.42.0
|
|
In-Reply-To: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
References: <20231105165521.3592037-1-jonas@kwiboo.se>
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 8bit
|
|
X-Report-Abuse-To: abuse@forwardemail.net
|
|
X-Report-Abuse: abuse@forwardemail.net
|
|
X-Complaints-To: abuse@forwardemail.net
|
|
X-ForwardEmail-Version: 0.4.40
|
|
X-ForwardEmail-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net,
|
|
149.28.215.223
|
|
X-ForwardEmail-ID: 6547c92b42ad2f8d15246969
|
|
Precedence: bulk
|
|
List-ID: <linux-media.vger.kernel.org>
|
|
X-Mailing-List: linux-media@vger.kernel.org
|
|
Status: RO
|
|
Content-Length: 6470
|
|
Lines: 194
|
|
|
|
Add support and enable decoding of H264 High 10 and 4:2:2 profiles.
|
|
|
|
Decoded CAPTURE buffer width is aligned to 64 pixels to accommodate HW
|
|
requirement of 10-bit format buffers, fixes decoding of:
|
|
|
|
- Hi422FR13_SONY_A
|
|
- Hi422FR14_SONY_A
|
|
- Hi422FR15_SONY_A
|
|
- Hi422FR6_SONY_A
|
|
- Hi422FR7_SONY_A
|
|
- Hi422FR8_SONY_A
|
|
- Hi422FR9_SONY_A
|
|
- Hi422FREXT18_SONY_A
|
|
|
|
The get_image_fmt() ops is implemented to select an image format
|
|
required for the provided SPS control.
|
|
|
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|
---
|
|
v4:
|
|
- Change to use get_image_fmt() ops
|
|
|
|
v3:
|
|
- Add get_fmt_opaque ops, the expected pixelformat is used as opaque
|
|
- Add new valid_fmt ops that validate pixelformat matches opaque
|
|
- Update H264_PROFILE control max value
|
|
|
|
drivers/staging/media/rkvdec/rkvdec-h264.c | 37 ++++++++++++++++------
|
|
drivers/staging/media/rkvdec/rkvdec.c | 33 +++++++++++++++----
|
|
drivers/staging/media/rkvdec/rkvdec.h | 3 ++
|
|
3 files changed, 57 insertions(+), 16 deletions(-)
|
|
|
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
|
index 815d5359ddd5..baac6d012ddd 100644
|
|
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
|
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
|
@@ -1027,24 +1027,42 @@ static int rkvdec_h264_adjust_fmt(struct rkvdec_ctx *ctx,
|
|
return 0;
|
|
}
|
|
|
|
+static enum rkvdec_image_fmt rkvdec_h264_get_image_fmt(struct rkvdec_ctx *ctx,
|
|
+ struct v4l2_ctrl *ctrl)
|
|
+{
|
|
+ const struct v4l2_ctrl_h264_sps *sps = ctrl->p_new.p_h264_sps;
|
|
+
|
|
+ if (ctrl->id != V4L2_CID_STATELESS_H264_SPS)
|
|
+ return RKVDEC_IMG_FMT_ANY;
|
|
+
|
|
+ if (sps->bit_depth_luma_minus8 == 0) {
|
|
+ if (sps->chroma_format_idc == 2)
|
|
+ return RKVDEC_IMG_FMT_422_8BIT;
|
|
+ else
|
|
+ return RKVDEC_IMG_FMT_420_8BIT;
|
|
+ } else if (sps->bit_depth_luma_minus8 == 2) {
|
|
+ if (sps->chroma_format_idc == 2)
|
|
+ return RKVDEC_IMG_FMT_422_10BIT;
|
|
+ else
|
|
+ return RKVDEC_IMG_FMT_420_10BIT;
|
|
+ }
|
|
+
|
|
+ return RKVDEC_IMG_FMT_ANY;
|
|
+}
|
|
+
|
|
static int rkvdec_h264_validate_sps(struct rkvdec_ctx *ctx,
|
|
const struct v4l2_ctrl_h264_sps *sps)
|
|
{
|
|
unsigned int width, height;
|
|
|
|
- /*
|
|
- * TODO: The hardware supports 10-bit and 4:2:2 profiles,
|
|
- * but it's currently broken in the driver.
|
|
- * Reject them for now, until it's fixed.
|
|
- */
|
|
- if (sps->chroma_format_idc > 1)
|
|
- /* Only 4:0:0 and 4:2:0 are supported */
|
|
+ if (sps->chroma_format_idc > 2)
|
|
+ /* Only 4:0:0, 4:2:0 and 4:2:2 are supported */
|
|
return -EINVAL;
|
|
if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8)
|
|
/* Luma and chroma bit depth mismatch */
|
|
return -EINVAL;
|
|
- if (sps->bit_depth_luma_minus8 != 0)
|
|
- /* Only 8-bit is supported */
|
|
+ if (sps->bit_depth_luma_minus8 != 0 && sps->bit_depth_luma_minus8 != 2)
|
|
+ /* Only 8-bit and 10-bit is supported */
|
|
return -EINVAL;
|
|
|
|
width = (sps->pic_width_in_mbs_minus1 + 1) * 16;
|
|
@@ -1175,4 +1193,5 @@ const struct rkvdec_coded_fmt_ops rkvdec_h264_fmt_ops = {
|
|
.stop = rkvdec_h264_stop,
|
|
.run = rkvdec_h264_run,
|
|
.try_ctrl = rkvdec_h264_try_ctrl,
|
|
+ .get_image_fmt = rkvdec_h264_get_image_fmt,
|
|
};
|
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
|
index 225aa1f0ac48..eb59605ccf28 100644
|
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
|
@@ -73,7 +73,7 @@ static void rkvdec_fill_decoded_pixfmt(struct rkvdec_ctx *ctx,
|
|
struct v4l2_pix_format_mplane *pix_mp)
|
|
{
|
|
v4l2_fill_pixfmt_mp(pix_mp, pix_mp->pixelformat,
|
|
- pix_mp->width, pix_mp->height);
|
|
+ ALIGN(pix_mp->width, 64), pix_mp->height);
|
|
pix_mp->plane_fmt[0].sizeimage += 128 *
|
|
DIV_ROUND_UP(pix_mp->width, 16) *
|
|
DIV_ROUND_UP(pix_mp->height, 16);
|
|
@@ -193,7 +193,7 @@ static const struct rkvdec_ctrl_desc rkvdec_h264_ctrl_descs[] = {
|
|
{
|
|
.cfg.id = V4L2_CID_MPEG_VIDEO_H264_PROFILE,
|
|
.cfg.min = V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE,
|
|
- .cfg.max = V4L2_MPEG_VIDEO_H264_PROFILE_HIGH,
|
|
+ .cfg.max = V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422,
|
|
.cfg.menu_skip_mask =
|
|
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED),
|
|
.cfg.def = V4L2_MPEG_VIDEO_H264_PROFILE_MAIN,
|
|
@@ -210,11 +210,23 @@ static const struct rkvdec_ctrls rkvdec_h264_ctrls = {
|
|
.num_ctrls = ARRAY_SIZE(rkvdec_h264_ctrl_descs),
|
|
};
|
|
|
|
-static const struct rkvdec_decoded_fmt_desc rkvdec_h264_vp9_decoded_fmts[] = {
|
|
+static const struct rkvdec_decoded_fmt_desc rkvdec_h264_decoded_fmts[] = {
|
|
{
|
|
.fourcc = V4L2_PIX_FMT_NV12,
|
|
.image_fmt = RKVDEC_IMG_FMT_420_8BIT,
|
|
},
|
|
+ {
|
|
+ .fourcc = V4L2_PIX_FMT_NV15,
|
|
+ .image_fmt = RKVDEC_IMG_FMT_420_10BIT,
|
|
+ },
|
|
+ {
|
|
+ .fourcc = V4L2_PIX_FMT_NV16,
|
|
+ .image_fmt = RKVDEC_IMG_FMT_422_8BIT,
|
|
+ },
|
|
+ {
|
|
+ .fourcc = V4L2_PIX_FMT_NV20,
|
|
+ .image_fmt = RKVDEC_IMG_FMT_422_10BIT,
|
|
+ },
|
|
};
|
|
|
|
static const struct rkvdec_ctrl_desc rkvdec_vp9_ctrl_descs[] = {
|
|
@@ -237,6 +249,13 @@ static const struct rkvdec_ctrls rkvdec_vp9_ctrls = {
|
|
.num_ctrls = ARRAY_SIZE(rkvdec_vp9_ctrl_descs),
|
|
};
|
|
|
|
+static const struct rkvdec_decoded_fmt_desc rkvdec_vp9_decoded_fmts[] = {
|
|
+ {
|
|
+ .fourcc = V4L2_PIX_FMT_NV12,
|
|
+ .image_fmt = RKVDEC_IMG_FMT_420_8BIT,
|
|
+ },
|
|
+};
|
|
+
|
|
static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
|
{
|
|
.fourcc = V4L2_PIX_FMT_H264_SLICE,
|
|
@@ -250,8 +269,8 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
|
},
|
|
.ctrls = &rkvdec_h264_ctrls,
|
|
.ops = &rkvdec_h264_fmt_ops,
|
|
- .num_decoded_fmts = ARRAY_SIZE(rkvdec_h264_vp9_decoded_fmts),
|
|
- .decoded_fmts = rkvdec_h264_vp9_decoded_fmts,
|
|
+ .num_decoded_fmts = ARRAY_SIZE(rkvdec_h264_decoded_fmts),
|
|
+ .decoded_fmts = rkvdec_h264_decoded_fmts,
|
|
.subsystem_flags = VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF,
|
|
},
|
|
{
|
|
@@ -266,8 +285,8 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
|
},
|
|
.ctrls = &rkvdec_vp9_ctrls,
|
|
.ops = &rkvdec_vp9_fmt_ops,
|
|
- .num_decoded_fmts = ARRAY_SIZE(rkvdec_h264_vp9_decoded_fmts),
|
|
- .decoded_fmts = rkvdec_h264_vp9_decoded_fmts,
|
|
+ .num_decoded_fmts = ARRAY_SIZE(rkvdec_vp9_decoded_fmts),
|
|
+ .decoded_fmts = rkvdec_vp9_decoded_fmts,
|
|
}
|
|
};
|
|
|
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
|
index e466a2753ccf..9a9f4fced7a1 100644
|
|
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
|
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
|
@@ -80,6 +80,9 @@ struct rkvdec_coded_fmt_ops {
|
|
enum rkvdec_image_fmt {
|
|
RKVDEC_IMG_FMT_ANY = 0,
|
|
RKVDEC_IMG_FMT_420_8BIT,
|
|
+ RKVDEC_IMG_FMT_420_10BIT,
|
|
+ RKVDEC_IMG_FMT_422_8BIT,
|
|
+ RKVDEC_IMG_FMT_422_10BIT,
|
|
};
|
|
|
|
struct rkvdec_decoded_fmt_desc {
|
|
--
|
|
2.42.0
|
|
|
|
|