7.17. Rockchip 影像訊號處理器 (rkisp1)¶
7.17.1. 簡介¶
此檔案記錄了用於 RK3288 和 RK3399 SoC 的 Rockchip ISP1 的驅動程式。該驅動程式位於 drivers/media/platform/rockchip/ rkisp1 下,並使用媒體控制器 API。
7.17.2. 修訂¶
此 ISP 存在多個較小的修訂版本,這些版本在後來的 SoC 中引入。可以在 UAPI 中的列舉 rkisp1_cif_isp_version 中找到修訂版本,並且可以在 ioctl MEDIA_IOC_DEVICE_INFO 返回的 struct media_device_info 的 hw_revision 欄位中讀取執行中 SoC 中 ISP 的修訂版本。
正在使用的版本有
RKISP1_V10:至少在 rk3288 和 rk3399 中使用
RKISP1_V11:在原始供應商程式碼中宣告,但未使用
RKISP1_V12:至少在 rk3326 和 px30 中使用
RKISP1_V13:至少在 rk1808 中使用
7.17.3. 拓撲¶
該驅動程式有 4 個影片裝置
rkisp1_mainpath:用於檢索影像的捕獲裝置,通常具有較高的解析度。
rkisp1_selfpath:用於檢索影像的捕獲裝置。
rkisp1_stats:一個元資料捕獲裝置,用於傳送統計資訊。
rkisp1_params:一個元資料輸出裝置,用於接收來自使用者空間的引數配置。
該驅動程式有 3 個子裝置
rkisp1_resizer_mainpath:用於調整主路徑捕獲裝置幀的大小和下采樣。
rkisp1_resizer_selfpath:用於調整自路徑捕獲裝置幀的大小和下采樣。
rkisp1_isp:連線到感測器,負責所有 isp 操作。
7.17.3.1. rkisp1_mainpath,rkisp1_selfpath - 幀捕獲影片節點¶
這些是用於捕獲幀的主路徑和自路徑捕獲裝置。 這些實體是將幀寫入記憶體的 DMA 引擎。 自路徑影片裝置可以捕獲 YUV/RGB 格式。 它的輸入是 YUV 編碼的流,並且能夠將其轉換為 RGB。 自路徑無法捕獲 bayer 格式。 主路徑可以捕獲 bayer 和 YUV 格式,但無法捕獲 RGB 格式。 兩個捕獲影片都支援 V4L2_CAP_IO_MC capability。
7.17.3.2. rkisp1_resizer_mainpath,rkisp1_resizer_selfpath - 調整大小器子裝置節點¶
這些是主路徑和自路徑的調整大小器實體。 這些實體可以放大和縮小幀,還可以更改 YUV 取樣(例如 YUV4:2:2 -> YUV4:2:0)。 它們在接收器 pad 上也具有裁剪功能。 調整大小器實體只能在 YUV:4:2:2 格式 (MEDIA_BUS_FMT_YUYV8_2X8) 上執行。 主路徑捕獲裝置支援捕獲 bayer 格式的影片。 在這種情況下,主路徑的調整大小器設定為“旁路”模式 - 它只是轉發幀而不對其進行操作。
7.17.3.3. rkisp1_isp - 影像訊號處理子裝置節點¶
這是 isp 實體。 它在接收器 pad 0 上連線到感測器,並使用 CSI-2 協議接收幀。 它負責配置 CSI-2 協議。 它在連線到感測器的接收器 pad 0 上和連線到調整大小器實體的源 pad 2 上具有裁剪功能。 接收器 pad 0 上的裁剪定義了感測器中的影像區域。 源 pad 2 上的裁剪定義了影像穩定器 (IS) 的區域。
7.17.3.4. rkisp1_stats - 統計影片節點¶
統計影片節點輸出 3A(自動對焦、自動曝光和自動白平衡)統計資訊,以及由 rkisp1 處理的幀的直方圖統計資訊到使用者空間應用程式。 使用這些資料,應用程式可以實現演算法並透過 rkisp_params 節點重新引數化驅動程式,以提高影片流期間的影像質量。 緩衝區格式由結構 rkisp1_stat_buffer 定義,使用者空間應將 V4L2_META_FMT_RK_ISP1_STAT_3A 設定為資料格式。
7.17.3.5. rkisp1_params - 引數影片節點¶
rkisp1_params 影片節點從使用者空間接收一組引數,以便在影片流期間應用於硬體,從而允許使用者空間動態修改值,例如黑電平、串擾校正等。
ISP 驅動程式支援兩種不同的引數配置方法:固定引數格式或可擴充套件引數格式。
當使用固定引數方法時,緩衝區格式由結構 rkisp1_params_cfg 定義,使用者空間應將 V4L2_META_FMT_RK_ISP1_PARAMS 設定為資料格式。
當使用可擴充套件引數方法時,緩衝區格式由結構 rkisp1_ext_params_cfg 定義,使用者空間應將 V4L2_META_FMT_RK_ISP1_EXT_PARAMS 設定為資料格式。
7.17.4. 捕獲影片幀示例¶
在以下示例中,連線到“rkisp1_isp”pad 0 的感測器是 imx219。
以下命令可用於從具有維度 900x800 平面格式 YUV 4:2:2 的自路徑影片節點捕獲影片。 它使用所有可能的裁剪功能(請參閱下面的解釋)
# set the links
"media-ctl" "-d" "platform:rkisp1" "-r"
"media-ctl" "-d" "platform:rkisp1" "-l" "'imx219 4-0010':0 -> 'rkisp1_isp':0 [1]"
"media-ctl" "-d" "platform:rkisp1" "-l" "'rkisp1_isp':2 -> 'rkisp1_resizer_selfpath':0 [1]"
"media-ctl" "-d" "platform:rkisp1" "-l" "'rkisp1_isp':2 -> 'rkisp1_resizer_mainpath':0 [0]"
# set format for imx219 4-0010:0
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"imx219 4-0010":0 [fmt:SRGGB10_1X10/1640x1232]'
# set format for rkisp1_isp pads:
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_isp":0 [fmt:SRGGB10_1X10/1640x1232 crop: (0,0)/1600x1200]'
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_isp":2 [fmt:YUYV8_2X8/1600x1200 crop: (0,0)/1500x1100]'
# set format for rkisp1_resizer_selfpath pads:
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_resizer_selfpath":0 [fmt:YUYV8_2X8/1500x1100 crop: (300,400)/1400x1000]'
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_resizer_selfpath":1 [fmt:YUYV8_2X8/900x800]'
# set format for rkisp1_selfpath:
"v4l2-ctl" "-z" "platform:rkisp1" "-d" "rkisp1_selfpath" "-v" "width=900,height=800,"
"v4l2-ctl" "-z" "platform:rkisp1" "-d" "rkisp1_selfpath" "-v" "pixelformat=422P"
# start streaming:
v4l2-ctl "-z" "platform:rkisp1" "-d" "rkisp1_selfpath" "--stream-mmap" "--stream-count" "10"
在上面的示例中,感測器配置為 bayer 格式:SRGGB10_1X10/1640x1232。 rkisp1_isp:0 pad 應配置為與感測器相同的 mbus 格式和尺寸,否則流式傳輸將因“EPIPE”錯誤而失敗。 因此,它也被配置為 SRGGB10_1X10/1640x1232。 此外,rkisp1_isp:0 pad 配置為裁剪 (0,0)/1600x1200。
裁剪尺寸會自動傳播以成為 isp 源 pad rkisp1_isp:2 的格式。 另一個裁剪操作在 isp 源 pad 上配置:(0,0)/1500x1100。
調整大小器的接收器 pad rkisp1_resizer_selfpath 應配置為格式 YUYV8_2X8/1500x1100,以便匹配連結另一端的格式。 此外,還在其上配置了裁剪 (300,400)/1400x1000。
調整大小器的源 pad rkisp1_resizer_selfpath:1 配置為格式 YUYV8_2X8/900x800。 這意味著調整大小器首先從接收到的幀中裁剪一個 (300,400)/1400x100 的視窗,然後將此視窗縮放到維度 900x800。
請注意,上面的示例未使用統計引數控制環路。 因此,捕獲的幀不會透過 3A 演算法,並且可能不會具有良好的質量,甚至看起來會很暗且呈綠色。
7.17.5. 配置量化¶
該驅動程式支援 YUV 格式的有限和全範圍量化,其中有限是預設值。 要在兩者之間切換,使用者空間應使用子裝置的色彩空間轉換 API (CSC) 在 isp 的源 pad 2 上 (rkisp1_isp:2)。 在此 pad 上配置的量化是主路徑和自路徑影片節點上捕獲的影片幀的量化。 請注意,即使量化配置為 rkisp1_isp:2 上的全範圍,調整大小器和捕獲實體也將始終報告 V4L2_QUANTIZATION_DEFAULT。 因此,為了獲得配置的量化,應用程式應從 pad rkisp1_isp:2 獲取它。