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

Linux 6.18.37 · 사용자 공간 API

VIDIOC_G_JPEGCOMP·VIDIOC_S_JPEGCOMP ioctl

폐기 예정 JPEG 압축 ioctl의 legacy 품질·APP·COM 데이터와 DHT·DQT·DRI marker를 설명하고 현행 JPEG class control로의 전환을 안내합니다.

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

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

1. 요약·해설

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

요약·해설

vidioc-g-jpegcomp.rst:1-124

legacy JPEG 압축 설정과 marker flag를 다루며 새 코드는 JPEG class control을 사용해야 합니다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 .. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
2 .. c:namespace:: V4L
3
4 .. _VIDIOC_G_JPEGCOMP:
5
6 ******************************************
7 ioctl VIDIOC_G_JPEGCOMP, VIDIOC_S_JPEGCOMP
8 ******************************************
9
10 Name
11 ====
12
13 VIDIOC_G_JPEGCOMP - VIDIOC_S_JPEGCOMP
14
15 Synopsis
16 ========
17
18 .. c:macro:: VIDIOC_G_JPEGCOMP
19
20 ``int ioctl(int fd, VIDIOC_G_JPEGCOMP, v4l2_jpegcompression *argp)``
21
22 .. c:macro:: VIDIOC_S_JPEGCOMP
23
24 ``int ioctl(int fd, VIDIOC_S_JPEGCOMP, const v4l2_jpegcompression *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_jpegcompression`.
34
35 Description
36 ===========
37
38 These ioctls are **deprecated**. New drivers and applications should use
39 :ref:`JPEG class controls <jpeg-controls>` for image quality and JPEG
40 markers control.
41
42 [to do]
43
44 Ronald Bultje elaborates:
45
46 APP is some application-specific information. The application can set it
47 itself, and it'll be stored in the JPEG-encoded fields (eg; interlacing
48 information for in an AVI or so). COM is the same, but it's comments,
49 like 'encoded by me' or so.
50
51 jpeg_markers describes whether the huffman tables, quantization tables
52 and the restart interval information (all JPEG-specific stuff) should be
53 stored in the JPEG-encoded fields. These define how the JPEG field is
54 encoded. If you omit them, applications assume you've used standard
55 encoding. You usually do want to add them.
56
57 .. tabularcolumns:: |p{1.2cm}|p{3.0cm}|p{13.1cm}|
58
59 .. c:type:: v4l2_jpegcompression
60
61 .. flat-table:: struct v4l2_jpegcompression
62 :header-rows: 0
63 :stub-columns: 0
64 :widths: 1 1 2
65
66 * - int
67 - ``quality``
68 - Deprecated. If
69 :ref:`V4L2_CID_JPEG_COMPRESSION_QUALITY <jpeg-quality-control>`
70 control is exposed by a driver applications should use it instead
71 and ignore this field.
72 * - int
73 - ``APPn``
74 -
75 * - int
76 - ``APP_len``
77 -
78 * - char
79 - ``APP_data``\ [60]
80 -
81 * - int
82 - ``COM_len``
83 -
84 * - char
85 - ``COM_data``\ [60]
86 -
87 * - __u32
88 - ``jpeg_markers``
89 - See :ref:`jpeg-markers`. Deprecated. If
90 :ref:`V4L2_CID_JPEG_ACTIVE_MARKER <jpeg-active-marker-control>`
91 control is exposed by a driver applications should use it instead
92 and ignore this field.
93
94 .. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.5cm}|
95
96 .. _jpeg-markers:
97
98 .. flat-table:: JPEG Markers Flags
99 :header-rows: 0
100 :stub-columns: 0
101 :widths: 3 1 4
102
103 * - ``V4L2_JPEG_MARKER_DHT``
104 - (1<<3)
105 - Define Huffman Tables
106 * - ``V4L2_JPEG_MARKER_DQT``
107 - (1<<4)
108 - Define Quantization Tables
109 * - ``V4L2_JPEG_MARKER_DRI``
110 - (1<<5)
111 - Define Restart Interval
112 * - ``V4L2_JPEG_MARKER_COM``
113 - (1<<6)
114 - Comment segment
115 * - ``V4L2_JPEG_MARKER_APP``
116 - (1<<7)
117 - App segment, driver will always use APP0
118
119 Return Value
120 ============
121
122 On success 0 is returned, on error -1 and the ``errno`` variable is set
123 appropriately. The generic error codes are described at the
124 :ref:`Generic Error Codes <gen-errors>` chapter.
125

3. 한국어 전문 번역

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

호출 형식과 폐기 상태

1-34

`VIDIOC_G_JPEGCOMP`와 `VIDIOC_S_JPEGCOMP`는 `v4l2_jpegcompression` 구조체로 JPEG 압축 설정을 조회·설정하는 옛 ioctl입니다. 두 명령은 폐기 예정입니다.

새 드라이버와 애플리케이션은 영상 품질과 JPEG marker를 제어할 때 JPEG class controls를 사용해야 합니다. 조회는 수정 가능한 포인터, 설정은 `const v4l2_jpegcompression *argp`를 받습니다.

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

.. _VIDIOC_G_JPEGCOMP:

******************************************
ioctl VIDIOC_G_JPEGCOMP, VIDIOC_S_JPEGCOMP
******************************************

Name
====

VIDIOC_G_JPEGCOMP - VIDIOC_S_JPEGCOMP

Synopsis
========

.. c:macro:: VIDIOC_G_JPEGCOMP

``int ioctl(int fd, VIDIOC_G_JPEGCOMP, v4l2_jpegcompression *argp)``

.. c:macro:: VIDIOC_S_JPEGCOMP

``int ioctl(int fd, VIDIOC_S_JPEGCOMP, const v4l2_jpegcompression *argp)``

Arguments
=========

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

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

APP·COM과 인코딩 marker

35-56

원문에는 미완성 표식 `[to do]`가 남아 있으며 이어지는 설명은 Ronald Bultje의 해설입니다. APP segment는 AVI의 interlacing 정보 같은 애플리케이션 전용 정보를 담고, 애플리케이션이 직접 설정해 JPEG 인코딩 필드에 저장할 수 있습니다.

COM segment는 `encoded by me`와 같은 주석을 저장합니다. `jpeg_markers`는 Huffman table, quantization table, restart interval 정보를 JPEG 데이터 안에 포함할지 결정합니다.

이 marker들은 JPEG가 어떻게 인코딩됐는지 정의합니다. 생략하면 애플리케이션은 표준 인코딩을 사용했다고 가정하며, 일반적으로는 marker를 포함하는 편이 좋습니다.

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

These ioctls are **deprecated**. New drivers and applications should use
:ref:`JPEG class controls <jpeg-controls>` for image quality and JPEG
markers control.

[to do]

Ronald Bultje elaborates:

APP is some application-specific information. The application can set it
itself, and it'll be stored in the JPEG-encoded fields (eg; interlacing
information for in an AVI or so). COM is the same, but it's comments,
like 'encoded by me' or so.

jpeg_markers describes whether the huffman tables, quantization tables
and the restart interval information (all JPEG-specific stuff) should be
stored in the JPEG-encoded fields. These define how the JPEG field is
encoded. If you omit them, applications assume you've used standard
encoding. You usually do want to add them.

v4l2_jpegcompression과 marker flag

57-118
v4l2_jpegcompression 필드
형식필드의미
`int``quality`폐기 예정. 드라이버가 `V4L2_CID_JPEG_COMPRESSION_QUALITY`를 제공하면 그 control을 사용하고 이 필드는 무시
`int``APPn`APP marker 번호
`int``APP_len`APP payload 길이
`char[60]``APP_data[60]`APP 애플리케이션 전용 데이터
`int``COM_len`COM 주석 길이
`char[60]``COM_data[60]`COM 주석 데이터
`__u32``jpeg_markers`폐기 예정 marker bit. `V4L2_CID_JPEG_ACTIVE_MARKER`가 있으면 그 control을 사용하고 이 필드는 무시

legacy 품질, APP·COM 데이터와 marker 선택을 담습니다.

JPEG Markers Flags
상수의미
`V4L2_JPEG_MARKER_DHT``1 << 3`Define Huffman Tables
`V4L2_JPEG_MARKER_DQT``1 << 4`Define Quantization Tables
`V4L2_JPEG_MARKER_DRI``1 << 5`Define Restart Interval
`V4L2_JPEG_MARKER_COM``1 << 6`Comment segment
`V4L2_JPEG_MARKER_APP``1 << 7`APP segment. 드라이버는 항상 APP0 사용

JPEG bitstream에 포함할 marker segment를 선택합니다.

현행 JPEG 제어 선택
JPEG class control 지원 여부 조회품질 control이 있으면 V4L2_CID_JPEG_COMPRESSION_QUALITY 사용active marker control이 있으면 V4L2_CID_JPEG_ACTIVE_MARKER 사용새 control이 없는 legacy 장치에서만 v4l2_jpegcompression 사용

드라이버가 새 control을 노출하면 legacy 필드를 사용하지 않습니다.

.. tabularcolumns:: |p{1.2cm}|p{3.0cm}|p{13.1cm}|

.. c:type:: v4l2_jpegcompression

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

    * - int
      - ``quality``
      - Deprecated. If
	:ref:`V4L2_CID_JPEG_COMPRESSION_QUALITY <jpeg-quality-control>`
	control is exposed by a driver applications should use it instead
	and ignore this field.
    * - int
      - ``APPn``
      -
    * - int
      - ``APP_len``
      -
    * - char
      - ``APP_data``\ [60]
      -
    * - int
      - ``COM_len``
      -
    * - char
      - ``COM_data``\ [60]
      -
    * - __u32
      - ``jpeg_markers``
      - See :ref:`jpeg-markers`. Deprecated. If
	:ref:`V4L2_CID_JPEG_ACTIVE_MARKER <jpeg-active-marker-control>`
	control is exposed by a driver applications should use it instead
	and ignore this field.

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

.. _jpeg-markers:

.. flat-table:: JPEG Markers Flags
    :header-rows:  0
    :stub-columns: 0
    :widths:       3 1 4

    * - ``V4L2_JPEG_MARKER_DHT``
      - (1<<3)
      - Define Huffman Tables
    * - ``V4L2_JPEG_MARKER_DQT``
      - (1<<4)
      - Define Quantization Tables
    * - ``V4L2_JPEG_MARKER_DRI``
      - (1<<5)
      - Define Restart Interval
    * - ``V4L2_JPEG_MARKER_COM``
      - (1<<6)
      - Comment segment
    * - ``V4L2_JPEG_MARKER_APP``
      - (1<<7)
      - App segment, driver will always use APP0

반환값

119-124

성공하면 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.