← Documents Documentation/userspace-api/media/v4l/vidioc-g-parm.rst GitHub 원문 ↗

Linux 6.18.37 · 사용자 공간 API

VIDIOC_G_PARM·VIDIOC_S_PARM ioctl

capture·output stream의 frame interval, read/write 내부 buffer 수, driver custom mode와 고품질 still imaging 모드를 조회·설정하는 방법을 설명합니다.

Source pathDocumentation/userspace-api/media/v4l/vidioc-g-parm.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

vidioc-g-parm.rst:1-269

stream의 frame interval과 내부 read/write buffer 및 high-quality capture mode를 다룹니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 .. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
2 .. c:namespace:: V4L
3
4 .. _VIDIOC_G_PARM:
5
6 **********************************
7 ioctl VIDIOC_G_PARM, VIDIOC_S_PARM
8 **********************************
9
10 Name
11 ====
12
13 VIDIOC_G_PARM - VIDIOC_S_PARM - Get or set streaming parameters
14
15 Synopsis
16 ========
17
18 .. c:macro:: VIDIOC_G_PARM
19
20 ``int ioctl(int fd, VIDIOC_G_PARM, v4l2_streamparm *argp)``
21
22 .. c:macro:: VIDIOC_S_PARM
23
24 ``int ioctl(int fd, VIDIOC_S_PARM, v4l2_streamparm *argp)``
25
26 Arguments
27 =========
28
29 ``fd``
30 File descriptor returned by :c:func:`open()`.
31
32 ``argp``
33 Pointer to struct :c:type:`v4l2_streamparm`.
34
35 Description
36 ===========
37
38 Applications can request a different frame interval. The capture or
39 output device will be reconfigured to support the requested frame
40 interval if possible. Optionally drivers may choose to skip or
41 repeat frames to achieve the requested frame interval.
42
43 For stateful encoders (see :ref:`encoder`) this represents the
44 frame interval that is typically embedded in the encoded video stream.
45
46 Changing the frame interval shall never change the format. Changing the
47 format, on the other hand, may change the frame interval.
48
49 Further these ioctls can be used to determine the number of buffers used
50 internally by a driver in read/write mode. For implications see the
51 section discussing the :c:func:`read()` function.
52
53 To get and set the streaming parameters applications call the
54 :ref:`VIDIOC_G_PARM <VIDIOC_G_PARM>` and
55 :ref:`VIDIOC_S_PARM <VIDIOC_G_PARM>` ioctl, respectively. They take a
56 pointer to a struct :c:type:`v4l2_streamparm` which contains a
57 union holding separate parameters for input and output devices.
58
59 .. tabularcolumns:: |p{3.7cm}|p{3.5cm}|p{10.1cm}|
60
61 .. c:type:: v4l2_streamparm
62
63 .. flat-table:: struct v4l2_streamparm
64 :header-rows: 0
65 :stub-columns: 0
66 :widths: 1 1 2
67
68 * - __u32
69 - ``type``
70 - The buffer (stream) type, same as struct
71 :c:type:`v4l2_format` ``type``, set by the
72 application. See :c:type:`v4l2_buf_type`.
73 * - union {
74 - ``parm``
75 * - struct :c:type:`v4l2_captureparm`
76 - ``capture``
77 - Parameters for capture devices, used when ``type`` is
78 ``V4L2_BUF_TYPE_VIDEO_CAPTURE`` or
79 ``V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE``.
80 * - struct :c:type:`v4l2_outputparm`
81 - ``output``
82 - Parameters for output devices, used when ``type`` is
83 ``V4L2_BUF_TYPE_VIDEO_OUTPUT`` or ``V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE``.
84 * - __u8
85 - ``raw_data``\ [200]
86 - A place holder for future extensions.
87 * - }
88
89
90 .. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.5cm}|
91
92 .. c:type:: v4l2_captureparm
93
94 .. flat-table:: struct v4l2_captureparm
95 :header-rows: 0
96 :stub-columns: 0
97 :widths: 1 1 2
98
99 * - __u32
100 - ``capability``
101 - See :ref:`parm-caps`.
102 * - __u32
103 - ``capturemode``
104 - Set by drivers and applications, see :ref:`parm-flags`.
105 * - struct :c:type:`v4l2_fract`
106 - ``timeperframe``
107 - This is the desired period between successive frames captured by
108 the driver, in seconds.
109 * - :cspan:`2`
110
111 This will configure the speed at which the video source (e.g. a sensor)
112 generates video frames. If the speed is fixed, then the driver may
113 choose to skip or repeat frames in order to achieve the requested
114 frame rate.
115
116 For stateful encoders (see :ref:`encoder`) this represents the
117 frame interval that is typically embedded in the encoded video stream.
118
119 Applications store here the desired frame period, drivers return
120 the actual frame period.
121
122 Changing the video standard (also implicitly by switching
123 the video input) may reset this parameter to the nominal frame
124 period. To reset manually applications can just set this field to
125 zero.
126
127 Drivers support this function only when they set the
128 ``V4L2_CAP_TIMEPERFRAME`` flag in the ``capability`` field.
129 * - __u32
130 - ``extendedmode``
131 - Custom (driver specific) streaming parameters. When unused,
132 applications and drivers must set this field to zero. Applications
133 using this field should check the driver name and version, see
134 :ref:`querycap`.
135 * - __u32
136 - ``readbuffers``
137 - Applications set this field to the desired number of buffers used
138 internally by the driver in :c:func:`read()` mode.
139 Drivers return the actual number of buffers. When an application
140 requests zero buffers, drivers should just return the current
141 setting rather than the minimum or an error code. For details see
142 :ref:`rw`.
143 * - __u32
144 - ``reserved``\ [4]
145 - Reserved for future extensions. Drivers and applications must set
146 the array to zero.
147
148
149 .. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.5cm}|
150
151 .. c:type:: v4l2_outputparm
152
153 .. flat-table:: struct v4l2_outputparm
154 :header-rows: 0
155 :stub-columns: 0
156 :widths: 1 1 2
157
158 * - __u32
159 - ``capability``
160 - See :ref:`parm-caps`.
161 * - __u32
162 - ``outputmode``
163 - Set by drivers and applications, see :ref:`parm-flags`.
164 * - struct :c:type:`v4l2_fract`
165 - ``timeperframe``
166 - This is the desired period between successive frames output by the
167 driver, in seconds.
168 * - :cspan:`2`
169
170 The field is intended to repeat frames on the driver side in
171 :c:func:`write()` mode (in streaming mode timestamps
172 can be used to throttle the output), saving I/O bandwidth.
173
174 For stateful encoders (see :ref:`encoder`) this represents the
175 frame interval that is typically embedded in the encoded video stream
176 and it provides a hint to the encoder of the speed at which raw
177 frames are queued up to the encoder.
178
179 Applications store here the desired frame period, drivers return
180 the actual frame period.
181
182 Changing the video standard (also implicitly by switching
183 the video output) may reset this parameter to the nominal frame
184 period. To reset manually applications can just set this field to
185 zero.
186
187 Drivers support this function only when they set the
188 ``V4L2_CAP_TIMEPERFRAME`` flag in the ``capability`` field.
189 * - __u32
190 - ``extendedmode``
191 - Custom (driver specific) streaming parameters. When unused,
192 applications and drivers must set this field to zero. Applications
193 using this field should check the driver name and version, see
194 :ref:`querycap`.
195 * - __u32
196 - ``writebuffers``
197 - Applications set this field to the desired number of buffers used
198 internally by the driver in :c:func:`write()` mode. Drivers
199 return the actual number of buffers. When an application requests
200 zero buffers, drivers should just return the current setting
201 rather than the minimum or an error code. For details see
202 :ref:`rw`.
203 * - __u32
204 - ``reserved``\ [4]
205 - Reserved for future extensions. Drivers and applications must set
206 the array to zero.
207
208
209 .. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.5cm}|
210
211 .. _parm-caps:
212
213 .. flat-table:: Streaming Parameters Capabilities
214 :header-rows: 0
215 :stub-columns: 0
216 :widths: 3 1 4
217
218 * - ``V4L2_CAP_TIMEPERFRAME``
219 - 0x1000
220 - The frame period can be modified by setting the ``timeperframe``
221 field.
222
223
224 .. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.5cm}|
225
226 .. _parm-flags:
227
228 .. flat-table:: Capture Parameters Flags
229 :header-rows: 0
230 :stub-columns: 0
231 :widths: 3 1 4
232
233 * - ``V4L2_MODE_HIGHQUALITY``
234 - 0x0001
235 - High quality imaging mode. High quality mode is intended for still
236 imaging applications. The idea is to get the best possible image
237 quality that the hardware can deliver. It is not defined how the
238 driver writer may achieve that; it will depend on the hardware and
239 the ingenuity of the driver writer. High quality mode is a
240 different mode from the regular motion video capture modes. In
241 high quality mode:
242
243 - The driver may be able to capture higher resolutions than for
244 motion capture.
245
246 - The driver may support fewer pixel formats than motion capture
247 (eg; true color).
248
249 - The driver may capture and arithmetically combine multiple
250 successive fields or frames to remove color edge artifacts and
251 reduce the noise in the video data.
252
253 - The driver may capture images in slices like a scanner in order
254 to handle larger format images than would otherwise be
255 possible.
256
257 - An image capture operation may be significantly slower than
258 motion capture.
259
260 - Moving objects in the image might have excessive motion blur.
261
262 - Capture might only work through the :c:func:`read()` call.
263
264 Return Value
265 ============
266
267 On success 0 is returned, on error -1 and the ``errno`` variable is set
268 appropriately. The generic error codes are described at the
269 :ref:`Generic Error Codes <gen-errors>` chapter.
270

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

