7.6. i.MX 影片捕獲驅動¶
7.6.1. 簡介¶
Freescale i.MX5/6 包含一個影像處理單元 (IPU),該單元處理影像幀與捕獲裝置和顯示裝置之間的流動。
對於影像捕獲,IPU 包含以下內部子單元
影像 DMA 控制器 (IDMAC)
攝像頭序列介面 (CSI)
影像轉換器 (IC)
感測器多 FIFO 控制器 (SMFC)
影像旋轉器 (IRT)
影片去隔行或組合塊 (VDIC)
IDMAC 是用於將影像幀傳輸到記憶體和從記憶體傳輸的 DMA 控制器。 存在各種專用的 DMA 通道用於影片捕獲和顯示路徑。 在傳輸過程中,IDMAC 還能夠進行垂直影像翻轉、8x8 塊傳輸(參見 IRT 描述)、在相同顏色空間內進行畫素分量重新排序(例如 UYVY 到 YUYV),以及打包 <--> 平面轉換。 IDMAC 還可以透過在傳輸期間交織偶數行和奇數行來執行簡單的去隔行(無需運動補償,這需要 VDIC)。
CSI 是後端捕獲單元,透過並行、BT.656/1120 和 MIPI CSI-2 匯流排直接與攝像頭感測器連線。
IC 處理顏色空間轉換、大小調整(縮小和放大)、水平翻轉以及 90/270 度旋轉操作。
IC 中有三個獨立的“任務”,可以同時進行轉換:預處理編碼、預處理取景器和後處理。 在每個任務中,轉換分為三個部分:縮小部分、主要部分(放大、翻轉、顏色空間轉換和圖形平面組合)和旋轉部分。
IPU 時間共享 IC 任務操作。 時間片粒度是縮小部分中八個畫素的突發、主要處理部分中一行影像、旋轉部分中一幀影像。
SMFC 由四個獨立的 FIFO 組成,每個 FIFO 都可以透過四個 IDMAC 通道同時將捕獲的幀從感測器直接傳輸到記憶體。
IRT 執行 90 和 270 度影像旋轉操作。 旋轉操作一次在 8x8 畫素塊上進行。 此操作由 IDMAC 支援,IDMAC 與垂直翻轉協調處理 8x8 塊傳輸以及塊重新排序。
VDIC 處理隔行掃描影片到逐行掃描的轉換,支援不同的運動補償模式(低、中和高運動)。 來自 VDIC 的去隔行輸出幀可以傳送到 IC 預處理取景器任務以進行進一步轉換。 VDIC 還包含一個組合器,該組合器將兩個影像平面與 alpha 混合和顏色鍵組合在一起。
除了 IPU 內部子單元外,還有兩個 IPU 外部的單元也參與 i.MX 上的影片捕獲
用於具有 MIPI CSI-2 匯流排介面的攝像頭感測器的 MIPI CSI-2 接收器。 這是一個 Synopsys DesignWare 核心。
兩個影片多路複用器,用於選擇多個感測器輸入以傳送到 CSI。
7.6.2. 特點¶
此驅動程式的一些特點包括
可以透過媒體控制器 API 配置許多不同的流水線,這些流水線對應於 i.MX 中支援的硬體影片捕獲流水線。
支援並行、BT.565 和 MIPI CSI-2 介面。
透過配置流水線到使用獨立實體的多個影片捕獲介面,實現併發獨立流。
透過 IC 任務子裝置實現縮放、顏色空間轉換、水平和垂直翻轉以及影像旋轉。
支援多種畫素格式(RGB、打包和平面 YUV、部分平面 YUV)。
VDIC 子裝置支援運動補償去隔行,具有三種運動補償模式:低、中和高運動。 定義了允許將幀直接從 CSI 傳送到 VDIC 子裝置的流水線。 將來還支援透過輸出/mem2mem 裝置將幀從記憶體緩衝區傳送到 VDIC。
包括一個幀間隔監視器 (FIM),它可以糾正 ADV718x 影片解碼器的垂直同步問題。
7.6.3. 拓撲¶
以下顯示了 i.MX6Q SabreSD 和 i.MX6Q SabreAuto 的媒體拓撲。 請參閱下一節中實體描述中的這些圖。
i.MX5/6 拓撲可能與 IPUv3 CSI 影片多路複用器的上游不同,但其下游的內部 IPUv3 拓撲對於所有 i.MX5/6 平臺都是通用的。 例如,SabreSD 使用 MIPI CSI-2 OV5640 感測器,需要 i.MX6 MIPI CSI-2 接收器。 但是 SabreAuto 只有並行 bt.656 總線上的 ADV7180 解碼器,因此不需要 MIPI CSI-2 接收器,因此其圖中缺少該接收器。
i.MX6Q SabreSD 上的媒體流水線圖¶
i.MX6Q SabreAuto 上的媒體流水線圖¶
7.6.4. 實體¶
7.6.5. imx6-mipi-csi2¶
這是 MIPI CSI-2 接收器實體。 它有一個接收 MIPI CSI-2 流的接收器埠(通常來自 MIPI CSI-2 攝像頭感測器)。 它有四個源埠,對應於四個 MIPI CSI-2 解複用的虛擬通道輸出。 可以啟用多個源埠以從多個虛擬通道獨立流式傳輸。
此實體實際上由兩個子塊組成。 一個是 MIPI CSI-2 核心。 這是一個 Synopsys Designware MIPI CSI-2 核心。 另一個子塊是“CSI-2 到 IPU 墊片”。 該墊片充當四個虛擬通道流的解複用器,提供四個單獨的並行匯流排,其中包含每個虛擬通道,這些通道路由到 CSI 或影片多路複用器,如下所述。
在 i.MX6 solo/dual-lite 上,所有四個虛擬通道匯流排都路由到兩個影片多路複用器。 CSI0 和 CSI1 都可以接收任何虛擬通道,由影片多路複用器選擇。
在 i.MX6 Quad 上,虛擬通道 0 路由到 IPU1-CSI0(在由影片 mux 選擇後),虛擬通道 1 和 2 分別硬連線到 IPU1-CSI1 和 IPU2-CSI0,虛擬通道 3 路由到 IPU2-CSI1(再次由影片 mux 選擇)。
7.6.6. ipuX_csiY_mux¶
這些是影片多路複用器。 它們有兩個或多個接收器埠,可以從具有並行介面的攝像頭感測器或來自 imx6-mipi-csi2 實體的 MIPI CSI-2 虛擬通道中進行選擇。 它們有一個源埠,該埠路由到 CSI(ipuX_csiY 實體)。
在 i.MX6 solo/dual-lite 上,有兩個影片 mux 實體。 一個位於 IPU1-CSI0 前面,用於在並行感測器和四個 MIPI CSI-2 虛擬通道中的任何一個之間進行選擇(總共五個接收器埠)。 另一個 mux 位於 IPU1-CSI1 前面,同樣有五個接收器埠,用於在並行感測器和四個 MIPI CSI-2 虛擬通道中的任何一個之間進行選擇。
在 i.MX6 Quad 上,有兩個影片 mux 實體。 一個位於 IPU1-CSI0 前面,用於在並行感測器和 MIPI CSI-2 虛擬通道 0 之間進行選擇(兩個接收器埠)。 另一個 mux 位於 IPU2-CSI1 前面,用於在並行感測器和 MIPI CSI-2 虛擬通道 3 之間進行選擇(兩個接收器埠)。
7.6.7. ipuX_csiY¶
這些是 CSI 實體。 它們有一個接收器埠,接收來自影片 mux 或來自 MIPI CSI-2 虛擬通道(如上所述)的訊號。
此實體有兩個源埠。 第一個源埠可以直接連結到 ipuX_vdic 實體或 ipuX_ic_prp 實體,使用不需要 IDMAC 記憶體緩衝區傳輸的硬體連結。
當直接源埠路由到 ipuX_ic_prp 實體時,CSI 的幀可以由一個或兩個 IC 預處理任務處理。
當直接源埠路由到 ipuX_vdic 實體時,VDIC 將使用“高運動”模式執行運動補償去隔行(請參閱 ipuX_vdic 實體的描述)。
第二個源埠透過 SMFC 和 IDMAC 通道將影片幀直接傳送到記憶體緩衝區,繞過 IC 預處理。 此源埠路由到捕獲裝置節點,節點名稱的格式為“ipuX_csiY capture”。
請注意,由於 IDMAC 源埠使用 IDMAC 通道,因此 IDMAC 通道可以在同一顏色空間內進行畫素重新排序。 例如,如果 CSI 接收器埠接收 UYVY 順序,則連結到 IDMAC 源埠的捕獲裝置可以按 YUYV 順序捕獲。 此外,如果 CSI 接收器埠接收打包的 YUV 格式,則捕獲裝置可以捕獲平面 YUV 格式,例如 YUV420。
IDMAC 源埠處的 IDMAC 通道還支援簡單的交織而無需運動補償,如果在源埠的欄位型別是順序頂部到底部或底部到頂部,並且請求的捕獲介面欄位型別設定為交織(t-b、b-t 或不合格的交織)時,該功能將被啟用。 捕獲介面將強制執行與源埠欄位順序相同的欄位順序(如果源埠是 seq-bt,則為 interlaced-bt,如果源埠是 seq-tb,則為 interlaced-tb)。
有關 ipuX_csiY 生成的事件,請參閱 ref:imx_api_ipuX_csiY。
7.6.8. ipuX_csiY 中的裁剪¶
CSI 支援裁剪傳入的原始感測器幀。 這在 ipuX_csiY 實體的接收器埠中實現,使用裁剪選擇子裝置 API。
CSI 還支援獨立地在寬度和高度上進行固定的除以二的縮小。 這在 ipuX_csiY 實體的接收器埠中實現,使用合成選擇子裝置 API。
ipuX_csiY 源埠處的輸出矩形與接收器埠處的合成矩形相同。 因此,無法協商源埠矩形,必須使用接收器埠處的合成選擇 API 進行設定(如果需要 /2 縮小,否則源埠矩形等於傳入矩形)。
為了給出裁剪和 /2 縮小的示例,這將把 1280x960 輸入幀裁剪為 640x480,然後在兩個維度上都 /2 縮小到 320x240(假設 ipu1_csi0 連結到 ipu1_csi0_mux)
media-ctl -V "'ipu1_csi0_mux':2[fmt:UYVY2X8/1280x960]"
media-ctl -V "'ipu1_csi0':0[crop:(0,0)/640x480]"
media-ctl -V "'ipu1_csi0':0[compose:(0,0)/320x240]"
7.6.9. ipuX_csiY 中的幀跳過¶
CSI 支援透過幀跳過進行幀速率抽取。 透過設定接收器和源埠處的幀間隔來指定幀速率抽取。 然後 ipuX_csiY 實體將最佳幀跳過設定應用於 CSI,以在源埠處實現所需的幀速率。
以下示例將假定的傳入 60 Hz 幀速率在 IDMAC 輸出源埠處降低一半
media-ctl -V "'ipu1_csi0':0[fmt:UYVY2X8/640x480@1/60]"
media-ctl -V "'ipu1_csi0':2[fmt:UYVY2X8/640x480@1/30]"
7.6.10. ipuX_csiY 中的幀間隔監視器¶
請參閱 ref:imx_api_FIM。
7.6.11. ipuX_vdic¶
VDIC 執行運動補償去隔行,具有三種運動補償模式:低、中和高運動。 該模式由選單控制 V4L2_CID_DEINTERLACING_MODE 指定。 VDIC 有兩個接收器埠和一個源埠。
直接接收器埠接收來自 ipuX_csiY 直接埠的訊號。 透過此連結,VDIC 只能在高運動模式下執行。
當啟用 IDMAC 接收器埠時,它會接收來自輸出或 mem2mem 裝置節點的訊號。 透過此流水線,VDIC 還可以以低和中等模式執行,因為這些模式需要從記憶體緩衝區接收幀。 請注意,尚未實現輸出或 mem2mem 裝置,因此此接收器埠當前沒有連結。
源埠路由到 IC 預處理實體 ipuX_ic_prp。
7.6.12. ipuX_ic_prp¶
這是 IC 預處理實體。 它充當路由器,將其接收器埠的資料路由到一個或兩個源埠。
此實體有一個接收器埠。 接收器埠可以接收來自 ipuX_csiY 直接埠或來自 ipuX_vdic 的訊號。
此實體有兩個源埠。 一個源埠路由到預處理編碼任務實體 (ipuX_ic_prpenc),另一個源埠路由到預處理取景器任務實體 (ipuX_ic_prpvf)。 如果接收器埠接收來自 ipuX_csiY 的訊號,則可以同時啟用兩個源埠。 如果接收器埠接收來自 ipuX_vdic 的訊號,則只能啟用到預處理取景器任務實體的源埠(來自 VDIC 的幀只能由預處理取景器任務處理)。
7.6.13. ipuX_ic_prpenc¶
這是 IC 預處理編碼實體。 它有一個來自 ipuX_ic_prp 的接收器埠和一個源埠。 源埠路由到捕獲裝置節點,節點名稱的格式為“ipuX_ic_prpenc capture”。
此實體執行 IC 預處理編碼任務操作:顏色空間轉換、大小調整(縮小和放大)、水平和垂直翻轉以及 90/270 度旋轉。 透過標準 V4L2 控制元件提供翻轉和旋轉。
與 ipuX_csiY IDMAC 源一樣,此實體還支援簡單的去隔行(無需運動補償)和畫素重新排序。
7.6.14. ipuX_ic_prpvf¶
這是 IC 預處理取景器實體。 它有一個來自 ipuX_ic_prp 的接收器埠和一個源埠。 源埠路由到捕獲裝置節點,節點名稱的格式為“ipuX_ic_prpvf capture”。
此實體在操作上與 ipuX_ic_prpenc 相同,具有相同的大小調整和 CSC 操作以及翻轉/旋轉控制元件。 如果 ipuX_ic_prp 接收來自 ipuX_vdic 的訊號,它將接收並處理來自 ipuX_vdic 的去隔行幀。
與 ipuX_csiY IDMAC 源一樣,此實體支援簡單的交織而無需運動補償。 但是,請注意,如果流水線中包含 ipuX_vdic(ipuX_ic_prp 接收來自 ipuX_vdic 的訊號),則無法在 ipuX_ic_prpvf 中使用交織,因為 ipuX_vdic 已經執行了去隔行(具有運動補償),因此來自 ipuX_vdic 的欄位型別輸出只能為 none(逐行掃描)。
7.6.15. 捕獲流水線¶
以下描述了流水線支援的各種用例。
顯示的連結不包括後端感測器、影片 mux 或 mipi csi-2 接收器連結。 這取決於感測器介面的型別(並行或 mipi csi-2)。 因此,這些流水線以以下內容開頭
sensor -> ipuX_csiY_mux -> ...
對於並行感測器,或者
sensor -> imx6-mipi-csi2 -> (ipuX_csiY_mux) -> ...
對於 mipi csi-2 感測器。 imx6-mipi-csi2 接收器可能需要先路由到影片 mux (ipuX_csiY_mux),然後再發送到 CSI,具體取決於 mipi csi-2 虛擬通道,因此 ipuX_csiY_mux 顯示在括號中。
7.6.16. 未處理的影片捕獲:¶
透過 ipuX_csiY IDMAC 源埠直接將幀從感測器傳送到攝像頭裝置介面節點,無需轉換
-> ipuX_csiY:2 -> ipuX_csiY capture
7.6.17. IC 直接轉換:¶
此流水線使用預處理編碼實體將幀直接從 CSI 路由到 IC,以執行縮放到 1024x1024 解析度、CSC、翻轉和影像旋轉
-> ipuX_csiY:1 -> 0:ipuX_ic_prp:1 -> 0:ipuX_ic_prpenc:1 -> ipuX_ic_prpenc capture
7.6.18. 運動補償去隔行:¶
此流水線將幀從 CSI 直接埠路由到 VDIC 實體,以支援運動補償去隔行(僅限高運動模式)、縮放到 1024x1024、CSC、翻轉和旋轉
-> ipuX_csiY:1 -> 0:ipuX_vdic:2 -> 0:ipuX_ic_prp:2 -> 0:ipuX_ic_prpvf:1 -> ipuX_ic_prpvf capture
7.6.19. 使用說明¶
為了幫助配置以及與僅從影片裝置節點訪問控制元件的 V4L2 應用程式向後相容,捕獲裝置介面從當前流水線中的活動實體繼承控制元件,因此可以直接從子裝置或從活動捕獲裝置介面訪問控制元件。 例如,FIM 控制元件可以從 ipuX_csiY 子裝置或從活動捕獲裝置訪問。
以下是 Sabre* 參考板的特定使用說明
7.6.20. 帶有 OV5642 和 OV5640 的 i.MX6Q SabreLite¶
此平臺需要帶有並行攝像頭介面的 OmniVision OV5642 模組和帶有 MIPI CSI-2 介面的 OV5640 模組。 這兩個模組都可以從 Boundary Devices 獲得
請注意,如果只有一個攝像頭模組可用,則可以在裝置樹中停用另一個感測器節點。
OV5642 模組連線到 i.MX 內部影片 mux 到 IPU1 CSI0 上的並行匯流排輸入。 它的 i2c 匯流排連線到 i2c 匯流排 2。
MIPI CSI-2 OV5640 模組連線到 i.MX 內部 MIPI CSI-2 接收器,並且來自接收器的四個虛擬通道輸出的路由方式如下:vc0 到 IPU1 CSI0 mux,vc1 直接到 IPU1 CSI1,vc2 直接到 IPU2 CSI0,vc3 到 IPU2 CSI1 mux。 OV5640 還連線到 SabreLite 上的 i2c 匯流排 2,因此 OV5642 和 OV5640 不得共享相同的 i2c 從裝置地址。
以下基本示例配置了兩個感測器的未處理影片捕獲流水線。 OV5642 路由到 ipu1_csi0,OV5640(在 MIPI CSI-2 虛擬通道 1 上傳輸,它是 imx6-mipi-csi2 埠 2)路由到 ipu1_csi1。 兩個感測器都配置為輸出 640x480,OV5642 輸出 YUYV2X8,OV5640 輸出 UYVY2X8
# Setup links for OV5642
media-ctl -l "'ov5642 1-0042':0 -> 'ipu1_csi0_mux':1[1]"
media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]"
media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]"
# Setup links for OV5640
media-ctl -l "'ov5640 1-0040':0 -> 'imx6-mipi-csi2':0[1]"
media-ctl -l "'imx6-mipi-csi2':2 -> 'ipu1_csi1':0[1]"
media-ctl -l "'ipu1_csi1':2 -> 'ipu1_csi1 capture':0[1]"
# Configure pads for OV5642 pipeline
media-ctl -V "'ov5642 1-0042':0 [fmt:YUYV2X8/640x480 field:none]"
media-ctl -V "'ipu1_csi0_mux':2 [fmt:YUYV2X8/640x480 field:none]"
media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/640x480 field:none]"
# Configure pads for OV5640 pipeline
media-ctl -V "'ov5640 1-0040':0 [fmt:UYVY2X8/640x480 field:none]"
media-ctl -V "'imx6-mipi-csi2':2 [fmt:UYVY2X8/640x480 field:none]"
media-ctl -V "'ipu1_csi1':2 [fmt:AYUV32/640x480 field:none]"
然後可以在捕獲裝置節點“ipu1_csi0 capture”和“ipu1_csi1 capture”上獨立開始流式傳輸。 v4l2-ctl 工具可用於在捕獲裝置節點上選擇任何支援的 YUV 畫素格式,包括平面。
7.6.21. 帶有 ADV7180 解碼器的 i.MX6Q SabreAuto¶
在 i.MX6Q SabreAuto 上,板載 ADV7180 SD 解碼器連線到內部影片 mux 到 IPU1 CSI0 上的並行匯流排輸入。
以下示例配置了一條流水線以從 ADV7180 影片解碼器捕獲,假設 NTSC 720x480 輸入訊號,使用簡單的交織(未經轉換且沒有運動補償)。 adv7180 必須輸出順序或交替欄位(對於 NTSC,欄位型別為“seq-bt”,或者為“alternate”)
# Setup links
media-ctl -l "'adv7180 3-0021':0 -> 'ipu1_csi0_mux':1[1]"
media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]"
media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]"
# Configure pads
media-ctl -V "'adv7180 3-0021':0 [fmt:UYVY2X8/720x480 field:seq-bt]"
media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X8/720x480]"
media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/720x480]"
# Configure "ipu1_csi0 capture" interface (assumed at /dev/video4)
v4l2-ctl -d4 --set-fmt-video=field=interlaced_bt
然後可以在 /dev/video4 上開始流式傳輸。 v4l2-ctl 工具還可以用於在 /dev/video4 上選擇任何支援的 YUV 畫素格式。
此示例配置了一條流水線以從 ADV7180 影片解碼器捕獲,假設 PAL 720x576 輸入訊號,並具有運動補償去隔行。 adv7180 必須輸出順序或交替欄位(對於 PAL,欄位型別為“seq-tb”,或者為“alternate”)。
# Setup links
media-ctl -l "'adv7180 3-0021':0 -> 'ipu1_csi0_mux':1[1]"
media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]"
media-ctl -l "'ipu1_csi0':1 -> 'ipu1_vdic':0[1]"
media-ctl -l "'ipu1_vdic':2 -> 'ipu1_ic_prp':0[1]"
media-ctl -l "'ipu1_ic_prp':2 -> 'ipu1_ic_prpvf':0[1]"
media-ctl -l "'ipu1_ic_prpvf':1 -> 'ipu1_ic_prpvf capture':0[1]"
# Configure pads
media-ctl -V "'adv7180 3-0021':0 [fmt:UYVY2X8/720x576 field:seq-tb]"
media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X8/720x576]"
media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/720x576]"
media-ctl -V "'ipu1_vdic':2 [fmt:AYUV32/720x576 field:none]"
media-ctl -V "'ipu1_ic_prp':2 [fmt:AYUV32/720x576 field:none]"
media-ctl -V "'ipu1_ic_prpvf':1 [fmt:AYUV32/720x576 field:none]"
# Configure "ipu1_ic_prpvf capture" interface (assumed at /dev/video2)
v4l2-ctl -d2 --set-fmt-video=field=none
然後可以在 /dev/video2 上開始流式傳輸。 v4l2-ctl 工具還可以用於在 /dev/video2 上選擇任何支援的 YUV 畫素格式。
此平臺接受到 Ain1(聯結器 J42)上 ADV7180 的複合影片模擬輸入。
7.6.22. 帶有 ADV7180 解碼器的 i.MX6DL SabreAuto¶
在 i.MX6DL SabreAuto 上,板載 ADV7180 SD 解碼器連線到內部影片 mux 到 IPU1 CSI0 上的並行匯流排輸入。
以下示例配置了一條流水線以從 ADV7180 影片解碼器捕獲,假設 NTSC 720x480 輸入訊號,使用簡單的交織(未經轉換且沒有運動補償)。 adv7180 必須輸出順序或交替欄位(對於 NTSC,欄位型別為“seq-bt”,或者為“alternate”)
# Setup links
media-ctl -l "'adv7180 4-0021':0 -> 'ipu1_csi0_mux':4[1]"
media-ctl -l "'ipu1_csi0_mux':5 -> 'ipu1_csi0':0[1]"
media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]"
# Configure pads
media-ctl -V "'adv7180 4-0021':0 [fmt:UYVY2X8/720x480 field:seq-bt]"
media-ctl -V "'ipu1_csi0_mux':5 [fmt:UYVY2X8/720x480]"
media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/720x480]"
# Configure "ipu1_csi0 capture" interface (assumed at /dev/video0)
v4l2-ctl -d0 --set-fmt-video=field=interlaced_bt
然後可以在 /dev/video0 上開始流式傳輸。 v4l2-ctl 工具還可以用於在 /dev/video0 上選擇任何支援的 YUV 畫素格式。
此示例配置了一條流水線以從 ADV7180 影片解碼器捕獲,假設 PAL 720x576 輸入訊號,並具有運動補償去隔行。 adv7180 必須輸出順序或交替欄位(對於 PAL,欄位型別為“seq-tb”,或者為“alternate”)。
# Setup links
media-ctl -l "'adv7180 4-0021':0 -> 'ipu1_csi0_mux':4[1]"
media-ctl -l "'ipu1_csi0_mux':5 -> 'ipu1_csi0':0[1]"
media-ctl -l "'ipu1_csi0':1 -> 'ipu1_vdic':0[1]"
media-ctl -l "'ipu1_vdic':2 -> 'ipu1_ic_prp':0[1]"
media-ctl -l "'ipu1_ic_prp':2 -> 'ipu1_ic_prpvf':0[1]"
media-ctl -l "'ipu1_ic_prpvf':1 -> 'ipu1_ic_prpvf capture':0[1]"
# Configure pads
media-ctl -V "'adv7180 4-0021':0 [fmt:UYVY2X8/720x576 field:seq-tb]"
media-ctl -V "'ipu1_csi0_mux':5 [fmt:UYVY2X8/720x576]"
media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/720x576]"
media-ctl -V "'ipu1_vdic':2 [fmt:AYUV32/720x576 field:none]"
media-ctl -V "'ipu1_ic_prp':2 [fmt:AYUV32/720x576 field:none]"
media-ctl -V "'ipu1_ic_prpvf':1 [fmt:AYUV32/720x576 field:none]"
# Configure "ipu1_ic_prpvf capture" interface (assumed at /dev/video2)
v4l2-ctl -d2 --set-fmt-video=field=none
然後可以在 /dev/video2 上開始流式傳輸。 v4l2-ctl 工具還可以用於在 /dev/video2 上選擇任何支援的 YUV 畫素格式。
此平臺接受到 Ain1(聯結器 J42)上 ADV7180 的複合影片模擬輸入。
7.6.23. 帶有 MIPI CSI-2 OV5640 的 i.MX6Q SabreSD¶
與 i.MX6Q SabreLite 類似,i.MX6Q SabreSD 在 IPU1 CSI0 上支援並行介面 OV5642 模組,以及 MIPI CSI-2 OV5640 模組。OV5642 連線到 i2c 匯流排 1,OV5640 連線到 i2c 匯流排 2。
SabreSD 的裝置樹包含了並行 OV5642 和 MIPI CSI-2 OV5640 的 OF 圖,但截至本文撰寫之時,僅 MIPI CSI-2 OV5640 經過測試,因此 OV5642 節點當前被停用。OV5640 模組連線到 MIPI 聯結器 J5。連線到 SabreSD 板的 OV5640 模組的 NXP 部件號為 H120729。
以下示例配置了一個未處理的影片捕獲管道,從 OV5640 捕獲資料,並透過 MIPI CSI-2 虛擬通道 0 傳輸。
# Setup links
media-ctl -l "'ov5640 1-003c':0 -> 'imx6-mipi-csi2':0[1]"
media-ctl -l "'imx6-mipi-csi2':1 -> 'ipu1_csi0_mux':0[1]"
media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]"
media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]"
# Configure pads
media-ctl -V "'ov5640 1-003c':0 [fmt:UYVY2X8/640x480]"
media-ctl -V "'imx6-mipi-csi2':1 [fmt:UYVY2X8/640x480]"
media-ctl -V "'ipu1_csi0_mux':0 [fmt:UYVY2X8/640x480]"
media-ctl -V "'ipu1_csi0':0 [fmt:AYUV32/640x480]"
然後可以在“ipu1_csi0 capture”節點上開始流傳輸。可以使用 v4l2-ctl 工具在捕獲裝置節點上選擇任何支援的畫素格式。
要確定與“ipu1_csi0 capture”對應的 /dev/video 節點是什麼,請執行以下操作:
media-ctl -e "ipu1_csi0 capture"
/dev/video0
/dev/video0 在本例中是流傳輸元素。
透過 v4l2-ctl 啟動流傳輸:
v4l2-ctl --stream-mmap -d /dev/video0
透過 Gstreamer 啟動流傳輸並將內容傳送到顯示器:
gst-launch-1.0 v4l2src device=/dev/video0 ! kmssink
以下示例配置了一個直接轉換管道,從 OV5640 捕獲資料,並透過 MIPI CSI-2 虛擬通道 0 傳輸。它還顯示了 IC 輸出的色彩空間轉換和縮放。
# Setup links
media-ctl -l "'ov5640 1-003c':0 -> 'imx6-mipi-csi2':0[1]"
media-ctl -l "'imx6-mipi-csi2':1 -> 'ipu1_csi0_mux':0[1]"
media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]"
media-ctl -l "'ipu1_csi0':1 -> 'ipu1_ic_prp':0[1]"
media-ctl -l "'ipu1_ic_prp':1 -> 'ipu1_ic_prpenc':0[1]"
media-ctl -l "'ipu1_ic_prpenc':1 -> 'ipu1_ic_prpenc capture':0[1]"
# Configure pads
media-ctl -V "'ov5640 1-003c':0 [fmt:UYVY2X8/640x480]"
media-ctl -V "'imx6-mipi-csi2':1 [fmt:UYVY2X8/640x480]"
media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X8/640x480]"
media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/640x480]"
media-ctl -V "'ipu1_ic_prp':1 [fmt:AYUV32/640x480]"
media-ctl -V "'ipu1_ic_prpenc':1 [fmt:ARGB8888_1X32/800x600]"
# Set a format at the capture interface
v4l2-ctl -d /dev/video1 --set-fmt-video=pixelformat=RGB3
然後可以在“ipu1_ic_prpenc capture”節點上開始流傳輸。
要確定與“ipu1_ic_prpenc capture”對應的 /dev/video 節點是什麼,請執行以下操作:
media-ctl -e "ipu1_ic_prpenc capture"
/dev/video1
/dev/video1 在本例中是流傳輸元素。
透過 v4l2-ctl 啟動流傳輸:
v4l2-ctl --stream-mmap -d /dev/video1
透過 Gstreamer 啟動流傳輸並將內容傳送到顯示器:
gst-launch-1.0 v4l2src device=/dev/video1 ! kmssink
7.6.24. 已知問題¶
當在接近 IC 調整器限制 1024x1024 的捕獲解析度下使用 90 或 270 度旋轉控制,並結合平面畫素格式(YUV420、YUV422p)時,幀捕獲通常會失敗,IDMAC 通道不會產生幀結束中斷。為了解決這個問題,當需要 90 或 270 度旋轉時,請使用較低的解析度和/或打包格式(YUYV、RGB3 等)。
7.6.25. 檔案列表¶
drivers/staging/media/imx/ include/media/imx.h include/linux/imx-media.h