← Documents Documentation/admin-guide/media/vimc.dot GitHub 원문 ↗

Linux 6.18.37 · Admin guide

VIMC 가상 미디어 컨트롤러 그래프

VIMC의 두 가상 센서가 RAW 직접 캡처와 Debayer 경로를 제공하고, Debayer 또는 RGB/YUV 입력이 Scaler를 거쳐 최종 캡처로 이어지는 미디어 토폴로지를 해설합니다.

Source pathDocumentation/admin-guide/media/vimc.dot
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

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

1. 요약·해설

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

요약·해설

vimc.dot:1-26

VIMC의 두 가상 센서가 RAW 직접 캡처와 Debayer 경로를 제공하고, Debayer 또는 RGB/YUV 입력이 Scaler를 거쳐 최종 캡처로 이어지는 미디어 토폴로지를 해설합니다.

VIMC 경로 요약
Sensor A/BRaw Capture 0/1 또는 Debayer A/BScalerRGB/YUV Capture

센서별 RAW 경로와 공통 RGB/YUV 스케일링 경로를 구분합니다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 # SPDX-License-Identifier: GPL-2.0
2
3 digraph board {
4 rankdir=TB
5 n00000001 [label="{{} | Sensor A\n/dev/v4l-subdev0 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
6 n00000001:port0 -> n00000005:port0 [style=bold]
7 n00000001:port0 -> n0000000b [style=bold]
8 n00000001 -> n00000002
9 n00000002 [label="{{} | Lens A\n/dev/v4l-subdev5 | {<port0>}}", shape=Mrecord, style=filled, fillcolor=green]
10 n00000003 [label="{{} | Sensor B\n/dev/v4l-subdev1 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
11 n00000003:port0 -> n00000008:port0 [style=bold]
12 n00000003:port0 -> n0000000f [style=bold]
13 n00000003 -> n00000004
14 n00000004 [label="{{} | Lens B\n/dev/v4l-subdev6 | {<port0>}}", shape=Mrecord, style=filled, fillcolor=green]
15 n00000005 [label="{{<port0> 0} | Debayer A\n/dev/v4l-subdev2 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
16 n00000005:port1 -> n00000015:port0
17 n00000008 [label="{{<port0> 0} | Debayer B\n/dev/v4l-subdev3 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
18 n00000008:port1 -> n00000015:port0 [style=dashed]
19 n0000000b [label="Raw Capture 0\n/dev/video0", shape=box, style=filled, fillcolor=yellow]
20 n0000000f [label="Raw Capture 1\n/dev/video1", shape=box, style=filled, fillcolor=yellow]
21 n00000013 [label="{{} | RGB/YUV Input\n/dev/v4l-subdev4 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
22 n00000013:port0 -> n00000015:port0 [style=dashed]
23 n00000015 [label="{{<port0> 0} | Scaler\n/dev/v4l-subdev5 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
24 n00000015:port1 -> n00000018 [style=bold]
25 n00000018 [label="RGB/YUV Capture\n/dev/video2", shape=box, style=filled, fillcolor=yellow]
26 }
27

3. 한국어 전문 번역

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

두 센서의 RAW·Debayer 경로와 RGB/YUV 스케일링

1-26

이 Graphviz DOT 원문은 VIMC(Virtual Media Controller)의 V4L2 미디어 토폴로지를 나타냅니다. 가상 Sensor A와 Sensor B는 각각 Lens A와 Lens B에 연관되고, 센서 출력은 RAW 캡처 노드로 직접 전달되거나 Debayer A/B를 거쳐 RGB/YUV 처리 경로로 들어갑니다.

Sensor A는 `Raw Capture 0` `/dev/video0`과 `Debayer A` `/dev/v4l-subdev2`로, Sensor B는 `Raw Capture 1` `/dev/video1`과 `Debayer B` `/dev/v4l-subdev3`으로 연결됩니다. Debayer 출력 또는 `RGB/YUV Input` `/dev/v4l-subdev4`는 `Scaler` 입력 port0에 도달하고, Scaler 출력 port1은 `RGB/YUV Capture` `/dev/video2`로 이어집니다.

원문은 굵은 선 5개, 점선 2개, 스타일 속성이 없는 일반 실선 3개를 사용합니다. 센서에서 렌즈로 향하는 두 일반 실선은 패드 데이터 링크가 아닌 엔티티 연관 관계로 그려져 있습니다. 또한 원문은 Lens A와 Scaler의 장치 경로를 모두 `/dev/v4l-subdev5`로 표기하므로, 이 페이지는 값을 임의 수정하지 않고 그대로 보존합니다.

VIMC의 RAW 직접 캡처와 RGB/YUV 처리 경로
Sensor A /dev/v4l-subdev0Raw Capture 0 /dev/video0
Sensor A /dev/v4l-subdev0Debayer A /dev/v4l-subdev2Scaler /dev/v4l-subdev5RGB/YUV Capture /dev/video2
Sensor B /dev/v4l-subdev1Raw Capture 1 /dev/video1
Sensor B /dev/v4l-subdev1Debayer B /dev/v4l-subdev3Scaler /dev/v4l-subdev5RGB/YUV Capture /dev/video2
RGB/YUV Input /dev/v4l-subdev4Scaler /dev/v4l-subdev5RGB/YUV Capture /dev/video2

각 센서는 RAW 캡처와 Debayer 경로를 제공하고, 세 RGB/YUV 후보 입력 중 하나가 Scaler를 거쳐 최종 캡처로 이어집니다.

센서·렌즈·RAW 캡처 경로
센서렌즈 연관DebayerRAW 캡처
Sensor A `/dev/v4l-subdev0`Lens A `/dev/v4l-subdev5` 일반 실선Debayer A `/dev/v4l-subdev2` 굵은 선Raw Capture 0 `/dev/video0` 굵은 선
Sensor B `/dev/v4l-subdev1`Lens B `/dev/v4l-subdev6` 일반 실선Debayer B `/dev/v4l-subdev3` 굵은 선Raw Capture 1 `/dev/video1` 굵은 선

두 가상 센서의 렌즈 연관, Debayer 입력과 RAW 직접 캡처를 함께 정리합니다.

Scaler 입력 후보와 최종 출력
출발목적지스타일역할
Debayer A port1Scaler port0일반 실선Sensor A의 Debayer 결과
Debayer B port1Scaler port0`style=dashed`Sensor B의 Debayer 결과 후보
RGB/YUV Input port0Scaler port0`style=dashed`외부 RGB/YUV 입력 후보
Scaler port1RGB/YUV Capture `/dev/video2``style=bold`스케일링된 최종 캡처

Scaler port0으로 들어오는 세 경로와 port1의 고정 출력입니다.

미디어 엔티티와 장치 경로
종류엔티티장치 경로패드
센서Sensor A / Sensor B/dev/v4l-subdev0 / 1출력 port0
렌즈Lens A / Lens B/dev/v4l-subdev5 / 6이름 없는 port0
DebayerDebayer A / Debayer B/dev/v4l-subdev2 / 3입력 port0, 출력 port1
입력RGB/YUV Input/dev/v4l-subdev4출력 port0
처리Scaler/dev/v4l-subdev5입력 port0, 출력 port1
캡처Raw Capture 0 / 1/dev/video0 / 1비디오 노드
캡처RGB/YUV Capture/dev/video2비디오 노드

원문의 여덟 초록색 서브디바이스와 세 노란색 비디오 노드입니다.

노드와 링크 구조 수량
구성수량세부
전체 노드11초록색 Mrecord 8 + 노란색 box 3
전체 링크10굵은 선 5 + 점선 2 + 일반 실선 3
센서 관련 링크6센서별 Debayer·RAW·렌즈 링크 각 3개
Scaler 입력3Debayer A, Debayer B, RGB/YUV Input
Scaler 출력1RGB/YUV Capture `/dev/video2`

26줄 DOT 원문에서 전용 감사가 검증하는 구조입니다.

원문 줄 좌표
원문 줄구성해설
1-4SPDX와 그래프 선언GPL-2.0 식별자와 하향식 배치를 선언합니다.
5-9Sensor A, Lens A와 두 데이터 링크Debayer A·Raw Capture 0 및 렌즈 연관을 정의합니다.
10-14Sensor B, Lens B와 두 데이터 링크Debayer B·Raw Capture 1 및 렌즈 연관을 정의합니다.
15-18Debayer A/B두 Debayer 출력이 Scaler port0으로 향합니다.
19-20RAW 캡처 노드`/dev/video0`과 `/dev/video1`을 선언합니다.
21-24RGB/YUV Input과 Scaler외부 입력 후보와 Scaler의 최종 출력 링크입니다.
25-26RGB/YUV Capture와 닫기`/dev/video2`를 선언하고 그래프를 끝냅니다.

각 엔티티와 링크가 나타나는 범위를 원문 순서대로 정리합니다.

아래 코드는 Linux v6.18.37 원문 1-26줄 전체입니다. 표시 안정성을 위해 탭만 여덟 칸으로 정규화했으며 중복 장치 경로를 포함한 노드 ID, 엔티티명, 패드 번호, 링크 방향과 스타일은 그대로 보존했습니다.

# SPDX-License-Identifier: GPL-2.0

digraph board {
        rankdir=TB
        n00000001 [label="{{} | Sensor A\n/dev/v4l-subdev0 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000001:port0 -> n00000005:port0 [style=bold]
        n00000001:port0 -> n0000000b [style=bold]
        n00000001 -> n00000002
        n00000002 [label="{{} | Lens A\n/dev/v4l-subdev5 | {<port0>}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000003 [label="{{} | Sensor B\n/dev/v4l-subdev1 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000003:port0 -> n00000008:port0 [style=bold]
        n00000003:port0 -> n0000000f [style=bold]
        n00000003 -> n00000004
        n00000004 [label="{{} | Lens B\n/dev/v4l-subdev6 | {<port0>}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000005 [label="{{<port0> 0} | Debayer A\n/dev/v4l-subdev2 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000005:port1 -> n00000015:port0
        n00000008 [label="{{<port0> 0} | Debayer B\n/dev/v4l-subdev3 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000008:port1 -> n00000015:port0 [style=dashed]
        n0000000b [label="Raw Capture 0\n/dev/video0", shape=box, style=filled, fillcolor=yellow]
        n0000000f [label="Raw Capture 1\n/dev/video1", shape=box, style=filled, fillcolor=yellow]
        n00000013 [label="{{} | RGB/YUV Input\n/dev/v4l-subdev4 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000013:port0 -> n00000015:port0 [style=dashed]
        n00000015 [label="{{<port0> 0} | Scaler\n/dev/v4l-subdev5 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000015:port1 -> n00000018 [style=bold]
        n00000018 [label="RGB/YUV Capture\n/dev/video2", shape=box, style=filled, fillcolor=yellow]
}