목적, 호출 형식과 인자

1-34

`VIDIOC_G_PARM`과 `VIDIOC_S_PARM`은 capture 또는 output stream의 매개변수를 조회·설정합니다. 두 명령은 input·output용 union을 담는 `v4l2_streamparm *argp`를 받습니다.

`fd`는 `open()`이 반환한 파일 디스크립터입니다. 애플리케이션은 stream 방향에 맞는 buffer type과 union 멤버를 선택해야 합니다.

.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
.. c:namespace:: V4L

.. _VIDIOC_G_PARM:

**********************************
ioctl VIDIOC_G_PARM, VIDIOC_S_PARM
**********************************

Name
====

VIDIOC_G_PARM - VIDIOC_S_PARM - Get or set streaming parameters

Synopsis
========

.. c:macro:: VIDIOC_G_PARM

``int ioctl(int fd, VIDIOC_G_PARM, v4l2_streamparm *argp)``

.. c:macro:: VIDIOC_S_PARM

``int ioctl(int fd, VIDIOC_S_PARM, v4l2_streamparm *argp)``

Arguments
=========

``fd``
    File descriptor returned by :c:func:`open()`.

``argp``
    Pointer to struct :c:type:`v4l2_streamparm`.

frame interval과 내부 buffer

35-58

애플리케이션은 다른 frame interval을 요청할 수 있습니다. 장치는 가능하면 해당 interval을 지원하도록 재구성하며, 드라이버는 선택적으로 frame을 건너뛰거나 반복할 수 있습니다.

