10cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter/* 20cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * Copyright (c) 2014 Philippe De Muyter <phdm@macqel.be> 30cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * Copyright (c) 2014 William Manley <will@williammanley.net> 40cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * Copyright (c) 2011 Peter Zotov <whitequark@whitequark.org> 50cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * All rights reserved. 60cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * 70cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * Redistribution and use in source and binary forms, with or without 80cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * modification, are permitted provided that the following conditions 90cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * are met: 100cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * 1. Redistributions of source code must retain the above copyright 110cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * notice, this list of conditions and the following disclaimer. 120cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * 2. Redistributions in binary form must reproduce the above copyright 130cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * notice, this list of conditions and the following disclaimer in the 140cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * documentation and/or other materials provided with the distribution. 150cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * 3. The name of the author may not be used to endorse or promote products 160cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * derived from this software without specific prior written permission. 170cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * 180cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 190cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 200cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 210cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 220cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 230cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 240cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 250cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 260cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 270cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 280cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter */ 290cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 300cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "defs.h" 310cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 320cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include <stdint.h> 330cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include <sys/ioctl.h> 340f4ad30bdcb284a8e874b3d9345cb203c8cc5209Dmitry V. Levin#include <linux/types.h> 350cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include <linux/videodev2.h> 360cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter/* some historical constants */ 370cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#ifndef V4L2_CID_HCENTER 380cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#define V4L2_CID_HCENTER (V4L2_CID_BASE+22) 390cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#endif 400cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#ifndef V4L2_CID_VCENTER 410cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#define V4L2_CID_VCENTER (V4L2_CID_BASE+23) 420cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#endif 430cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#ifndef V4L2_CID_BAND_STOP_FILTER 440cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33) 450cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#endif 460cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 470cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_device_capabilities_flags.h" 480cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_buf_types.h" 490cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_buf_flags.h" 500cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_framesize_types.h" 510cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_frameinterval_types.h" 520cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_fields.h" 530cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_colorspaces.h" 540cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_format_description_flags.h" 550cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_memories.h" 560cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_control_ids.h" 570cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_control_types.h" 580cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_control_flags.h" 590cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_control_classes.h" 600cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_streaming_capabilities.h" 610cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_capture_modes.h" 620cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#include "xlat/v4l2_input_types.h" 630cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 640cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#define FMT_FRACT "%u/%u" 650cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#define ARGS_FRACT(x) ((x).numerator), ((x).denominator) 660cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 670cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#define FMT_RECT "{left=%i, top=%i, width=%i, height=%i}" 680cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#define ARGS_RECT(x) (x).left, (x).top, (x).width, (x).height 690cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 700cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyterstatic void print_pixelformat(uint32_t fourcc) 710cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter{ 72f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin union { 73f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin uint32_t pixelformat; 74f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin unsigned char cc[sizeof(uint32_t)]; 75f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin } u = { 76f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin .pixelformat = 770cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#if WORDS_BIGENDIAN 78f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin htole32(fourcc) 79f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin#else 80f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin fourcc 810cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#endif 82f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin }; 83f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin unsigned int i; 84f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin 85f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin tprints("v4l2_fourcc("); 86f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin for (i = 0; i < sizeof(u.cc); ++i) { 87f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin unsigned int c = u.cc[i]; 88f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin 89f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin if (i) 90f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin tprints(", "); 91f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin if (c == ' ' || 92f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin (c >= '0' && c <= '9') || 93f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin (c >= 'A' && c <= 'Z') || 94f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin (c >= 'a' && c <= 'z')) { 95f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin char sym[] = { 96f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin '\'', 97f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin u.cc[i], 98f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin '\'' 99f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin }; 100f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin tprints(sym); 101f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin } else { 102f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin char hex[] = { 103f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin '\'', 104f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin '\\', 105f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin 'x', 106f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin "0123456789abcdef"[c >> 4], 107f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin "0123456789abcdef"[c & 0xf], 108f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin '\'', 109f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin '\0' 110f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin }; 111f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin tprints(hex); 112f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin } 113f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin } 114f0a5b083c9968ee924520ec69f6e54a2487dee91Dmitry V. Levin tprints(")"); 1150cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter} 1160cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 1170cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyterstatic void print_v4l2_format_fmt(const struct v4l2_format *f) 1180cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter{ 1190cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("fmt."); 1200cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter switch (f->type) { 1210cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case V4L2_BUF_TYPE_VIDEO_CAPTURE: 1220cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case V4L2_BUF_TYPE_VIDEO_OUTPUT: { 1230cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter const struct v4l2_pix_format *pix = &f->fmt.pix; 1240cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 1250cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf("pix={width=%u, height=%u, pixelformat=", 1260cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter pix->width, pix->height); 1270cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter print_pixelformat(pix->pixelformat); 1280cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", field="); 1290cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_fields, pix->field, "V4L2_FIELD_???"); 1300cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", bytesperline=%u, sizeimage=%u, colorspace=", 1310cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter pix->bytesperline, pix->sizeimage); 1320cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_colorspaces, pix->colorspace, 1330cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter "V4L2_COLORSPACE_???"); 1340cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("}"); 1350cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter break; 1360cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 1370cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE 1380cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: 1390cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: { 1400cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter const struct v4l2_pix_format_mplane *pix_mp = &f->fmt.pix_mp; 1410cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter unsigned int i, max; 1420cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 1430cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf("pix_mp={width=%u, height=%u, pixelformat=", 1440cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter pix_mp->width, pix_mp->height); 1450cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter print_pixelformat(pix_mp->pixelformat); 1460cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", field="); 1470cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_fields, pix_mp->field, "V4L2_FIELD_???"); 1480cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", colorspace="); 1490cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_colorspaces, pix_mp->colorspace, 1500cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter "V4L2_COLORSPACE_???"); 1510cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("plane_fmt=["); 1520cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter max = pix_mp->num_planes; 1530cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (max > VIDEO_MAX_PLANES) 1540cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter max = VIDEO_MAX_PLANES; 1550cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter for (i = 0; i < max; i++) { 1560cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (i > 0) 1570cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", "); 1580cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf("{sizeimage=%u, bytesperline=%u}", 1590cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter pix_mp->plane_fmt[i].sizeimage, 1600cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter pix_mp->plane_fmt[i].bytesperline); 1610cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 1620cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf("], num_planes=%u}", (unsigned) pix_mp->num_planes); 1630cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter break; 1640cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 1650cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#endif 1660cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 1670cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter /* TODO: Complete this switch statement */ 1680cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case V4L2_BUF_TYPE_VIDEO_OVERLAY: 169197db577e832ad033954885e2a3a7fad4046968cDmitry V. Levin#if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY 1700cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY: 171197db577e832ad033954885e2a3a7fad4046968cDmitry V. Levin#endif 1720cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("win={???}"); 1730cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter break; 1740cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 1750cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case V4L2_BUF_TYPE_VBI_CAPTURE: 1760cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case V4L2_BUF_TYPE_VBI_OUTPUT: 1770cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("vbi={???}"); 1780cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter break; 1790cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 1800cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: 1810cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: 1820cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("sliced={???}"); 1830cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter break; 1840cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 1850cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter default: 1860cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("???"); 1870cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter break; 1880cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 1890cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter} 1900cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 1910cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyterint 192c7afb4881f14e44968f3a78ae5988f04ecc66b68Dmitry V. Levinv4l2_ioctl(struct tcb *tcp, const unsigned int code, long arg) 1930cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter{ 1940cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (!verbose(tcp)) 1950cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 1960cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 1970cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter switch (code) { 1980cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_QUERYCAP: /* decode on exit */ { 1990cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_capability caps; 2000cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 2010cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp) || syserror(tcp) || umove(tcp, arg, &caps) < 0) 2020cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 2031de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin tprints(", {driver="); 2041de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin print_quoted_string((const char *) caps.driver, 2051de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin sizeof(caps.driver), QUOTE_0_TERMINATED); 2061de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin tprints(", card="); 2071de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin print_quoted_string((const char *) caps.card, 2081de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin sizeof(caps.card), QUOTE_0_TERMINATED); 2091de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin tprints(", bus_info="); 2101de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin print_quoted_string((const char *) caps.bus_info, 2111de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin sizeof(caps.bus_info), QUOTE_0_TERMINATED); 2121de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin tprintf(", version=%u.%u.%u, capabilities=", 2131de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin (caps.version >> 16) & 0xFF, 2141de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin (caps.version >> 8) & 0xFF, 2151de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin caps.version & 0xFF); 2160cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printflags(v4l2_device_capabilities_flags, caps.capabilities, 2170cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter "V4L2_CAP_???"); 2180cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#ifdef V4L2_CAP_DEVICE_CAPS 2190cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", device_caps="); 2200cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printflags(v4l2_device_capabilities_flags, caps.device_caps, 2210cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter "V4L2_CAP_???"); 2220cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter#endif 2230cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("}"); 2240cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 2250cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 2260cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 227197db577e832ad033954885e2a3a7fad4046968cDmitry V. Levin#ifdef VIDIOC_ENUM_FRAMESIZES 2280cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_ENUM_FRAMESIZES: /* decode on exit */ { 2290cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_frmsizeenum s; 2300cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 2310cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp) || umove(tcp, arg, &s) < 0) 2320cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 2330cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", {index=%u, pixel_format=", s.index); 2340cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter print_pixelformat(s.pixel_format); 2350cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 2360cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (!syserror(tcp)) { 2370cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", type="); 2380cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_framesize_types, s.type, "V4L2_FRMSIZE_TYPE_???"); 2390cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter switch (s.type) { 2400cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case V4L2_FRMSIZE_TYPE_DISCRETE: 2410cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", discrete={width=%u, height=%u}", 2420cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter s.discrete.width, s.discrete.height); 2430cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter break; 2440cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case V4L2_FRMSIZE_TYPE_STEPWISE: 2450cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", stepwise={min_width=%u, max_width=%u, " 2460cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter "step_width=%u, min_height=%u, max_height=%u, " 2470cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter "step_height=%u}", 2480cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter s.stepwise.min_width, s.stepwise.max_width, 2490cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter s.stepwise.step_width, s.stepwise.min_height, 2500cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter s.stepwise.max_height, s.stepwise.step_height); 2510cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter break; 2520cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 2530cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 2540cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("}"); 2550cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 2560cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 257197db577e832ad033954885e2a3a7fad4046968cDmitry V. Levin#endif /* VIDIOC_ENUM_FRAMESIZES */ 2580cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 2590cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_G_FMT: 2600cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_S_FMT: 2610cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_TRY_FMT: { 2620cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_format f; 2630cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 2640cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (umove(tcp, arg, &f) < 0) 2650cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 2660cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp)) { 2670cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", {type="); 2680cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_buf_types, f.type, "V4L2_BUF_TYPE_???"); 2690cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 2700cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if ((entering(tcp) && code != VIDIOC_G_FMT) 2710cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter || (exiting(tcp) && !syserror(tcp))) { 2720cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(exiting(tcp) && code != VIDIOC_G_FMT ? " => " : ", "); 2730cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter print_v4l2_format_fmt(&f); 2740cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 2750cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (exiting(tcp)) 2760cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("}"); 2770cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 2780cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 2790cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 2800cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_ENUM_FMT: { 2810cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_fmtdesc f; 2820cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 2830cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp) || umove(tcp, arg, &f) < 0) 2840cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 2850cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 2860cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", {index=%u", f.index); 2870cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (!syserror(tcp)) { 2880cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", type="); 2890cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_buf_types, f.type, "V4L2_BUF_TYPE_???"); 2900cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", flags="); 2910cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printflags(v4l2_format_description_flags, f.flags, 2920cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter "V4L2_FMT_FLAG_???"); 2931de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin tprints(", description="); 2941de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin print_quoted_string((const char *) f.description, 2951de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin sizeof(f.description), 2961de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin QUOTE_0_TERMINATED); 2971de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin tprints(", pixelformat="); 2980cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter print_pixelformat(f.pixelformat); 2990cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 3000cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("}"); 3010cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 3020cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 3030cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 3040cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_G_PARM: 3050cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_S_PARM: { 3060cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_streamparm s; 3070cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 3080cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp) && code == VIDIOC_G_PARM) 3090cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 3100cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (exiting(tcp) && syserror(tcp)) 3110cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return code == VIDIOC_S_PARM; 3120cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (umove(tcp, arg, &s) < 0) 3130cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 3140cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp)) { 3150cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", {type="); 3160cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_buf_types, s.type, "V4L2_BUF_TYPE_???"); 3170cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 3180cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 3190cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(exiting(tcp) && code == VIDIOC_S_PARM ? " => {" : ", {"); 3200cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (s.type == V4L2_BUF_TYPE_VIDEO_CAPTURE) { 3210cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_captureparm *cap = &s.parm.capture; 3220cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 3230cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("capability="); 3240cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printflags(v4l2_streaming_capabilities, 3250cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter cap->capability, "V4L2_CAP_???"); 3260cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 3270cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", capturemode="); 3280cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printflags(v4l2_capture_modes, 3290cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter cap->capturemode, "V4L2_MODE_???"); 3300cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 3310cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", timeperframe=" FMT_FRACT, 3320cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter ARGS_FRACT(cap->timeperframe)); 3330cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 3340cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", extendedmode=%u, readbuffers=%u", 3350cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter cap->extendedmode, 3360cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter cap->readbuffers); 3370cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } else 3380cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("..."); 3390cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("}"); 3400cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (exiting(tcp)) 3410cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("}"); 3420cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 3430cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 3440cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 3450cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_QUERYCTRL: { 3460cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_queryctrl c; 3470cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 3480cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (umove(tcp, arg, &c) < 0) 3490cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 3500cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter /* 'id' field must be printed : 3510cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * on enter 3520cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter * on exit if !syserror(tcp) && V4L2_CTRL_FLAG_NEXT_CTRL was set 3530cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter */ 3540cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp) 3550cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter || (exiting(tcp) && tcp->auxstr && !syserror(tcp))) { 3560cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(exiting(tcp) ? " => " : ", {id="); 3570f4ad30bdcb284a8e874b3d9345cb203c8cc5209Dmitry V. Levin#ifdef V4L2_CTRL_FLAG_NEXT_CTRL 3580cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tcp->auxstr = (c.id & V4L2_CTRL_FLAG_NEXT_CTRL) ? "" : NULL; 3590cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (tcp->auxstr) { 3600cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("V4L2_CTRL_FLAG_NEXT_CTRL|"); 3610cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter c.id &= ~V4L2_CTRL_FLAG_NEXT_CTRL; 3620cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 3630f4ad30bdcb284a8e874b3d9345cb203c8cc5209Dmitry V. Levin#endif 3640cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_control_ids, c.id, "V4L2_CID_???"); 3650cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 3660cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (exiting(tcp)) { 3670cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (!syserror(tcp)) { 3680cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", type="); 3690cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_control_types, c.type, 3700cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter "V4L2_CTRL_TYPE_???"); 3711de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin tprints(", name="); 3721de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin print_quoted_string((const char *) c.name, 3731de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin sizeof(c.name), 3741de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin QUOTE_0_TERMINATED); 3751de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin tprintf(", minimum=%i, maximum=%i, step=%i, " 3760cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter "default_value=%i, flags=", 3771de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin c.minimum, c.maximum, 3780cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter c.step, c.default_value); 3790cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printflags(v4l2_control_flags, c.flags, 3800cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter "V4L2_CTRL_FLAG_???"); 3810cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 3820cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("}"); 3830cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 3840cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 3850cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 3860cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 3870cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_G_CTRL: 3880cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_S_CTRL: { 3890cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_control c; 3900cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 3910cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp) || umove(tcp, arg, &c) < 0) 3920cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 3930cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", {id="); 3940cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_control_ids, c.id, "V4L2_CID_???"); 3950cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (!syserror(tcp) || code != VIDIOC_G_CTRL) 3960cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", value=%i", c.value); 3970cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("}"); 3980cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 3990cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 4000cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 4010f4ad30bdcb284a8e874b3d9345cb203c8cc5209Dmitry V. Levin#ifdef VIDIOC_S_EXT_CTRLS 4020cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_S_EXT_CTRLS: 4030cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_TRY_EXT_CTRLS: 4040cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_G_EXT_CTRLS: { 4050cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_ext_controls c; 4060cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter unsigned int n; 4070cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter bool must_print_values; 4080cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 4090cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp) && code == VIDIOC_G_EXT_CTRLS) 4100cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 4110cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (exiting(tcp) && syserror(tcp) && code != VIDIOC_G_EXT_CTRLS) 4120cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 4130cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter must_print_values = ((entering(tcp) && code != VIDIOC_G_EXT_CTRLS) 4140cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter || (exiting(tcp) && !syserror(tcp))); 4150cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (umove(tcp, arg, &c) < 0) 4160cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 4170cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(code != VIDIOC_G_EXT_CTRLS && exiting(tcp) ? " => " : ", "); 4180cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("{ctrl_class="); 4190cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_control_classes, c.ctrl_class, 4200cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter "V4L2_CTRL_CLASS_???"); 4210cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", count=%u", c.count); 4220cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (exiting(tcp) && syserror(tcp)) 4230cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", error_idx=%u", c.error_idx); 4240cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", controls=["); 4250cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter for (n = 0; n < c.count; ++n) { 4260cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_ext_control ctrl; 4270cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 4280cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (n > 0) 4290cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", "); 4300cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (umove(tcp, (long) (c.controls + n), &ctrl) < 0) 4310cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter break; 4320cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (abbrev(tcp) && n == 2) { 4330cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("..."); 4340cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter break; 4350cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 4360cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("{id="); 4370cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_control_ids, ctrl.id, "V4L2_CID_???"); 4380f4ad30bdcb284a8e874b3d9345cb203c8cc5209Dmitry V. Levin# if HAVE_DECL_V4L2_CTRL_TYPE_STRING 4390cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", size=%u", ctrl.size); 4400cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (ctrl.size > 0) { 4410cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (must_print_values) { 4420cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", string="); 4430cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printstr(tcp, (long) ctrl.string, ctrl.size); 4440cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 4450cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } else 4460f4ad30bdcb284a8e874b3d9345cb203c8cc5209Dmitry V. Levin# endif 4470cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter { 4480cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (must_print_values) { 449d67ba3e434d72e884a459e662496c0b9a6ac5f17Dmitry V. Levin tprintf(", value=%i, value64=%lld", ctrl.value, 450d67ba3e434d72e884a459e662496c0b9a6ac5f17Dmitry V. Levin (long long) ctrl.value64); 4510cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 4520cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 4530cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("}"); 4540cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 4550cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("]}"); 4560cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 4570cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 4580f4ad30bdcb284a8e874b3d9345cb203c8cc5209Dmitry V. Levin#endif /* VIDIOC_S_EXT_CTRLS */ 4590cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 4600cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_ENUMSTD: { 4610cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_standard s; 4620cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 4630cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (umove(tcp, arg, &s) < 0) 4640cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 4650cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp)) 4660cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", {index=%i", s.index); 4670cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter else { 4680cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (!syserror(tcp)) { 4691de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin tprints(", name="); 4701de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin print_quoted_string((const char *) s.name, 4711de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin sizeof(s.name), 4721de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin QUOTE_0_TERMINATED); 4730cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", frameperiod=" FMT_FRACT, ARGS_FRACT(s.frameperiod)); 4740cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", framelines=%i", s.framelines); 4750cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 4760cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("}"); 4770cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 4780cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 4790cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 4800cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 4810cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_G_STD: 4820cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_S_STD: { 4830cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter v4l2_std_id s; 4840cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 4850cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (code == VIDIOC_G_STD && exiting(tcp) && syserror(tcp)) 4860cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 4870cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (umove(tcp, arg, &s) < 0) 4880cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 4890cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if ((code == VIDIOC_S_STD) == entering(tcp)) 490d67ba3e434d72e884a459e662496c0b9a6ac5f17Dmitry V. Levin tprintf(", std=%#llx", (unsigned long long) s); 4910cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 4920cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 4930cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 4940cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_ENUMINPUT: { 4950cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_input i; 4960cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 4970cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp) || umove(tcp, arg, &i) < 0) 4980cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 4990cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", {index=%i", i.index); 5000cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (!syserror(tcp)) { 5011de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin tprints(", name="); 5021de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin print_quoted_string((const char *) i.name, 5031de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin sizeof(i.name), QUOTE_0_TERMINATED); 5041de59cf7460674e3eb13886bb5baf014389debd4Dmitry V. Levin tprints(", type="); 5050cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_input_types, i.type, 5060cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter "V4L2_INPUT_TYPE_???"); 5070cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 5080cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("}"); 5090cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 5100cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 5110cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 5120cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_G_INPUT: 5130cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_S_INPUT: { 5140cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter int index; 5150cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 5160cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp) || syserror(tcp) || umove(tcp, arg, &index) < 0) 5170cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 5180cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 5190cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", index=%i", index); 5200cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 5210cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 5220cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 523197db577e832ad033954885e2a3a7fad4046968cDmitry V. Levin#ifdef VIDIOC_ENUM_FRAMEINTERVALS 5240cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_ENUM_FRAMEINTERVALS: { 5250cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_frmivalenum f; 5260cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 5270cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp) || umove(tcp, arg, &f) < 0) 5280cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 5290cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", {index=%i, pixel_format=", f.index); 5300cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter print_pixelformat(f.pixel_format); 5310cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", width=%u, height=%u", f.width, f.height); 5320cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (!syserror(tcp)) { 5330cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", type="); 5340cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_frameinterval_types, f.type, 5350cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter "V4L2_FRMIVAL_TYPE_???"); 5360cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter switch (f.type) { 5370cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case V4L2_FRMIVAL_TYPE_DISCRETE: 5380cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", discrete=" FMT_FRACT, 5390cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter ARGS_FRACT(f.discrete)); 5400cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter break; 5410cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case V4L2_FRMIVAL_TYPE_STEPWISE: 5420cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case V4L2_FRMSIZE_TYPE_CONTINUOUS: 5430cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", stepwise={min=" FMT_FRACT ", max=" 5440cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter FMT_FRACT ", step=" FMT_FRACT "}", 5450cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter ARGS_FRACT(f.stepwise.min), 5460cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter ARGS_FRACT(f.stepwise.max), 5470cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter ARGS_FRACT(f.stepwise.step)); 5480cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter break; 5490cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 5500cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 5510cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("}"); 5520cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 5530cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 554197db577e832ad033954885e2a3a7fad4046968cDmitry V. Levin#endif /* VIDIOC_ENUM_FRAMEINTERVALS */ 5550cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 5560cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_CROPCAP: { 5570cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_cropcap c; 5580cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 5590cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp) || umove(tcp, arg, &c) < 0) 5600cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 5610cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", type="); 5620cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_buf_types, c.type, "V4L2_BUF_TYPE_???"); 5630cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (syserror(tcp)) 5640cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 5650cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", bounds=" FMT_RECT ", defrect=" FMT_RECT ", " 5660cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter "pixelaspect=" FMT_FRACT, ARGS_RECT(c.bounds), 5670cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter ARGS_RECT(c.defrect), ARGS_FRACT(c.pixelaspect)); 5680cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 5690cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 5700cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 5710cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_G_FBUF: 5720cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_S_FBUF: { 5730cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_framebuffer b; 5740cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 5750cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (syserror(tcp) && code == VIDIOC_G_FBUF) 5760cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 5770cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp) || umove(tcp, arg, &b) < 0) 5780cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 5790cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", {capability=%x, flags=%x, base=%p}", 5800cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter b.capability, b.flags, b.base); 5810cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 5820cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 5830cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 5840cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_REQBUFS: { 5850cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_requestbuffers reqbufs; 5860cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 5870cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (umove(tcp, arg, &reqbufs) < 0) 5880cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 5890cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp)) { 5900cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", {count=%u, type=", reqbufs.count); 5910cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_buf_types, reqbufs.type, "V4L2_BUF_TYPE_???"); 5920cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", memory="); 5930cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_memories, reqbufs.memory, "V4L2_MEMORY_???"); 5940cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("}"); 5950cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 5960cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } else if (syserror(tcp)) 5970cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 5980cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter else { 5990cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter static char outstr[sizeof("{count=}") + sizeof(int) * 3]; 6000cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 6010cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter sprintf(outstr, "{count=%u}", reqbufs.count); 6020cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tcp->auxstr = outstr; 6030cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1 + RVAL_STR; 6040cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 6050cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 6060cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 6070cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_QUERYBUF: 6080cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_QBUF: 6090cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_DQBUF: { 6100cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter struct v4l2_buffer b; 6110cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 6120cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (umove(tcp, arg, &b) < 0) 6130cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 6140cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp)) { 6150cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", {type="); 6160cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_buf_types, b.type, "V4L2_BUF_TYPE_???"); 6170cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (code != VIDIOC_DQBUF) 6180cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", index=%u", b.index); 6190cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } else { 6200cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (!syserror(tcp)) { 6210cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (code == VIDIOC_DQBUF) 6220cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", index=%u", b.index); 6230cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", memory="); 6240cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_memories, b.memory, "V4L2_MEMORY_???"); 6250cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 6260cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (b.memory == V4L2_MEMORY_MMAP) { 6270cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", m.offset=%#x", b.m.offset); 6280cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } else if (b.memory == V4L2_MEMORY_USERPTR) { 6290cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", m.userptr=%#lx", b.m.userptr); 6300cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 6310cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 6320cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprintf(", length=%u, bytesused=%u, flags=", 6330cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter b.length, b.bytesused); 6340cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printflags(v4l2_buf_flags, b.flags, "V4L2_BUF_FLAG_???"); 6350cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (code == VIDIOC_DQBUF) 636bfe6d04d9c73de1f3fd5b28d115fa80202fd1776Mike Frysinger tprintf(", timestamp = {%ju.%06ju}", 637bfe6d04d9c73de1f3fd5b28d115fa80202fd1776Mike Frysinger (uintmax_t)b.timestamp.tv_sec, 638bfe6d04d9c73de1f3fd5b28d115fa80202fd1776Mike Frysinger (uintmax_t)b.timestamp.tv_usec); 6390cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", ..."); 6400cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 6410cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints("}"); 6420cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 6430cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 6440cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 6450cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 6460cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_STREAMON: 6470cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter case VIDIOC_STREAMOFF: { 6480cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter int type; 6490cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 6500cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (umove(tcp, arg, &type) < 0) 6510cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 6520cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter if (entering(tcp)) { 6530cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter tprints(", "); 6540cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter printxval(v4l2_buf_types, type, "V4L2_BUF_TYPE_???"); 6550cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 6560cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 1; 6570cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 6580cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter 6590cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter default: /* decode on exit */ 6600cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter return 0; 6610cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter } 6620cc961440b527ff8c16954fc411a1529072edb92Philippe De Muyter} 663