← Documents Documentation/userspace-api/media/v4l/vidioc-subdev-enum-frame-size.rst GitHub 원문 ↗

Linux 6.18.37 · 사용자 공간 API

VIDIOC_SUBDEV_ENUM_FRAME_SIZE ioctl

서브디바이스 pad와 media-bus 형식별 프레임 크기 열거, 범위 해석 및 정확한 크기 검증 절차를 설명합니다.

Source pathDocumentation/userspace-api/media/v4l/vidioc-subdev-enum-frame-size.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

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

1. 요약·해설

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

요약·해설

vidioc-subdev-enum-frame-size.rst:1-131

최소·최대 범위는 모든 중간 크기의 지원을 보증하지 않으므로 열거로 후보를 좁힌 뒤 S_FMT로 정확한 크기를 시험해야 합니다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 .. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
2 .. c:namespace:: V4L
3
4 .. _VIDIOC_SUBDEV_ENUM_FRAME_SIZE:
5
6 ***********************************
7 ioctl VIDIOC_SUBDEV_ENUM_FRAME_SIZE
8 ***********************************
9
10 Name
11 ====
12
13 VIDIOC_SUBDEV_ENUM_FRAME_SIZE - Enumerate media bus frame sizes
14
15 Synopsis
16 ========
17
18 .. c:macro:: VIDIOC_SUBDEV_ENUM_FRAME_SIZE
19
20 ``int ioctl(int fd, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, struct v4l2_subdev_frame_size_enum * argp)``
21
22 Arguments
23 =========
24
25 ``fd``
26 File descriptor returned by :c:func:`open()`.
27
28 ``argp``
29 Pointer to struct :c:type:`v4l2_subdev_frame_size_enum`.
30
31 Description
32 ===========
33
34 This ioctl allows applications to access the enumeration of frame sizes
35 supported by a sub-device on the specified pad
36 for the specified media bus format.
37 Supported formats can be retrieved with the
38 :ref:`VIDIOC_SUBDEV_ENUM_MBUS_CODE`
39 ioctl.
40
41 The enumerations are defined by the driver, and indexed using the ``index`` field
42 of the struct :c:type:`v4l2_subdev_frame_size_enum`.
43 Each pair of ``pad`` and ``code`` correspond to a separate enumeration.
44 Each enumeration starts with the ``index`` of 0, and
45 the lowest invalid index marks the end of the enumeration.
46
47 Therefore, to enumerate frame sizes allowed on the specified pad
48 and using the specified mbus format, initialize the
49 ``pad``, ``which``, and ``code`` fields to desired values,
50 and set ``index`` to 0.
51 Then call the :ref:`VIDIOC_SUBDEV_ENUM_FRAME_SIZE` ioctl with a pointer to the
52 structure.
53
54 A successful call will return with minimum and maximum frame sizes filled in.
55 Repeat with increasing ``index`` until ``EINVAL`` is received.
56 ``EINVAL`` means that either no more entries are available in the enumeration,
57 or that an input parameter was invalid.
58
59 Sub-devices that only support discrete frame sizes (such as most
60 sensors) will return one or more frame sizes with identical minimum and
61 maximum values.
62
63 Not all possible sizes in given [minimum, maximum] ranges need to be
64 supported. For instance, a scaler that uses a fixed-point scaling ratio
65 might not be able to produce every frame size between the minimum and
66 maximum values. Applications must use the
67 :ref:`VIDIOC_SUBDEV_S_FMT <VIDIOC_SUBDEV_G_FMT>` ioctl to try the
68 sub-device for an exact supported frame size.
69
70 Available frame sizes may depend on the current 'try' formats at other
71 pads of the sub-device, as well as on the current active links and the
72 current values of V4L2 controls. See
73 :ref:`VIDIOC_SUBDEV_G_FMT` for more
74 information about try formats.
75
76 .. c:type:: v4l2_subdev_frame_size_enum
77
78 .. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.5cm}|
79
80 .. flat-table:: struct v4l2_subdev_frame_size_enum
81 :header-rows: 0
82 :stub-columns: 0
83 :widths: 1 1 2
84
85 * - __u32
86 - ``index``
87 - Index of the frame size in the enumeration belonging to the given pad
88 and format. Filled in by the application.
89 * - __u32
90 - ``pad``
91 - Pad number as reported by the media controller API.
92 Filled in by the application.
93 * - __u32
94 - ``code``
95 - The media bus format code, as defined in
96 :ref:`v4l2-mbus-format`. Filled in by the application.
97 * - __u32
98 - ``min_width``
99 - Minimum frame width, in pixels. Filled in by the driver.
100 * - __u32
101 - ``max_width``
102 - Maximum frame width, in pixels. Filled in by the driver.
103 * - __u32
104 - ``min_height``
105 - Minimum frame height, in pixels. Filled in by the driver.
106 * - __u32
107 - ``max_height``
108 - Maximum frame height, in pixels. Filled in by the driver.
109 * - __u32
110 - ``which``
111 - Frame sizes to be enumerated, from enum
112 :ref:`v4l2_subdev_format_whence <v4l2-subdev-format-whence>`.
113 * - __u32
114 - ``stream``
115 - Stream identifier.
116 * - __u32
117 - ``reserved``\ [7]
118 - Reserved for future extensions. Applications and drivers must set
119 the array to zero.
120
121 Return Value
122 ============
123
124 On success 0 is returned, on error -1 and the ``errno`` variable is set
125 appropriately. The generic error codes are described at the
126 :ref:`Generic Error Codes <gen-errors>` chapter.
127
128 EINVAL
129 The struct :c:type:`v4l2_subdev_frame_size_enum` ``pad`` references a
130 non-existing pad, the ``which`` field has an unsupported value, the ``code``
131 is invalid for the given pad, or the ``index`` field is out of bounds.
132