stateful encoder에서 이 값은 일반적으로 인코딩된 video stream에 포함되는 frame interval을 뜻합니다.

frame interval 변경은 format을 바꾸면 안 됩니다. 반대로 format을 변경하면 frame interval은 바뀔 수 있습니다. 따라서 S_FMT 뒤에는 streaming parameter를 다시 조회해야 합니다.

이 ioctl은 read/write 모드에서 드라이버가 내부적으로 사용하는 buffer 수를 확인·요청하는 데도 사용합니다.

stream parameter 협상
buffer type과 방향 선택VIDIOC_G_PARM으로 현재 매개변수 조회필요하면 format 먼저 설정원하는 timeperframe과 buffer 수 설정VIDIOC_S_PARM 호출드라이버가 반환한 실제값 확인

format 변경 가능성을 고려해 frame interval을 마지막에 확정합니다.

Description
===========

Applications can request a different frame interval. The capture or
output device will be reconfigured to support the requested frame
interval if possible. Optionally drivers may choose to skip or
repeat frames to achieve the requested frame interval.

For stateful encoders (see :ref:`encoder`) this represents the
frame interval that is typically embedded in the encoded video stream.

Changing the frame interval shall never change the format. Changing the
format, on the other hand, may change the frame interval.

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 :c: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.

