[PATCH v2] v4l2(GSOC 2017): added printings for all buf types

Edgar Kaziahmedov edos at linux.com
Sun Mar 26 09:41:50 UTC 2017


Meaningful and informative printings have been added for all
v4l2 buf types in the 'print_v4l2_format_fmt' routine.
As a new kernel version, it has been added additional
defines to xlat/v4l2*.in files.

Apart from this, I want to participate in the GSoC program, in
particular your project. In short, I am a third-year MIPT(Moscow
Institute of Physics and Technology) student.  All additional
information will be placed in the proposal to be sent out after
some improvements in tests for the v4l2. I hope, that the
patch(with a finalized test) can be regarded as a microproject.

Signed-off-by: Edgar Kaziahmedov <edos at linux.com>
---
 v4l2.c                                 | 70 ++++++++++++++++++++++++++++------
 xlat/v4l2_buf_flags.in                 | 12 +++++-
 xlat/v4l2_buf_types.in                 |  2 +
 xlat/v4l2_colorspaces.in               |  4 ++
 xlat/v4l2_device_capabilities_flags.in |  3 ++
 xlat/v4l2_memories.in                  |  2 +
 xlat/v4l2_sliced_flags.in              |  6 +++
 xlat/v4l2_vbi_flags.in                 |  6 +++
 8 files changed, 92 insertions(+), 13 deletions(-)
 create mode 100644 xlat/v4l2_sliced_flags.in
 create mode 100644 xlat/v4l2_vbi_flags.in

diff --git a/v4l2.c b/v4l2.c
index 637e8788..2860f21f 100644
--- a/v4l2.c
+++ b/v4l2.c
@@ -200,6 +200,8 @@ print_v4l2_fmtdesc(struct tcb *const tcp, const kernel_ulong_t arg)
 
 #include "xlat/v4l2_fields.h"
 #include "xlat/v4l2_colorspaces.h"
+#include "xlat/v4l2_vbi_flags.h"
+#include "xlat/v4l2_sliced_flags.h"
 
 static void
 print_v4l2_format_fmt(const char *prefix, const struct_v4l2_format *f)
@@ -248,37 +250,81 @@ print_v4l2_format_fmt(const char *prefix, const struct_v4l2_format *f)
 		break;
 	}
 #endif
-
-	/* TODO: Complete this switch statement */
-#if 0
 	case V4L2_BUF_TYPE_VIDEO_OVERLAY:
 #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY
-	case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY:
+	case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY: {
 #endif
+                unsigned int i;
+
 		tprints(prefix);
-		tprints("fmt.win={???}");
+		tprintf("fmt.win={left=%d, top=%d, width=%u, height=%u,field=",
+                        ARGS_RECT(f->fmt.win.w));
+                printxval(v4l2_fields, f->fmt.win.field, "V4L2_FIELD_???");
+                tprintf(", chromakey=0x%08x, clips=[", f->fmt.win.chromakey);
+                for (i = 0; i < f->fmt.win.clipcount; i++) {
+                        if (i > 0)
+                                tprints(", ");
+                        tprintf(FMT_RECT, ARGS_RECT(f->fmt.win.clips->c));
+                }
+                tprintf("], clipcount=%u, bitmap=%p, global_alpha=0x%02x}",
+                        f->fmt.win.clipcount, f->fmt.win.bitmap,
+                        f->fmt.win.global_alpha);
 		break;
-
+        }
 	case V4L2_BUF_TYPE_VBI_CAPTURE:
 	case V4L2_BUF_TYPE_VBI_OUTPUT:
 		tprints(prefix);
-		tprints("fmt.vbi={???}");
+		tprintf("fmt.vbi={sampling_rate=%u, offset=%u, "
+                        "samples_per_line=%u, sample_format=",
+                        f->fmt.vbi.sampling_rate, f->fmt.vbi.offset,
+                        f->fmt.vbi.samples_per_line);
+                print_pixelformat(f->fmt.vbi.sample_format);
+                tprintf(", start=%u,%u, count=%u,%u, ",
+                        f->fmt.vbi.start[0], f->fmt.vbi.start[1],
+                        f->fmt.vbi.count[0], f->fmt.vbi.count[1]);
+                tprints("flags=");
+                printxval(v4l2_vbi_flags, f->fmt.vbi.flags, "V4L2_VBI_???");
+                tprintf(", reserved=0x%08x,0x%08x}", f->fmt.vbi.reserved[0],
+                        f->fmt.vbi.reserved[1]);
 		break;
 
 	case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
-	case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
+	case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: {
+                unsigned int i;
 		tprints(prefix);
-		tprints("fmt.sliced={???}");
-		break;
+		tprints("fmt.sliced={service_set=");
+                printxval(v4l2_sliced_flags, f->fmt.sliced.service_set,
+                          "V4L2_SLICED_???");
+                tprintf(", io_size=%d, service_lines=[",
+                        f->fmt.sliced.io_size);
+                /* I'm sorry for this magic constant, but standard headers
+                 * doesn't contain the corresponding define for
+                 * v4l2_sliced_vbi_format
+                 */
+                for (i = 0; i < 24; i++) {
+                        if (i > 0)
+                                tprints(", ");
+                        tprintf("{line[%u]=0x%04x, 0x%04x} ", i,
+                                f->fmt.sliced.service_lines[0][i],
+                                f->fmt.sliced.service_lines[1][i]);
+                }
+                tprintf("], reserved=0x%08x,0x%08x}",
+                        f->fmt.sliced.reserved[0],
+                        f->fmt.sliced.reserved[1]);
 
+
+		break;
+        }
 #if HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE
 	case V4L2_BUF_TYPE_SDR_CAPTURE:
 	case V4L2_BUF_TYPE_SDR_OUTPUT:
 		tprints(prefix);
