lkml.org 
[lkml]   [2017]   [Jul]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v3 1/5] [media] v4l: add porter duff blend controls
    From
    Date
    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@iotwrt.com>
    > Suggested-by: Nicolas Dufresne <nicolas@ndufresne.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

    \
     
     \ /
      Last update: 2017-07-31 10:12    [W:3.386 / U:0.120 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site