| From 2873c1c928f340ce5aed3d37b81b5ffa37b9cba5 Mon Sep 17 00:00:00 2001 |
| From: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> |
| Date: Tue, 27 May 2014 15:12:43 +0200 |
| Subject: v4l: Add premultiplied alpha flag for pixel formats |
| |
| When set, the new V4L2_PIX_FMT_FLAG_PREMUL_ALPHA flag indicates that the |
| pixel values are premultiplied by the alpha channel value. |
| |
| Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> |
| (cherry picked from commit e6619dfbf287a75082ec04bc2a8d2df6e3a16299) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| |
| Conflicts: |
| Documentation/DocBook/media/v4l/v4l2.xml |
| --- |
| Documentation/DocBook/media/v4l/pixfmt.xml | 28 +++++++++++++++++++++++++++- |
| drivers/media/v4l2-core/v4l2-ioctl.c | 5 +++-- |
| include/uapi/linux/videodev2.h | 8 +++++++- |
| 3 files changed, 37 insertions(+), 4 deletions(-) |
| |
| diff --git a/Documentation/DocBook/media/v4l/pixfmt.xml b/Documentation/DocBook/media/v4l/pixfmt.xml |
| index 6e1e520a2750..75882a4b4d3d 100644 |
| --- a/Documentation/DocBook/media/v4l/pixfmt.xml |
| +++ b/Documentation/DocBook/media/v4l/pixfmt.xml |
| @@ -126,6 +126,12 @@ extended fields were set to zero. On return drivers must set the |
| <constant>V4L2_PIX_FMT_PRIV_MAGIC</constant> and all the extended field to |
| applicable values.</para></entry> |
| </row> |
| + <row> |
| + <entry>__u32</entry> |
| + <entry><structfield>flags</structfield></entry> |
| + <entry>Flags set by the application or driver, see <xref |
| +linkend="format-flags" />.</entry> |
| + </row> |
| </tbody> |
| </tgroup> |
| </table> |
| @@ -211,9 +217,15 @@ codes can be used.</entry> |
| and the number of valid entries in the |
| <structfield>plane_fmt</structfield> array.</entry> |
| </row> |
| + <row> |
| + <entry>__u8</entry> |
| + <entry><structfield>flags</structfield></entry> |
| + <entry>Flags set by the application or driver, see <xref |
| +linkend="format-flags" />.</entry> |
| + </row> |
| <row> |
| <entry>__u8</entry> |
| - <entry><structfield>reserved[11]</structfield></entry> |
| + <entry><structfield>reserved[10]</structfield></entry> |
| <entry>Reserved for future extensions. Should be zeroed by the |
| application.</entry> |
| </row> |
| @@ -1059,4 +1071,18 @@ concatenated to form the JPEG stream. </para> |
| </tbody> |
| </tgroup> |
| </table> |
| + |
| + <table frame="none" pgwide="1" id="format-flags"> |
| + <title>Format Flags</title> |
| + <tgroup cols="3"> |
| + &cs-def; |
| + <tbody valign="top"> |
| + <row> |
| + <entry><constant>V4L2_PIX_FMT_FLAG_PREMUL_ALPHA</constant></entry> |
| + <entry>0x00000001</entry> |
| + <entry>The pixel values are premultiplied by the alpha channel value.</entry> |
| + </row> |
| + </tbody> |
| + </tgroup> |
| + </table> |
| </section> |
| diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c |
| index feb9e3441c9d..9692009cfc4e 100644 |
| --- a/drivers/media/v4l2-core/v4l2-ioctl.c |
| +++ b/drivers/media/v4l2-core/v4l2-ioctl.c |
| @@ -254,7 +254,8 @@ static void v4l_print_format(const void *arg, bool write_only) |
| pix = &p->fmt.pix; |
| pr_cont(", width=%u, height=%u, " |
| "pixelformat=%c%c%c%c, field=%s, " |
| - "bytesperline=%u, sizeimage=%u, colorspace=%d\n", |
| + "bytesperline=%u, sizeimage=%u, colorspace=%d, " |
| + "flags %u\n", |
| pix->width, pix->height, |
| (pix->pixelformat & 0xff), |
| (pix->pixelformat >> 8) & 0xff, |
| @@ -262,7 +263,7 @@ static void v4l_print_format(const void *arg, bool write_only) |
| (pix->pixelformat >> 24) & 0xff, |
| prt_names(pix->field, v4l2_field_names), |
| pix->bytesperline, pix->sizeimage, |
| - pix->colorspace); |
| + pix->colorspace, pix->flags); |
| break; |
| case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: |
| case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: |
| diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h |
| index e6b41cf2c6b2..8d6646ea9c33 100644 |
| --- a/include/uapi/linux/videodev2.h |
| +++ b/include/uapi/linux/videodev2.h |
| @@ -283,6 +283,7 @@ struct v4l2_pix_format { |
| __u32 sizeimage; |
| __u32 colorspace; /* enum v4l2_colorspace */ |
| __u32 priv; /* private data, depends on pixelformat */ |
| + __u32 flags; /* format flags (V4L2_PIX_FMT_FLAG_*) */ |
| }; |
| |
| /* Pixel format FOURCC depth Description */ |
| @@ -443,6 +444,9 @@ struct v4l2_pix_format { |
| /* priv field value to indicates that subsequent fields are valid. */ |
| #define V4L2_PIX_FMT_PRIV_MAGIC 0xdeadbeef |
| |
| +/* Flags */ |
| +#define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001 |
| + |
| /* |
| * F O R M A T E N U M E R A T I O N |
| */ |
| @@ -1699,6 +1703,7 @@ struct v4l2_plane_pix_format { |
| * @colorspace: enum v4l2_colorspace; supplemental to pixelformat |
| * @plane_fmt: per-plane information |
| * @num_planes: number of planes for this format |
| + * @flags: format flags (V4L2_PIX_FMT_FLAG_*) |
| */ |
| struct v4l2_pix_format_mplane { |
| __u32 width; |
| @@ -1709,7 +1714,8 @@ struct v4l2_pix_format_mplane { |
| |
| struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES]; |
| __u8 num_planes; |
| - __u8 reserved[11]; |
| + __u8 flags; |
| + __u8 reserved[10]; |
| } __attribute__ ((packed)); |
| |
| /** |
| -- |
| 2.1.2 |
| |