[media] v4l: Add premultiplied alpha flag for pixel formats
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Tue, 27 May 2014 13:12:43 +0000 (10:12 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Thu, 17 Jul 2014 15:44:47 +0000 (12:44 -0300)
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>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Documentation/DocBook/media/v4l/pixfmt.xml
Documentation/DocBook/media/v4l/v4l2.xml
drivers/media/v4l2-core/v4l2-ioctl.c
include/uapi/linux/videodev2.h

index bb36b3829cf953a2bce2f3f32a2c17693e3ef776..87ce7f3e7178885631dff8f0426fd4234f8382b6 100644 (file)
@@ -135,6 +135,12 @@ extended fields were set to zero. On return drivers must set the
 <constant>V4L2_PIX_FMT_PRIV_MAGIC</constant> and all the extended fields 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>
@@ -220,9 +226,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>
@@ -1079,4 +1091,21 @@ 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 color values are premultiplied by the alpha channel
+value. For example, if a light blue pixel with 50% transparency was described by
+RGBA values (128, 192, 255, 128), the same pixel described with premultiplied
+colors would be described by RGBA values (64, 96, 128, 128) </entry>
+         </row>
+       </tbody>
+      </tgroup>
+    </table>
   </section>
index d0a48bebfa524a11c4d18ed8dd3ccbff1bba2d2b..f2f81f06a17ba54718b693c54d024a6640576a5f 100644 (file)
@@ -155,7 +155,7 @@ applications. -->
        <revnumber>3.16</revnumber>
        <date>2014-05-27</date>
        <authorinitials>lp</authorinitials>
-       <revremark>Extended &v4l2-pix-format;.
+       <revremark>Extended &v4l2-pix-format;. Added format flags.
        </revremark>
       </revision>
 
index 2e630005676f906d91f0bde4aa8f9fb79d767749..e0bafda89e132e7ae22432d350af1c5acd6d903f 100644 (file)
@@ -256,7 +256,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,
@@ -264,7 +265,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:
index eb3bdd33816b7f4e4ed579dce9ccf0478cf27765..b73e8cda7192b437aac8fd8206bc742cd1b82e61 100644 (file)
@@ -288,6 +288,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  */
@@ -452,6 +453,9 @@ struct v4l2_pix_format {
 /* priv field value to indicates that subsequent fields are valid. */
 #define V4L2_PIX_FMT_PRIV_MAGIC                0xfeedcafe
 
+/* 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
  */
@@ -1754,6 +1758,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;
@@ -1764,7 +1769,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));
 
 /**