3. 한국어 전문 번역

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

목적, 호출 형식과 인자

1-30

`VIDIOC_SUBDEV_ENUM_FRAME_SIZE`는 지정한 서브디바이스 pad와 media-bus 형식에서 지원하는 프레임 크기 목록을 조회합니다. `argp`는 선택 조건과 결과를 담는 `struct v4l2_subdev_frame_size_enum`을 가리킵니다.

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

.. _VIDIOC_SUBDEV_ENUM_FRAME_SIZE:

***********************************
ioctl VIDIOC_SUBDEV_ENUM_FRAME_SIZE
***********************************

Name
====

VIDIOC_SUBDEV_ENUM_FRAME_SIZE - Enumerate media bus frame sizes

Synopsis
========

.. c:macro:: VIDIOC_SUBDEV_ENUM_FRAME_SIZE

``int ioctl(int fd, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, struct v4l2_subdev_frame_size_enum * argp)``

Arguments
=========

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

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

열거 절차와 범위의 의미

31-74

먼저 `VIDIOC_SUBDEV_ENUM_MBUS_CODE`로 pad가 지원하는 media-bus 형식 코드를 얻습니다. 드라이버는 `pad`와 `code` 조합마다 별도의 크기 열거 목록을 정의합니다.

응용 프로그램은 `pad`, `which`, `code`를 원하는 값으로 설정하고 `index = 0`에서 시작합니다. 호출이 성공하면 드라이버가 최소·최대 너비와 높이를 채우며, 인덱스를 1씩 증가시켜 `EINVAL`이 반환될 때까지 반복합니다.

`EINVAL`은 항목을 모두 열거했다는 뜻일 수도 있고 입력 매개변수가 잘못되었다는 뜻일 수도 있습니다. 첫 호출부터 실패하면 pad, which, code의 유효성을 먼저 확인해야 합니다.

대부분의 센서처럼 이산 크기만 지원하는 장치는 최소값과 최대값이 같은 항목을 하나 이상 반환합니다.

최소값과 최대값이 다르더라도 그 사이의 모든 크기가 지원된다는 뜻은 아닙니다. 고정소수점 배율을 사용하는 스케일러처럼 일부 중간 크기를 만들 수 없는 장치가 있으므로, 정확한 크기는 `VIDIOC_SUBDEV_S_FMT`로 실제 적용을 시도해 확인해야 합니다.

사용 가능한 크기는 다른 pad의 현재 try format, 활성 링크, V4L2 control 값에도 의존할 수 있습니다. 파이프라인 상태가 바뀌면 같은 pad와 code의 열거 결과도 달라질 수 있습니다.

프레임 크기 열거
ENUM_MBUS_CODE로 지원 code 확인pad, which, code 설정 후 index를 0으로 초기화성공 시 최소·최대 너비와 높이 기록index를 증가시켜 반복정확한 중간 크기는 S_FMT로 시험

각 pad와 media-bus code 조합의 크기 항목을 순서대로 조회합니다.

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

This ioctl allows applications to access the enumeration of frame sizes
supported by a sub-device on the specified pad
for the specified media bus format.
Supported formats can be retrieved with the
:ref:`VIDIOC_SUBDEV_ENUM_MBUS_CODE`
ioctl.

The enumerations are defined by the driver, and indexed using the ``index`` field
of the struct :c:type:`v4l2_subdev_frame_size_enum`.
Each pair of ``pad`` and ``code`` correspond to a separate enumeration.
Each enumeration starts with the ``index`` of 0, and
the lowest invalid index marks the end of the enumeration.