struct v4l2_streamparm

59-89
v4l2_streamparm 필드
형식필드사용 조건
`__u32``type``v4l2_format.type`과 같은 buffer stream type
`struct v4l2_captureparm``parm.capture``V4L2_BUF_TYPE_VIDEO_CAPTURE` 또는 `V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE`
`struct v4l2_outputparm``parm.output``V4L2_BUF_TYPE_VIDEO_OUTPUT` 또는 `V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE`
`__u8[200]``parm.raw_data[200]`미래 확장을 위한 자리

stream type에 따라 capture 또는 output union 멤버를 사용합니다.

.. tabularcolumns:: |p{3.7cm}|p{3.5cm}|p{10.1cm}|

.. c:type:: v4l2_streamparm

.. flat-table:: struct v4l2_streamparm
    :header-rows:  0
    :stub-columns: 0
    :widths:       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.
    * - }

struct v4l2_captureparm

90-147
v4l2_captureparm 필드
형식필드의미
`__u32``capability`Streaming Parameters Capabilities
`__u32``capturemode`드라이버와 애플리케이션이 설정하는 capture mode flag
`struct v4l2_fract``timeperframe`연속 capture frame 사이의 원하는 초 단위 주기. 입력은 요청값, 출력은 실제값
`__u32``extendedmode`드라이버별 custom parameter. 미사용 시 0
`__u32``readbuffers`read 모드 내부 buffer 요청 수와 실제 수
`__u32[4]``reserved[4]`미래 확장용. 드라이버와 애플리케이션 모두 0

capture source의 frame period와 read 모드 buffer를 다룹니다.

`timeperframe`은 sensor 같은 video source의 frame 생성 속도를 구성합니다. source 속도가 고정이면 드라이버가 frame을 건너뛰거나 반복해 요청 frame rate를 맞출 수 있습니다.

stateful encoder에서는 일반적으로 bitstream에 포함될 frame interval입니다. video standard가 바뀌거나 video input 전환으로 standard가 암묵적으로 바뀌면 nominal period로 재설정될 수 있고, 수동 재설정은 이 필드를 0으로 설정합니다.

`timeperframe`은 `capability`에 `V4L2_CAP_TIMEPERFRAME`이 있을 때만 지원됩니다. `extendedmode`를 쓰는 애플리케이션은 driver name과 version을 확인해야 합니다.

`readbuffers = 0` 요청은 최소 수나 오류가 아니라 현재 설정을 반환해야 합니다. 드라이버는 요청값을 받아 실제 내부 buffer 수를 돌려줍니다.

.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.5cm}|

.. 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.
    * - :cspan:`2`

	This will configure the speed at which the video source (e.g. a sensor)
	generates video frames. If the speed is fixed, then the driver may
	choose to skip or repeat frames in order to achieve the requested
	frame rate.

	For stateful encoders (see :ref:`encoder`) this represents the
	frame interval that is typically embedded in the encoded video stream.

	Applications store here the desired frame period, drivers return
	the actual frame period.

	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 :c: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.

