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@xxxxxxxxxx> > Suggested-by: Nicolas Dufresne <nicolas@xxxxxxxxxxxx> > --- > 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