From: Ian Arkver <ian.arkver.dev-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Hans Verkuil <hverkuil-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>,
Ezequiel Garcia
<ezequiel-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>,
linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
Nicolas Dufresne
<nicolas.dufresne-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>,
Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>,
Tomasz Figa <tfiga-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Hans Verkuil
<hans.verkuil-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>,
Miouyouyou <myy-tmjzNUIc0P1+EYZtW95mkQ@public.gmane.org>,
kernel-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org,
Shunqian Zheng <zhengsq-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
Subject: Re: [PATCH v4 5/6] media: Add controls for JPEG quantization tables
Date: Mon, 3 Sep 2018 14:29:03 +0100 [thread overview]
Message-ID: <b5715198-eff0-30d2-6f84-cd1441d3f7ba@gmail.com> (raw)
In-Reply-To: <ec1dab04-1890-5555-44cf-2cdadc79c1a6-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>
Hi,
On 03/09/2018 10:50, Hans Verkuil wrote:
> On 08/31/2018 05:52 PM, Ezequiel Garcia wrote:
>> From: Shunqian Zheng <zhengsq-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
>>
>> Add V4L2_CID_JPEG_QUANTIZATION compound control to allow userspace
>> configure the JPEG quantization tables.
>>
>> Signed-off-by: Shunqian Zheng <zhengsq-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
>> Signed-off-by: Ezequiel Garcia <ezequiel-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>
>> ---
>> .../media/uapi/v4l/extended-controls.rst | 23 +++++++++++++++++++
>> .../media/videodev2.h.rst.exceptions | 1 +
>> drivers/media/v4l2-core/v4l2-ctrls.c | 10 ++++++++
>> include/uapi/linux/v4l2-controls.h | 5 ++++
>> include/uapi/linux/videodev2.h | 1 +
>> 5 files changed, 40 insertions(+)
>>
>> diff --git a/Documentation/media/uapi/v4l/extended-controls.rst b/Documentation/media/uapi/v4l/extended-controls.rst
>> index 9f7312bf3365..e0dd03e452de 100644
>> --- a/Documentation/media/uapi/v4l/extended-controls.rst
>> +++ b/Documentation/media/uapi/v4l/extended-controls.rst
>> @@ -3354,7 +3354,30 @@ JPEG Control IDs
>> Specify which JPEG markers are included in compressed stream. This
>> control is valid only for encoders.
>>
>> +.. _jpeg-quant-tables-control:
>>
>> +``V4L2_CID_JPEG_QUANTIZATION (struct)``
>> + Specifies the luma and chroma quantization matrices for encoding
>> + or decoding a V4L2_PIX_FMT_JPEG_RAW format buffer. The two matrices
>> + must be set in JPEG zigzag order, as per the JPEG specification.
>
> Can you change "JPEG specification" to a reference to the JPEG spec entry
> in bibio.rst?
>
>> +
>> +
>> +.. c:type:: struct v4l2_ctrl_jpeg_quantization
>> +
>> +.. cssclass:: longtable
>> +
>> +.. flat-table:: struct v4l2_ctrl_jpeg_quantization
>> + :header-rows: 0
>> + :stub-columns: 0
>> + :widths: 1 1 2
>> +
>> + * - __u8
>> + - ``luma_quantization_matrix[64]``
>> + - Sets the luma quantization table.
>> +
>> + * - __u8
>> + - ``chroma_quantization_matrix[64]``
>> + - Sets the chroma quantization table.
>
> Just checking: the JPEG standard specifies this as unsigned 8-bit values as well?
As far as I can see ISO/IEC 10918-1 does not specify the precision or
signedness of the quantisation value Qvu. The default tables for 8-bit
baseline JPEG all fit into __u8 though.
However there can be four sets of tables in non-baseline JPEG and it's
not clear (to me) whether 12-bit JPEG would need more precision (I'd
guess it would). Since this patch is defining UAPI I think it might be
good to build in some additional information, eg. number of tables,
element size. Maybe this can all be inferred from the selected pixel
format? If so then it would need documented that the above structure
only applies to baseline.
Regards,
Ian
>
>>
>> .. flat-table::
>> :header-rows: 0
>> diff --git a/Documentation/media/videodev2.h.rst.exceptions b/Documentation/media/videodev2.h.rst.exceptions
>> index ca9f0edc579e..a0a38e92bf38 100644
>> --- a/Documentation/media/videodev2.h.rst.exceptions
>> +++ b/Documentation/media/videodev2.h.rst.exceptions
>> @@ -129,6 +129,7 @@ replace symbol V4L2_CTRL_TYPE_STRING :c:type:`v4l2_ctrl_type`
>> replace symbol V4L2_CTRL_TYPE_U16 :c:type:`v4l2_ctrl_type`
>> replace symbol V4L2_CTRL_TYPE_U32 :c:type:`v4l2_ctrl_type`
>> replace symbol V4L2_CTRL_TYPE_U8 :c:type:`v4l2_ctrl_type`
>> +replace symbol V4L2_CTRL_TYPE_JPEG_QUANTIZATION :c:type:`v4l2_ctrl_type`
>>
>> # V4L2 capability defines
>> replace define V4L2_CAP_VIDEO_CAPTURE device-capabilities
>> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
>> index 599c1cbff3b9..305bd7a9b7f1 100644
>> --- a/drivers/media/v4l2-core/v4l2-ctrls.c
>> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
>> @@ -999,6 +999,7 @@ const char *v4l2_ctrl_get_name(u32 id)
>> case V4L2_CID_JPEG_RESTART_INTERVAL: return "Restart Interval";
>> case V4L2_CID_JPEG_COMPRESSION_QUALITY: return "Compression Quality";
>> case V4L2_CID_JPEG_ACTIVE_MARKER: return "Active Markers";
>> + case V4L2_CID_JPEG_QUANTIZATION: return "JPEG Quantization Tables";
>>
>> /* Image source controls */
>> /* Keep the order of the 'case's the same as in v4l2-controls.h! */
>> @@ -1286,6 +1287,9 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
>> case V4L2_CID_DETECT_MD_REGION_GRID:
>> *type = V4L2_CTRL_TYPE_U8;
>> break;
>> + case V4L2_CID_JPEG_QUANTIZATION:
>> + *type = V4L2_CTRL_TYPE_JPEG_QUANTIZATION;
>> + break;
>> case V4L2_CID_DETECT_MD_THRESHOLD_GRID:
>> *type = V4L2_CTRL_TYPE_U16;
>> break;
>> @@ -1612,6 +1616,9 @@ static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx,
>> return -ERANGE;
>> return 0;
>>
>> + case V4L2_CTRL_TYPE_JPEG_QUANTIZATION:
>> + return 0;
>> +
>> default:
>> return -EINVAL;
>> }
>> @@ -2133,6 +2140,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
>> case V4L2_CTRL_TYPE_U32:
>> elem_size = sizeof(u32);
>> break;
>> + case V4L2_CTRL_TYPE_JPEG_QUANTIZATION:
>> + elem_size = sizeof(struct v4l2_ctrl_jpeg_quantization);
>> + break;
>> default:
>> if (type < V4L2_CTRL_COMPOUND_TYPES)
>> elem_size = sizeof(s32);
>> diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
>> index e4ee10ee917d..fcb288bb05c7 100644
>> --- a/include/uapi/linux/v4l2-controls.h
>> +++ b/include/uapi/linux/v4l2-controls.h
>> @@ -987,6 +987,11 @@ enum v4l2_jpeg_chroma_subsampling {
>> #define V4L2_JPEG_ACTIVE_MARKER_DQT (1 << 17)
>> #define V4L2_JPEG_ACTIVE_MARKER_DHT (1 << 18)
>>
>> +#define V4L2_CID_JPEG_QUANTIZATION (V4L2_CID_JPEG_CLASS_BASE + 5)
>> +struct v4l2_ctrl_jpeg_quantization {
>> + __u8 luma_quantization_matrix[64];
>> + __u8 chroma_quantization_matrix[64];
>> +};
>>
>> /* Image source controls */
>> #define V4L2_CID_IMAGE_SOURCE_CLASS_BASE (V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900)
>> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
>> index f271048c89c4..e998d07464cb 100644
>> --- a/include/uapi/linux/videodev2.h
>> +++ b/include/uapi/linux/videodev2.h
>> @@ -1630,6 +1630,7 @@ enum v4l2_ctrl_type {
>> V4L2_CTRL_TYPE_U8 = 0x0100,
>> V4L2_CTRL_TYPE_U16 = 0x0101,
>> V4L2_CTRL_TYPE_U32 = 0x0102,
>> + V4L2_CTRL_TYPE_JPEG_QUANTIZATION = 0x0103,
>> };
>>
>> /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
>>
>
> Regards,
>
> Hans
>
next prev parent reply other threads:[~2018-09-03 13:29 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-31 15:52 [PATCH v4 5/6] media: Add controls for JPEG quantization tables Ezequiel Garcia
[not found] ` <20180831155245.19235-1-ezequiel-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>
2018-09-03 9:50 ` Hans Verkuil
[not found] ` <ec1dab04-1890-5555-44cf-2cdadc79c1a6-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>
2018-09-03 13:29 ` Ian Arkver [this message]
[not found] ` <b5715198-eff0-30d2-6f84-cd1441d3f7ba-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-09-03 15:27 ` Ezequiel Garcia
[not found] ` <8d9cb4b73c4dc4af66ace5205bd6af5fc193d72a.camel-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>
2018-09-03 15:33 ` Hans Verkuil
[not found] ` <0beecc48-6974-c12f-00a2-3823690108c0-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>
2018-09-03 15:51 ` Ian Arkver
[not found] ` <1d0c0685-7d91-b422-7e34-b6472a090eb2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-09-03 17:15 ` Ezequiel Garcia
[not found] ` <f7f1249779d660a06b902bdaf3166cda910e48e1.camel-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>
2018-09-03 21:09 ` Ian Arkver
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b5715198-eff0-30d2-6f84-cd1441d3f7ba@gmail.com \
--to=ian.arkver.dev-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=ezequiel-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org \
--cc=hans.verkuil-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org \
--cc=heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org \
--cc=hverkuil-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org \
--cc=kernel-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org \
--cc=linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=myy-tmjzNUIc0P1+EYZtW95mkQ@public.gmane.org \
--cc=nicolas.dufresne-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=tfiga-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=zhengsq-TNX95d0MmH7DzftRWevZcw@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).