struct v4l2_outputparm

148-207
v4l2_outputparm 필드
형식필드의미
`__u32``capability`Streaming Parameters Capabilities
`__u32``outputmode`드라이버와 애플리케이션이 설정하는 output mode flag
`struct v4l2_fract``timeperframe`연속 output frame 사이의 원하는 초 단위 주기. 입력은 요청값, 출력은 실제값
`__u32``extendedmode`드라이버별 custom parameter. 미사용 시 0
`__u32``writebuffers`write 모드 내부 buffer 요청 수와 실제 수
`__u32[4]``reserved[4]`미래 확장용. 드라이버와 애플리케이션 모두 0

output frame period와 write 모드 내부 buffer를 다룹니다.

output `timeperframe`은 write 모드에서 드라이버가 frame을 반복해 I/O bandwidth를 줄이는 용도입니다. streaming 모드에서는 timestamp로 출력 속도를 제한할 수 있습니다.

stateful encoder에서는 bitstream에 포함되는 frame interval이자 raw frame이 encoder에 queue되는 속도에 대한 힌트입니다.

video standard 또는 output 전환으로 nominal period에 재설정될 수 있으며 0을 써서 수동 재설정합니다. 지원 여부는 `V4L2_CAP_TIMEPERFRAME`으로 확인합니다.

`writebuffers = 0`이면 현재 설정을 반환해야 합니다. `extendedmode` 사용 시 driver name과 version을 확인하고 `reserved[4]`는 0으로 둡니다.


.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.5cm}|

.. 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
	:c:func:`write()` mode (in streaming mode timestamps
	can be used to throttle the output), saving I/O bandwidth.

	For stateful encoders (see :ref:`encoder`) this represents the
	frame interval that is typically embedded in the encoded video stream
	and it provides a hint to the encoder of the speed at which raw
	frames are queued up to the encoder.

	Applications store here the desired frame period, drivers return
	the actual frame period.

	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 :c: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.

Capability와 High Quality mode

208-263
Streaming Parameters Capabilities
상수의미
`V4L2_CAP_TIMEPERFRAME``0x1000``timeperframe` 설정으로 frame period 변경 가능

frame period 변경 지원을 표시합니다.

`V4L2_MODE_HIGHQUALITY` (`0x0001`)은 still imaging용 고품질 모드입니다. 하드웨어가 낼 수 있는 최상의 화질을 목표로 하며 구현 방식은 하드웨어와 드라이버에 따라 다릅니다. 일반 motion video capture와 별개의 모드입니다.

High Quality mode 특성
항목가능한 동작
해상도motion capture보다 높은 해상도를 capture할 수 있음
pixel formatmotion capture보다 적은 형식만 지원할 수 있음. 예: true color만 지원
다중 frame 결합여러 field 또는 frame을 산술 결합해 color edge artifact와 noise 감소
slice capturescanner처럼 slice 단위로 capture해 더 큰 영상 처리
속도영상 하나의 capture가 motion capture보다 크게 느릴 수 있음
움직임움직이는 물체에 과도한 motion blur가 생길 수 있음
I/Ocapture가 `read()` 호출을 통해서만 동작할 수 있음

화질을 높이는 대신 형식·속도·움직임과 I/O 방식에 제약이 생길 수 있습니다.


.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.5cm}|

.. _parm-caps:

.. flat-table:: Streaming Parameters Capabilities
    :header-rows:  0
    :stub-columns: 0
    :widths:       3 1 4

    * - ``V4L2_CAP_TIMEPERFRAME``
      - 0x1000
      - The frame period can be modified by setting the ``timeperframe``
	field.


.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.5cm}|

.. _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 :c:func:`read()` call.

반환값

264-269

성공하면 0을 반환합니다. 오류가 발생하면 -1을 반환하고 `errno`를 적절히 설정하며, 이 문서는 전용 오류를 별도로 열거하지 않고 Generic Error Codes 장을 따릅니다.

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.