Therefore, to enumerate frame sizes allowed on the specified pad
and using the specified mbus format, initialize the
``pad``, ``which``, and ``code`` fields to desired values,
and set ``index`` to 0.
Then call the :ref:`VIDIOC_SUBDEV_ENUM_FRAME_SIZE` ioctl with a pointer to the
structure.

A successful call will return with minimum and maximum frame sizes filled in.
Repeat with increasing ``index`` until ``EINVAL`` is received.
``EINVAL`` means that either no more entries are available in the enumeration,
or that an input parameter was invalid.

Sub-devices that only support discrete frame sizes (such as most
sensors) will return one or more frame sizes with identical minimum and
maximum values.

Not all possible sizes in given [minimum, maximum] ranges need to be
supported. For instance, a scaler that uses a fixed-point scaling ratio
might not be able to produce every frame size between the minimum and
maximum values. Applications must use the
:ref:`VIDIOC_SUBDEV_S_FMT <VIDIOC_SUBDEV_G_FMT>` ioctl to try the
sub-device for an exact supported frame size.

Available frame sizes may depend on the current 'try' formats at other
pads of the sub-device, as well as on the current active links and the
current values of V4L2 controls. See
:ref:`VIDIOC_SUBDEV_G_FMT` for more
information about try formats.

struct v4l2_subdev_frame_size_enum

75-119
프레임 크기 열거 구조체
형식필드설정 주체와 의미
`__u32``index`응용 프로그램: pad와 형식에 속한 크기 항목의 인덱스
`__u32``pad`응용 프로그램: Media Controller API가 보고한 pad 번호
`__u32``code`응용 프로그램: media-bus 형식 코드
`__u32``min_width`드라이버: 픽셀 단위 최소 프레임 너비
`__u32``max_width`드라이버: 픽셀 단위 최대 프레임 너비
`__u32``min_height`드라이버: 픽셀 단위 최소 프레임 높이
`__u32``max_height`드라이버: 픽셀 단위 최대 프레임 높이
`__u32``which`응용 프로그램: `v4l2_subdev_format_whence`에 따른 열거 상태
`__u32``stream`스트림 식별자
`__u32[7]``reserved[7]`향후 확장용이며 응용 프로그램과 드라이버가 모두 0으로 설정

응용 프로그램 입력과 드라이버 출력 필드를 구분합니다.

`min_width == max_width`이고 `min_height == max_height`이면 그 항목은 하나의 이산 프레임 크기를 나타냅니다. 범위 항목은 허용 영역을 나타내지만 내부의 모든 점을 보장하지 않습니다.


.. c:type:: v4l2_subdev_frame_size_enum

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

.. flat-table:: struct v4l2_subdev_frame_size_enum
    :header-rows:  0
    :stub-columns: 0
    :widths:       1 1 2

    * - __u32
      - ``index``
      - Index of the frame size in the enumeration belonging to the given pad
	and format. Filled in by the application.
    * - __u32
      - ``pad``
      - Pad number as reported by the media controller API.
	Filled in by the application.
    * - __u32
      - ``code``
      - The media bus format code, as defined in
	:ref:`v4l2-mbus-format`. Filled in by the application.
    * - __u32
      - ``min_width``
      - Minimum frame width, in pixels. Filled in by the driver.
    * - __u32
      - ``max_width``
      - Maximum frame width, in pixels. Filled in by the driver.
    * - __u32
      - ``min_height``
      - Minimum frame height, in pixels. Filled in by the driver.
    * - __u32
      - ``max_height``
      - Maximum frame height, in pixels. Filled in by the driver.
    * - __u32
      - ``which``
      - Frame sizes to be enumerated, from enum
	:ref:`v4l2_subdev_format_whence <v4l2-subdev-format-whence>`.
    * - __u32
      - ``stream``
      - Stream identifier.
    * - __u32
      - ``reserved``\ [7]
      - Reserved for future extensions. Applications and drivers must set
	the array to zero.

반환값과 EINVAL

120-131

성공하면 0, 오류이면 -1을 반환하고 `errno`를 설정합니다.

프레임 크기 열거의 EINVAL
검사 대상오류 조건
`pad`존재하지 않는 pad를 참조함
`which`지원되지 않는 값을 지정함
`code`해당 pad에서 유효하지 않은 media-bus 형식임
`index`열거 범위를 벗어남

입력 조건과 열거 경계를 함께 나타내는 오류입니다.


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.

EINVAL
    The struct :c:type:`v4l2_subdev_frame_size_enum` ``pad`` references a
    non-existing pad, the ``which`` field has an unsupported value, the ``code``
    is invalid for the given pad, or the ``index`` field is out of bounds.