Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 1 | .. -*- coding: utf-8; mode: rst -*- |
| 2 | |
Mauro Carvalho Chehab | af4a4d0 | 2016-07-01 13:42:29 -0300 | [diff] [blame] | 3 | .. _VIDIOC_CROPCAP: |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 4 | |
| 5 | ******************** |
| 6 | ioctl VIDIOC_CROPCAP |
| 7 | ******************** |
| 8 | |
Mauro Carvalho Chehab | 15e7d61 | 2016-07-05 15:14:35 -0300 | [diff] [blame] | 9 | Name |
Mauro Carvalho Chehab | 586027c | 2016-07-05 07:58:48 -0300 | [diff] [blame] | 10 | ==== |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 11 | |
Mauro Carvalho Chehab | 586027c | 2016-07-05 07:58:48 -0300 | [diff] [blame] | 12 | VIDIOC_CROPCAP - Information about the video cropping and scaling abilities |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 13 | |
Mauro Carvalho Chehab | 15e7d61 | 2016-07-05 15:14:35 -0300 | [diff] [blame] | 14 | |
| 15 | Synopsis |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 16 | ======== |
| 17 | |
Mauro Carvalho Chehab | 41d8046 | 2016-08-19 16:53:38 -0300 | [diff] [blame] | 18 | .. c:function:: int ioctl( int fd, VIDIOC_CROPCAP, struct v4l2_cropcap *argp ) |
| 19 | :name: VIDIOC_CROPCAP |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 20 | |
Mauro Carvalho Chehab | 586027c | 2016-07-05 07:58:48 -0300 | [diff] [blame] | 21 | |
Mauro Carvalho Chehab | 15e7d61 | 2016-07-05 15:14:35 -0300 | [diff] [blame] | 22 | Arguments |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 23 | ========= |
| 24 | |
| 25 | ``fd`` |
| 26 | File descriptor returned by :ref:`open() <func-open>`. |
| 27 | |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 28 | ``argp`` |
| 29 | |
| 30 | |
Mauro Carvalho Chehab | 15e7d61 | 2016-07-05 15:14:35 -0300 | [diff] [blame] | 31 | Description |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 32 | =========== |
| 33 | |
| 34 | Applications use this function to query the cropping limits, the pixel |
| 35 | aspect of images and to calculate scale factors. They set the ``type`` |
| 36 | field of a v4l2_cropcap structure to the respective buffer (stream) |
Mauro Carvalho Chehab | 2212ff2 | 2016-07-01 14:33:56 -0300 | [diff] [blame] | 37 | type and call the :ref:`VIDIOC_CROPCAP` ioctl with a pointer to this |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 38 | structure. Drivers fill the rest of the structure. The results are |
| 39 | constant except when switching the video standard. Remember this switch |
| 40 | can occur implicit when switching the video input or output. |
| 41 | |
| 42 | Do not use the multiplanar buffer types. Use |
| 43 | ``V4L2_BUF_TYPE_VIDEO_CAPTURE`` instead of |
| 44 | ``V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE`` and use |
| 45 | ``V4L2_BUF_TYPE_VIDEO_OUTPUT`` instead of |
| 46 | ``V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE``. |
| 47 | |
| 48 | This ioctl must be implemented for video capture or output devices that |
| 49 | support cropping and/or scaling and/or have non-square pixels, and for |
| 50 | overlay devices. |
| 51 | |
| 52 | |
Mauro Carvalho Chehab | e8be7e9 | 2016-08-29 17:37:59 -0300 | [diff] [blame] | 53 | .. c:type:: v4l2_cropcap |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 54 | |
Mauro Carvalho Chehab | 5bd4bb7 | 2016-08-17 08:14:19 -0300 | [diff] [blame] | 55 | .. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| |
| 56 | |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 57 | .. flat-table:: struct v4l2_cropcap |
| 58 | :header-rows: 0 |
| 59 | :stub-columns: 0 |
| 60 | :widths: 1 1 2 |
| 61 | |
Laurent Pinchart | c2b66ca | 2016-09-05 08:44:34 -0300 | [diff] [blame] | 62 | * - __u32 |
| 63 | - ``type`` |
| 64 | - Type of the data stream, set by the application. Only these types |
| 65 | are valid here: ``V4L2_BUF_TYPE_VIDEO_CAPTURE``, |
| 66 | ``V4L2_BUF_TYPE_VIDEO_OUTPUT`` and |
| 67 | ``V4L2_BUF_TYPE_VIDEO_OVERLAY``. See :c:type:`v4l2_buf_type`. |
| 68 | * - struct :ref:`v4l2_rect <v4l2-rect-crop>` |
| 69 | - ``bounds`` |
| 70 | - Defines the window within capturing or output is possible, this |
| 71 | may exclude for example the horizontal and vertical blanking |
| 72 | areas. The cropping rectangle cannot exceed these limits. Width |
| 73 | and height are defined in pixels, the driver writer is free to |
| 74 | choose origin and units of the coordinate system in the analog |
| 75 | domain. |
| 76 | * - struct :ref:`v4l2_rect <v4l2-rect-crop>` |
| 77 | - ``defrect`` |
| 78 | - Default cropping rectangle, it shall cover the "whole picture". |
| 79 | Assuming pixel aspect 1/1 this could be for example a 640 × 480 |
| 80 | rectangle for NTSC, a 768 × 576 rectangle for PAL and SECAM |
| 81 | centered over the active picture area. The same co-ordinate system |
| 82 | as for ``bounds`` is used. |
| 83 | * - struct :c:type:`v4l2_fract` |
| 84 | - ``pixelaspect`` |
| 85 | - This is the pixel aspect (y / x) when no scaling is applied, the |
| 86 | ratio of the actual sampling frequency and the frequency required |
| 87 | to get square pixels. |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 88 | |
Laurent Pinchart | c2b66ca | 2016-09-05 08:44:34 -0300 | [diff] [blame] | 89 | When cropping coordinates refer to square pixels, the driver sets |
| 90 | ``pixelaspect`` to 1/1. Other common values are 54/59 for PAL and |
| 91 | SECAM, 11/10 for NTSC sampled according to [:ref:`itu601`]. |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 92 | |
| 93 | |
| 94 | |
| 95 | .. _v4l2-rect-crop: |
| 96 | |
Mauro Carvalho Chehab | 5bd4bb7 | 2016-08-17 08:14:19 -0300 | [diff] [blame] | 97 | .. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| |
| 98 | |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 99 | .. flat-table:: struct v4l2_rect |
| 100 | :header-rows: 0 |
| 101 | :stub-columns: 0 |
| 102 | :widths: 1 1 2 |
| 103 | |
Laurent Pinchart | c2b66ca | 2016-09-05 08:44:34 -0300 | [diff] [blame] | 104 | * - __s32 |
| 105 | - ``left`` |
| 106 | - Horizontal offset of the top, left corner of the rectangle, in |
| 107 | pixels. |
| 108 | * - __s32 |
| 109 | - ``top`` |
| 110 | - Vertical offset of the top, left corner of the rectangle, in |
| 111 | pixels. |
| 112 | * - __u32 |
| 113 | - ``width`` |
| 114 | - Width of the rectangle, in pixels. |
| 115 | * - __u32 |
| 116 | - ``height`` |
| 117 | - Height of the rectangle, in pixels. |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 118 | |
| 119 | |
Mauro Carvalho Chehab | 15e7d61 | 2016-07-05 15:14:35 -0300 | [diff] [blame] | 120 | Return Value |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 121 | ============ |
| 122 | |
| 123 | On success 0 is returned, on error -1 and the ``errno`` variable is set |
| 124 | appropriately. The generic error codes are described at the |
| 125 | :ref:`Generic Error Codes <gen-errors>` chapter. |
| 126 | |
| 127 | EINVAL |
Mauro Carvalho Chehab | e8be7e9 | 2016-08-29 17:37:59 -0300 | [diff] [blame] | 128 | The struct :c:type:`v4l2_cropcap` ``type`` is |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 129 | invalid. |
Hans Verkuil | 3f8d56b | 2016-07-20 09:39:42 -0300 | [diff] [blame] | 130 | |
| 131 | ENODATA |
| 132 | Cropping is not supported for this input or output. |