| .. -*- coding: utf-8; mode: rst -*- |
| |
| .. _VIDIOC_G_PARM: |
| |
| ********************************** |
| ioctl VIDIOC_G_PARM, VIDIOC_S_PARM |
| ********************************** |
| |
| Name |
| ==== |
| |
| VIDIOC_G_PARM - VIDIOC_S_PARM - Get or set streaming parameters |
| |
| |
| Synopsis |
| ======== |
| |
| .. c:function:: int ioctl( int fd, VIDIOC_G_PARM, v4l2_streamparm *argp ) |
| :name: VIDIOC_G_PARM |
| |
| .. c:function:: int ioctl( int fd, VIDIOC_S_PARM, v4l2_streamparm *argp ) |
| :name: VIDIOC_S_PARM |
| |
| |
| Arguments |
| ========= |
| |
| ``fd`` |
| File descriptor returned by :ref:`open() <func-open>`. |
| |
| ``argp`` |
| Pointer to struct :c:type:`v4l2_streamparm`. |
| |
| |
| Description |
| =========== |
| |
| The current video standard determines a nominal number of frames per |
| second. If less than this number of frames is to be captured or output, |
| applications can request frame skipping or duplicating on the driver |
| side. This is especially useful when using the :ref:`read() <func-read>` or |
| :ref:`write() <func-write>`, which are not augmented by timestamps or sequence |
| counters, and to avoid unnecessary data copying. |
| |
| Further these ioctls can be used to determine the number of buffers used |
| internally by a driver in read/write mode. For implications see the |
| section discussing the :ref:`read() <func-read>` function. |
| |
| To get and set the streaming parameters applications call the |
| :ref:`VIDIOC_G_PARM <VIDIOC_G_PARM>` and :ref:`VIDIOC_S_PARM <VIDIOC_G_PARM>` ioctl, respectively. They take a |
| pointer to a struct :c:type:`v4l2_streamparm` which contains a |
| union holding separate parameters for input and output devices. |
| |
| |
| .. tabularcolumns:: |p{3.5cm}|p{3.5cm}|p{3.5cm}|p{7.0cm}| |
| |
| .. c:type:: v4l2_streamparm |
| |
| .. flat-table:: struct v4l2_streamparm |
| :header-rows: 0 |
| :stub-columns: 0 |
| :widths: 1 1 1 2 |
| |
| * - __u32 |
| - ``type`` |
| - |
| - The buffer (stream) type, same as struct |
| :c:type:`v4l2_format` ``type``, set by the |
| application. See :c:type:`v4l2_buf_type`. |
| * - union |
| - ``parm`` |
| - |
| - |
| * - |
| - struct :c:type:`v4l2_captureparm` |
| - ``capture`` |
| - Parameters for capture devices, used when ``type`` is |
| ``V4L2_BUF_TYPE_VIDEO_CAPTURE`` or |
| ``V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE``. |
| * - |
| - struct :c:type:`v4l2_outputparm` |
| - ``output`` |
| - Parameters for output devices, used when ``type`` is |
| ``V4L2_BUF_TYPE_VIDEO_OUTPUT`` or ``V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE``. |
| * - |
| - __u8 |
| - ``raw_data``\ [200] |
| - A place holder for future extensions. |
| |
| |
| |
| .. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| |
| |
| .. c:type:: v4l2_captureparm |
| |
| .. flat-table:: struct v4l2_captureparm |
| :header-rows: 0 |
| :stub-columns: 0 |
| :widths: 1 1 2 |
| |
| * - __u32 |
| - ``capability`` |
| - See :ref:`parm-caps`. |
| * - __u32 |
| - ``capturemode`` |
| - Set by drivers and applications, see :ref:`parm-flags`. |
| * - struct :c:type:`v4l2_fract` |
| - ``timeperframe`` |
| - This is the desired period between successive frames captured by |
| the driver, in seconds. The field is intended to skip frames on |
| the driver side, saving I/O bandwidth. |
| |
| Applications store here the desired frame period, drivers return |
| the actual frame period, which must be greater or equal to the |
| nominal frame period determined by the current video standard |
| (struct :c:type:`v4l2_standard` ``frameperiod`` |
| field). Changing the video standard (also implicitly by switching |
| the video input) may reset this parameter to the nominal frame |
| period. To reset manually applications can just set this field to |
| zero. |
| |
| Drivers support this function only when they set the |
| ``V4L2_CAP_TIMEPERFRAME`` flag in the ``capability`` field. |
| * - __u32 |
| - ``extendedmode`` |
| - Custom (driver specific) streaming parameters. When unused, |
| applications and drivers must set this field to zero. Applications |
| using this field should check the driver name and version, see |
| :ref:`querycap`. |
| * - __u32 |
| - ``readbuffers`` |
| - Applications set this field to the desired number of buffers used |
| internally by the driver in :ref:`read() <func-read>` mode. |
| Drivers return the actual number of buffers. When an application |
| requests zero buffers, drivers should just return the current |
| setting rather than the minimum or an error code. For details see |
| :ref:`rw`. |
| * - __u32 |
| - ``reserved``\ [4] |
| - Reserved for future extensions. Drivers and applications must set |
| the array to zero. |
| |
| |
| |
| .. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| |
| |
| .. c:type:: v4l2_outputparm |
| |
| .. flat-table:: struct v4l2_outputparm |
| :header-rows: 0 |
| :stub-columns: 0 |
| :widths: 1 1 2 |
| |
| * - __u32 |
| - ``capability`` |
| - See :ref:`parm-caps`. |
| * - __u32 |
| - ``outputmode`` |
| - Set by drivers and applications, see :ref:`parm-flags`. |
| * - struct :c:type:`v4l2_fract` |
| - ``timeperframe`` |
| - This is the desired period between successive frames output by the |
| driver, in seconds. |
| * - :cspan:`2` |
| |
| The field is intended to repeat frames on the driver side in |
| :ref:`write() <func-write>` mode (in streaming mode timestamps |
| can be used to throttle the output), saving I/O bandwidth. |
| |
| Applications store here the desired frame period, drivers return |
| the actual frame period, which must be greater or equal to the |
| nominal frame period determined by the current video standard |
| (struct :c:type:`v4l2_standard` ``frameperiod`` |
| field). Changing the video standard (also implicitly by switching |
| the video output) may reset this parameter to the nominal frame |
| period. To reset manually applications can just set this field to |
| zero. |
| |
| Drivers support this function only when they set the |
| ``V4L2_CAP_TIMEPERFRAME`` flag in the ``capability`` field. |
| * - __u32 |
| - ``extendedmode`` |
| - Custom (driver specific) streaming parameters. When unused, |
| applications and drivers must set this field to zero. Applications |
| using this field should check the driver name and version, see |
| :ref:`querycap`. |
| * - __u32 |
| - ``writebuffers`` |
| - Applications set this field to the desired number of buffers used |
| internally by the driver in :ref:`write() <func-write>` mode. Drivers |
| return the actual number of buffers. When an application requests |
| zero buffers, drivers should just return the current setting |
| rather than the minimum or an error code. For details see |
| :ref:`rw`. |
| * - __u32 |
| - ``reserved``\ [4] |
| - Reserved for future extensions. Drivers and applications must set |
| the array to zero. |
| |
| |
| |
| .. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| |
| |
| .. _parm-caps: |
| |
| .. flat-table:: Streaming Parameters Capabilites |
| :header-rows: 0 |
| :stub-columns: 0 |
| :widths: 3 1 4 |
| |
| * - ``V4L2_CAP_TIMEPERFRAME`` |
| - 0x1000 |
| - The frame skipping/repeating controlled by the ``timeperframe`` |
| field is supported. |
| |
| |
| |
| .. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| |
| |
| .. _parm-flags: |
| |
| .. flat-table:: Capture Parameters Flags |
| :header-rows: 0 |
| :stub-columns: 0 |
| :widths: 3 1 4 |
| |
| * - ``V4L2_MODE_HIGHQUALITY`` |
| - 0x0001 |
| - High quality imaging mode. High quality mode is intended for still |
| imaging applications. The idea is to get the best possible image |
| quality that the hardware can deliver. It is not defined how the |
| driver writer may achieve that; it will depend on the hardware and |
| the ingenuity of the driver writer. High quality mode is a |
| different mode from the regular motion video capture modes. In |
| high quality mode: |
| |
| - The driver may be able to capture higher resolutions than for |
| motion capture. |
| |
| - The driver may support fewer pixel formats than motion capture |
| (eg; true color). |
| |
| - The driver may capture and arithmetically combine multiple |
| successive fields or frames to remove color edge artifacts and |
| reduce the noise in the video data. |
| |
| - The driver may capture images in slices like a scanner in order |
| to handle larger format images than would otherwise be |
| possible. |
| |
| - An image capture operation may be significantly slower than |
| motion capture. |
| |
| - Moving objects in the image might have excessive motion blur. |
| |
| - Capture might only work through the :ref:`read() <func-read>` call. |
| |
| |
| Return Value |
| ============ |
| |
| On success 0 is returned, on error -1 and the ``errno`` variable is set |
| appropriately. The generic error codes are described at the |
| :ref:`Generic Error Codes <gen-errors>` chapter. |