-		tprints("fmt.sdr={???}");
+		tprints("fmt.sdr={pixelformat=");
+                print_pixelformat(f->fmt.sdr.pixelformat);
+                tprintf(", buffersize=%u}",
+                        f->fmt.sdr.buffersize);
 		break;
 #endif
-#endif
 	}
 }
 
diff --git a/xlat/v4l2_buf_flags.in b/xlat/v4l2_buf_flags.in
index ba7e86e9..0c577149 100644
--- a/xlat/v4l2_buf_flags.in
+++ b/xlat/v4l2_buf_flags.in
@@ -5,4 +5,14 @@ V4L2_BUF_FLAG_KEYFRAME
 V4L2_BUF_FLAG_PFRAME
 V4L2_BUF_FLAG_BFRAME
 V4L2_BUF_FLAG_TIMECODE
-V4L2_BUF_FLAG_INPUT
+V4L2_BUF_FLAG_PREPARED
+V4L2_BUF_FLAG_NO_CACHE_INVALIDATE
+V4L2_BUF_FLAG_NO_CACHE_CLEAN
+V4L2_BUF_FLAG_TIMESTAMP_MASK
+V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN
+V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC
+V4L2_BUF_FLAG_TIMESTAMP_COPY
+V4L2_BUF_FLAG_TSTAMP_SRC_MASK
+V4L2_BUF_FLAG_TSTAMP_SRC_EOF
+V4L2_BUF_FLAG_TSTAMP_SRC_SOE
+V4L2_BUF_FLAG_LAST
diff --git a/xlat/v4l2_buf_types.in b/xlat/v4l2_buf_types.in
index 431cb598..2b52561f 100644
--- a/xlat/v4l2_buf_types.in
+++ b/xlat/v4l2_buf_types.in
@@ -8,3 +8,5 @@ V4L2_BUF_TYPE_VBI_OUTPUT
 V4L2_BUF_TYPE_SLICED_VBI_CAPTURE
 V4L2_BUF_TYPE_SLICED_VBI_OUTPUT
 V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY
+V4L2_BUF_TYPE_SDR_CAPTURE
+V4L2_BUF_TYPE_SDR_OUTPUT
diff --git a/xlat/v4l2_colorspaces.in b/xlat/v4l2_colorspaces.in
index 961e71c8..1d227e49 100644
--- a/xlat/v4l2_colorspaces.in
+++ b/xlat/v4l2_colorspaces.in
@@ -6,3 +6,7 @@ V4L2_COLORSPACE_470_SYSTEM_M
 V4L2_COLORSPACE_470_SYSTEM_BG
 V4L2_COLORSPACE_JPEG
 V4L2_COLORSPACE_SRGB
+V4L2_COLORSPACE_ADOBERGB
+V4L2_COLORSPACE_BT2020
+V4L2_COLORSPACE_RAW
+V4L2_COLORSPACE_DCI_P3
diff --git a/xlat/v4l2_device_capabilities_flags.in b/xlat/v4l2_device_capabilities_flags.in
index 9380eb44..d4e3292b 100644
--- a/xlat/v4l2_device_capabilities_flags.in
+++ b/xlat/v4l2_device_capabilities_flags.in
@@ -22,3 +22,6 @@ V4L2_CAP_ASYNCIO
 V4L2_CAP_STREAMING
 V4L2_CAP_TOUCH
 V4L2_CAP_DEVICE_CAPS
+V4L2_CAP_SDR_CAPTURE
+V4L2_CAP_EXT_PIX_FORMAT
+V4L2_CAP_SDR_OUTPUT
diff --git a/xlat/v4l2_memories.in b/xlat/v4l2_memories.in
index e592d57f..2acd47b8 100644
--- a/xlat/v4l2_memories.in
+++ b/xlat/v4l2_memories.in
@@ -1,2 +1,4 @@
 V4L2_MEMORY_MMAP
 V4L2_MEMORY_USERPTR
+V4L2_MEMORY_OVERLAY
+V4L2_MEMORY_DMABUF
diff --git a/xlat/v4l2_sliced_flags.in b/xlat/v4l2_sliced_flags.in
new file mode 100644
index 00000000..baff2e26
--- /dev/null
+++ b/xlat/v4l2_sliced_flags.in
@@ -0,0 +1,6 @@
+V4L2_SLICED_TELETEXT_B
+V4L2_SLICED_VPS
+V4L2_SLICED_CAPTION_525
+V4L2_SLICED_WSS_625
+V4L2_SLICED_VBI_525
+V4L2_SLICED_VBI_625
diff --git a/xlat/v4l2_vbi_flags.in b/xlat/v4l2_vbi_flags.in
new file mode 100644
index 00000000..b367e606
--- /dev/null
+++ b/xlat/v4l2_vbi_flags.in
@@ -0,0 +1,6 @@
+V4L2_VBI_UNSYNC
+V4L2_VBI_INTERLACED
+V4L2_VBI_ITU_525_F1_START
+V4L2_VBI_ITU_525_F2_START
+V4L2_VBI_ITU_625_F1_START
+V4L2_VBI_ITU_625_F2_START
-- 
2.11.0





More information about the Strace-devel mailing list