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

Linux 6.18.37 · Admin guide

i.MX6Q SabreAuto 미디어 그래프

i.MX6Q SabreAuto의 ADV7180 입력과 두 IPU의 CSI·VDIC·PRP·인코딩·뷰파인더·직접 캡처 노드 사이 선택 가능한 미디어 링크를 설명합니다.

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

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

1. 요약·해설

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

요약·해설

imx6q-sabreauto.dot:1-51

i.MX6Q SabreAuto의 ADV7180 입력과 두 IPU의 CSI·VDIC·PRP·인코딩·뷰파인더·직접 캡처 노드 사이 선택 가능한 미디어 링크를 설명합니다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 digraph board {
2 rankdir=TB
3 n00000001 [label="{{<port0> 0} | ipu1_csi0\n/dev/v4l-subdev0 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
4 n00000001:port2 -> n00000005 [style=dashed]
5 n00000001:port1 -> n0000000f:port0 [style=dashed]
6 n00000001:port1 -> n0000000b:port0 [style=dashed]
7 n00000005 [label="ipu1_csi0 capture\n/dev/video0", shape=box, style=filled, fillcolor=yellow]
8 n0000000b [label="{{<port0> 0 | <port1> 1} | ipu1_vdic\n/dev/v4l-subdev1 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
9 n0000000b:port2 -> n0000000f:port0 [style=dashed]
10 n0000000f [label="{{<port0> 0} | ipu1_ic_prp\n/dev/v4l-subdev2 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
11 n0000000f:port1 -> n00000013:port0 [style=dashed]
12 n0000000f:port2 -> n0000001c:port0 [style=dashed]
13 n00000013 [label="{{<port0> 0} | ipu1_ic_prpenc\n/dev/v4l-subdev3 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
14 n00000013:port1 -> n00000016 [style=dashed]
15 n00000016 [label="ipu1_ic_prpenc capture\n/dev/video1", shape=box, style=filled, fillcolor=yellow]
16 n0000001c [label="{{<port0> 0} | ipu1_ic_prpvf\n/dev/v4l-subdev4 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
17 n0000001c:port1 -> n0000001f [style=dashed]
18 n0000001f [label="ipu1_ic_prpvf capture\n/dev/video2", shape=box, style=filled, fillcolor=yellow]
19 n0000002f [label="{{<port0> 0} | ipu1_csi1\n/dev/v4l-subdev5 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
20 n0000002f:port2 -> n00000033 [style=dashed]
21 n0000002f:port1 -> n0000000f:port0 [style=dashed]
22 n0000002f:port1 -> n0000000b:port0 [style=dashed]
23 n00000033 [label="ipu1_csi1 capture\n/dev/video3", shape=box, style=filled, fillcolor=yellow]
24 n0000003d [label="{{<port0> 0} | ipu2_csi0\n/dev/v4l-subdev6 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
25 n0000003d:port2 -> n00000041 [style=dashed]
26 n0000003d:port1 -> n0000004b:port0 [style=dashed]
27 n0000003d:port1 -> n00000047:port0 [style=dashed]
28 n00000041 [label="ipu2_csi0 capture\n/dev/video4", shape=box, style=filled, fillcolor=yellow]
29 n00000047 [label="{{<port0> 0 | <port1> 1} | ipu2_vdic\n/dev/v4l-subdev7 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
30 n00000047:port2 -> n0000004b:port0 [style=dashed]
31 n0000004b [label="{{<port0> 0} | ipu2_ic_prp\n/dev/v4l-subdev8 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
32 n0000004b:port1 -> n0000004f:port0 [style=dashed]
33 n0000004b:port2 -> n00000058:port0 [style=dashed]
34 n0000004f [label="{{<port0> 0} | ipu2_ic_prpenc\n/dev/v4l-subdev9 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
35 n0000004f:port1 -> n00000052 [style=dashed]
36 n00000052 [label="ipu2_ic_prpenc capture\n/dev/video5", shape=box, style=filled, fillcolor=yellow]
37 n00000058 [label="{{<port0> 0} | ipu2_ic_prpvf\n/dev/v4l-subdev10 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
38 n00000058:port1 -> n0000005b [style=dashed]
39 n0000005b [label="ipu2_ic_prpvf capture\n/dev/video6", shape=box, style=filled, fillcolor=yellow]
40 n0000006b [label="{{<port0> 0} | ipu2_csi1\n/dev/v4l-subdev11 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
41 n0000006b:port2 -> n0000006f [style=dashed]
42 n0000006b:port1 -> n0000004b:port0 [style=dashed]
43 n0000006b:port1 -> n00000047:port0 [style=dashed]
44 n0000006f [label="ipu2_csi1 capture\n/dev/video7", shape=box, style=filled, fillcolor=yellow]
45 n00000079 [label="{{<port0> 0 | <port1> 1} | ipu1_csi0_mux\n/dev/v4l-subdev12 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
46 n00000079:port2 -> n00000001:port0 [style=dashed]
47 n0000007d [label="{{<port0> 0 | <port1> 1} | ipu2_csi1_mux\n/dev/v4l-subdev13 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
48 n0000007d:port2 -> n0000006b:port0 [style=dashed]
49 n00000081 [label="{{} | adv7180 3-0021\n/dev/v4l-subdev14 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
50 n00000081:port0 -> n00000079:port1 [style=dashed]
51 }
52

3. 한국어 전문 번역

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

ADV7180 입력과 IPU 캡처 경로

1-51

이 DOT 그래프는 SabreAuto 보드의 i.MX6Q V4L2 미디어 토폴로지를 위에서 아래로 배치합니다. 녹색 Mrecord는 포트가 있는 서브디바이스이고 노란 상자는 /dev/video 캡처 노드입니다. 모든 간선은 style=dashed이므로 그래프를 추출한 시점에 비활성화된 선택 가능 링크를 나타냅니다.

두 IPU는 같은 내부 구조를 가집니다. 각 IPU의 CSI0·CSI1은 포트 2에서 직접 캡처 장치로 나가고, 포트 1에서 전처리기 `ic_prp` 또는 디인터레이서 `vdic`로 갈 수 있습니다. `vdic` 출력도 `ic_prp`로 합류하므로 순차 주사 영상은 직접, 인터레이스 영상은 디인터레이스 뒤 같은 전처리 경로를 사용할 수 있습니다.

각 `ic_prp`는 포트 1의 `ic_prpenc` 인코딩 경로와 포트 2의 `ic_prpvf` 뷰파인더 경로로 분기합니다. 두 분기는 각각 별도 `/dev/video` 캡처 노드에 도달합니다. IPU1은 `/dev/video0`부터 `/dev/video3`, IPU2는 `/dev/video4`부터 `/dev/video7`을 제공합니다.

공통 미디어 엔터티 20개
엔터티장치 경로역할
ipu1_csi0/dev/v4l-subdev0IPU1 CSI0, 입력 0·처리 출력 1·직접 캡처 출력 2
ipu1_csi0 capture/dev/video0IPU1 CSI0 직접 캡처
ipu1_vdic/dev/v4l-subdev1IPU1 비디오 디인터레이서, 입력 0·1과 출력 2
ipu1_ic_prp/dev/v4l-subdev2IPU1 전처리기, 인코딩 출력 1과 뷰파인더 출력 2
ipu1_ic_prpenc/dev/v4l-subdev3IPU1 인코딩 전처리 분기
ipu1_ic_prpenc capture/dev/video1IPU1 인코딩 경로 캡처
ipu1_ic_prpvf/dev/v4l-subdev4IPU1 뷰파인더 전처리 분기
ipu1_ic_prpvf capture/dev/video2IPU1 뷰파인더 경로 캡처
ipu1_csi1/dev/v4l-subdev5IPU1 CSI1, 직접 캡처와 공통 처리 경로 제공
ipu1_csi1 capture/dev/video3IPU1 CSI1 직접 캡처
ipu2_csi0/dev/v4l-subdev6IPU2 CSI0, 직접 캡처와 공통 처리 경로 제공
ipu2_csi0 capture/dev/video4IPU2 CSI0 직접 캡처
ipu2_vdic/dev/v4l-subdev7IPU2 비디오 디인터레이서, 입력 0·1과 출력 2
ipu2_ic_prp/dev/v4l-subdev8IPU2 전처리기, 인코딩 출력 1과 뷰파인더 출력 2
ipu2_ic_prpenc/dev/v4l-subdev9IPU2 인코딩 전처리 분기
ipu2_ic_prpenc capture/dev/video5IPU2 인코딩 경로 캡처
ipu2_ic_prpvf/dev/v4l-subdev10IPU2 뷰파인더 전처리 분기
ipu2_ic_prpvf capture/dev/video6IPU2 뷰파인더 경로 캡처
ipu2_csi1/dev/v4l-subdev11IPU2 CSI1, 직접 캡처와 공통 처리 경로 제공
ipu2_csi1 capture/dev/video7IPU2 CSI1 직접 캡처

두 보드 그래프가 공유하는 IPU1·IPU2 서브디바이스와 캡처 노드입니다.

공통 IPU 내부 링크 22개
출발도착경로 의미
ipu1_csi0:port2ipu1_csi0 capture직접 캡처
ipu1_csi0:port1ipu1_ic_prp:port0전처리기로 직접 입력
ipu1_csi0:port1ipu1_vdic:port0디인터레이서 입력
ipu1_csi1:port2ipu1_csi1 capture직접 캡처
ipu1_csi1:port1ipu1_ic_prp:port0전처리기로 직접 입력
ipu1_csi1:port1ipu1_vdic:port0디인터레이서 입력
ipu1_vdic:port2ipu1_ic_prp:port0디인터레이스 뒤 전처리
ipu1_ic_prp:port1ipu1_ic_prpenc:port0인코딩 분기
ipu1_ic_prp:port2ipu1_ic_prpvf:port0뷰파인더 분기
ipu1_ic_prpenc:port1ipu1_ic_prpenc capture인코딩 캡처
ipu1_ic_prpvf:port1ipu1_ic_prpvf capture뷰파인더 캡처
ipu2_csi0:port2ipu2_csi0 capture직접 캡처
ipu2_csi0:port1ipu2_ic_prp:port0전처리기로 직접 입력
ipu2_csi0:port1ipu2_vdic:port0디인터레이서 입력
ipu2_csi1:port2ipu2_csi1 capture직접 캡처
ipu2_csi1:port1ipu2_ic_prp:port0전처리기로 직접 입력
ipu2_csi1:port1ipu2_vdic:port0디인터레이서 입력
ipu2_vdic:port2ipu2_ic_prp:port0디인터레이스 뒤 전처리
ipu2_ic_prp:port1ipu2_ic_prpenc:port0인코딩 분기
ipu2_ic_prp:port2ipu2_ic_prpvf:port0뷰파인더 분기
ipu2_ic_prpenc:port1ipu2_ic_prpenc capture인코딩 캡처
ipu2_ic_prpvf:port1ipu2_ic_prpvf capture뷰파인더 캡처

두 CSI의 직접 캡처와 VDIC·PRP·인코딩·뷰파인더 분기를 모두 나열합니다. 원문에서는 전부 dashed입니다.

공통 IPU 처리 선택
CSI0 또는 CSI1 : port2직접 capture /dev/videoN
CSI0 또는 CSI1 : port1ic_prp : port0prpenc인코딩 capture
CSI0 또는 CSI1 : port1vdic : port0vdic : port2ic_prp : port0prpvf뷰파인더 capture

각 CSI 입력이 직접 캡처 또는 전처리 분기로 이동하는 대표 경로입니다.

SabreAuto 고유 입력은 아날로그 비디오 디코더 `adv7180 3-0021`(`/dev/v4l-subdev14`)입니다. 디코더 포트 0은 `ipu1_csi0_mux`(`/dev/v4l-subdev12`)의 입력 포트 1로 연결되고, mux 출력 포트 2는 `ipu1_csi0` 입력 포트 0으로 이어집니다. 이 경로를 선택하면 ADV7180 영상이 IPU1의 직접 캡처·VDIC·PRP 분기를 이용할 수 있습니다.

`ipu2_csi1_mux`(`/dev/v4l-subdev13`)의 출력 포트 2는 `ipu2_csi1` 입력 포트 0에 연결되어 있지만, 이 그래프에는 mux의 포트 0 또는 1로 들어오는 외부 소스 링크가 없습니다. 따라서 노드는 토폴로지에 존재해도 이 파일만으로는 IPU2 CSI1의 실제 외부 입력을 확정할 수 없습니다.

SabreAuto 외부 입력
adv7180 3-0021 /dev/v4l-subdev14 : port0ipu1_csi0_mux /dev/v4l-subdev12 : port1→port2ipu1_csi0 : port0
외부 입력 미표시ipu2_csi1_mux /dev/v4l-subdev13 : port0 또는 port1→port2ipu2_csi1 : port0

ADV7180이 IPU1 CSI0으로 들어가는 보드 고유 경로와 입력이 표시되지 않은 IPU2 mux를 구분합니다.

SabreAuto 고유 엔터티와 링크
항목장치·포트연결 또는 역할
ADV7180adv7180 3-0021 /dev/v4l-subdev14 : port0아날로그 영상 디코더 출력
IPU1 CSI0 mux/dev/v4l-subdev12 : port1→port2adv7180:port0 → mux:port1 → ipu1_csi0:port0
IPU2 CSI1 mux/dev/v4l-subdev13 : port0·1→port2mux:port2 → ipu2_csi1:port0, 외부 입력 링크는 미표시

공통 IPU 그래프에 추가되는 3개 서브디바이스와 3개 점선 링크입니다.

digraph board {
        rankdir=TB
        n00000001 [label="{{<port0> 0} | ipu1_csi0\n/dev/v4l-subdev0 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000001:port2 -> n00000005 [style=dashed]
        n00000001:port1 -> n0000000f:port0 [style=dashed]
        n00000001:port1 -> n0000000b:port0 [style=dashed]
        n00000005 [label="ipu1_csi0 capture\n/dev/video0", shape=box, style=filled, fillcolor=yellow]
        n0000000b [label="{{<port0> 0 | <port1> 1} | ipu1_vdic\n/dev/v4l-subdev1 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000000b:port2 -> n0000000f:port0 [style=dashed]
        n0000000f [label="{{<port0> 0} | ipu1_ic_prp\n/dev/v4l-subdev2 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000000f:port1 -> n00000013:port0 [style=dashed]
        n0000000f:port2 -> n0000001c:port0 [style=dashed]
        n00000013 [label="{{<port0> 0} | ipu1_ic_prpenc\n/dev/v4l-subdev3 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000013:port1 -> n00000016 [style=dashed]
        n00000016 [label="ipu1_ic_prpenc capture\n/dev/video1", shape=box, style=filled, fillcolor=yellow]
        n0000001c [label="{{<port0> 0} | ipu1_ic_prpvf\n/dev/v4l-subdev4 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000001c:port1 -> n0000001f [style=dashed]
        n0000001f [label="ipu1_ic_prpvf capture\n/dev/video2", shape=box, style=filled, fillcolor=yellow]
        n0000002f [label="{{<port0> 0} | ipu1_csi1\n/dev/v4l-subdev5 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000002f:port2 -> n00000033 [style=dashed]
        n0000002f:port1 -> n0000000f:port0 [style=dashed]
        n0000002f:port1 -> n0000000b:port0 [style=dashed]
        n00000033 [label="ipu1_csi1 capture\n/dev/video3", shape=box, style=filled, fillcolor=yellow]
        n0000003d [label="{{<port0> 0} | ipu2_csi0\n/dev/v4l-subdev6 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000003d:port2 -> n00000041 [style=dashed]
        n0000003d:port1 -> n0000004b:port0 [style=dashed]
        n0000003d:port1 -> n00000047:port0 [style=dashed]
        n00000041 [label="ipu2_csi0 capture\n/dev/video4", shape=box, style=filled, fillcolor=yellow]
        n00000047 [label="{{<port0> 0 | <port1> 1} | ipu2_vdic\n/dev/v4l-subdev7 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000047:port2 -> n0000004b:port0 [style=dashed]
        n0000004b [label="{{<port0> 0} | ipu2_ic_prp\n/dev/v4l-subdev8 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000004b:port1 -> n0000004f:port0 [style=dashed]
        n0000004b:port2 -> n00000058:port0 [style=dashed]
        n0000004f [label="{{<port0> 0} | ipu2_ic_prpenc\n/dev/v4l-subdev9 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000004f:port1 -> n00000052 [style=dashed]
        n00000052 [label="ipu2_ic_prpenc capture\n/dev/video5", shape=box, style=filled, fillcolor=yellow]
        n00000058 [label="{{<port0> 0} | ipu2_ic_prpvf\n/dev/v4l-subdev10 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000058:port1 -> n0000005b [style=dashed]
        n0000005b [label="ipu2_ic_prpvf capture\n/dev/video6", shape=box, style=filled, fillcolor=yellow]
        n0000006b [label="{{<port0> 0} | ipu2_csi1\n/dev/v4l-subdev11 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000006b:port2 -> n0000006f [style=dashed]
        n0000006b:port1 -> n0000004b:port0 [style=dashed]
        n0000006b:port1 -> n00000047:port0 [style=dashed]
        n0000006f [label="ipu2_csi1 capture\n/dev/video7", shape=box, style=filled, fillcolor=yellow]
        n00000079 [label="{{<port0> 0 | <port1> 1} | ipu1_csi0_mux\n/dev/v4l-subdev12 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000079:port2 -> n00000001:port0 [style=dashed]
        n0000007d [label="{{<port0> 0 | <port1> 1} | ipu2_csi1_mux\n/dev/v4l-subdev13 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000007d:port2 -> n0000006b:port0 [style=dashed]
        n00000081 [label="{{} | adv7180 3-0021\n/dev/v4l-subdev14 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000081:port0 -> n00000079:port1 [style=dashed]
}