[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <c6d4997f-30c6-9583-6cf5-32b374e4de29@xs4all.nl>
Date: Mon, 31 Jul 2017 10:12:36 +0200
From: Hans Verkuil <hverkuil@...all.nl>
To: Jacob Chen <jacob-chen@...wrt.com>,
linux-rockchip@...ts.infradead.org
Cc: linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
devicetree@...r.kernel.org, heiko@...ech.de, robh+dt@...nel.org,
mchehab@...nel.org, linux-media@...r.kernel.org,
laurent.pinchart+renesas@...asonboard.com, hans.verkuil@...co.com,
s.nawrocki@...sung.com, tfiga@...omium.org, nicolas@...fresne.ca
Subject: Re: [PATCH v3 1/5] [media] v4l: add porter duff blend controls
On 07/31/2017 05:07 AM, Jacob Chen wrote:
> At peresent, we don't have a control for Compositing and Blend.
> All drivers are just doing copies while actually many hardwares
> supports more functions.
>
> So Adding V4L2 controls for Compositing and Blend, used for for
> composting streams.
>
> The values are based on porter duff operations.
> Defined in below links.
> https://developer.xamarin.com/api/type/Android.Graphics.PorterDuff+Mode/
>
> Signed-off-by: Jacob Chen <jacob-chen@...wrt.com>
> Suggested-by: Nicolas Dufresne <nicolas@...fresne.ca>
> ---
> drivers/media/v4l2-core/v4l2-ctrls.c | 20 +++++++++++++++++++-
> include/uapi/linux/v4l2-controls.h | 16 +++++++++++++++-
> 2 files changed, 34 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
> index b9e08e3..561d7d5 100644
> --- a/drivers/media/v4l2-core/v4l2-ctrls.c
> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
> @@ -478,7 +478,21 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
> "Region Grid",
> NULL,
> };
> -
> + static const char * const porter_duff_modes[] = {
> + "Source",
> + "Source Top",
> + "Source In",
> + "Source Out",
> + "Source Over",
> + "Destination",
> + "Destination Top",
> + "Destination In",
> + "Destination Out",
> + "Destination Over",
> + "Add",
> + "Clear",
> + NULL
> + };
>
> switch (id) {
> case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
> @@ -564,6 +578,8 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
> return vpx_golden_frame_sel;
> case V4L2_CID_JPEG_CHROMA_SUBSAMPLING:
> return jpeg_chroma_subsampling;
> + case V4L2_CID_PORTER_DUFF_MODE:
> + return porter_duff_modes;
> case V4L2_CID_DV_TX_MODE:
> return dv_tx_mode;
> case V4L2_CID_DV_TX_RGB_RANGE:
> @@ -886,6 +902,7 @@ const char *v4l2_ctrl_get_name(u32 id)
> case V4L2_CID_PIXEL_RATE: return "Pixel Rate";
> case V4L2_CID_TEST_PATTERN: return "Test Pattern";
> case V4L2_CID_DEINTERLACING_MODE: return "Deinterlacing Mode";
> + case V4L2_CID_PORTER_DUFF_MODE: return "PorterDuff Blend Modes";
>
> /* DV controls */
> /* Keep the order of the 'case's the same as in v4l2-controls.h! */
> @@ -1060,6 +1077,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
> case V4L2_CID_DV_RX_IT_CONTENT_TYPE:
> case V4L2_CID_TEST_PATTERN:
> case V4L2_CID_DEINTERLACING_MODE:
> + case V4L2_CID_PORTER_DUFF_MODE:
> case V4L2_CID_TUNE_DEEMPHASIS:
> case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL:
> case V4L2_CID_DETECT_MD_MODE:
> diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
> index 0d2e1e0..9543b4b 100644
> --- a/include/uapi/linux/v4l2-controls.h
> +++ b/include/uapi/linux/v4l2-controls.h
> @@ -893,7 +893,21 @@ enum v4l2_jpeg_chroma_subsampling {
> #define V4L2_CID_PIXEL_RATE (V4L2_CID_IMAGE_PROC_CLASS_BASE + 2)
> #define V4L2_CID_TEST_PATTERN (V4L2_CID_IMAGE_PROC_CLASS_BASE + 3)
> #define V4L2_CID_DEINTERLACING_MODE (V4L2_CID_IMAGE_PROC_CLASS_BASE + 4)
> -
> +#define V4L2_CID_PORTER_DUFF_MODE (V4L2_CID_IMAGE_PROC_CLASS_BASE + 5)
I recommend that you add a link to e.g. https://en.wikipedia.org/wiki/Alpha_compositing
as a comment here.
> +enum v4l2_porter_duff_mode {
> + V4L2_PORTER_DUFF_SRC = 0,
> + V4L2_PORTER_DUFF_SRCATOP = 1,
> + V4L2_PORTER_DUFF_SRCIN = 2,
> + V4L2_PORTER_DUFF_SRCOUT = 3,
> + V4L2_PORTER_DUFF_SRCOVER = 4,
> + V4L2_PORTER_DUFF_DST = 5,
> + V4L2_PORTER_DUFF_DSTATOP = 6,
> + V4L2_PORTER_DUFF_DSTIN = 7,
> + V4L2_PORTER_DUFF_DSTOUT = 8,
> + V4L2_PORTER_DUFF_DSTOVER = 9,
> + V4L2_PORTER_DUFF_ADD = 10,
> + V4L2_PORTER_DUFF_CLEAR = 11,
> +};
>
> /* DV-class control IDs defined by V4L2 */
> #define V4L2_CID_DV_CLASS_BASE (V4L2_CTRL_CLASS_DV | 0x900)
>
This control also has to be documented in Documentation/media/uapi/v4l/extended-controls.rst.
Regards,
Hans
Powered by blists - more mailing lists