1.26. 單平面和多平面API¶
某些裝置要求將每個輸入或輸出影片幀的資料放置在不連續的記憶體緩衝區中。在這種情況下,一個影片幀必須使用多個記憶體地址定址,即每個“平面”一個指標。平面是當前幀的一個子緩衝區。有關此類格式的示例,請參見影像格式。
最初,V4L2 API 不支援多平面緩衝區,並引入了一組擴充套件來處理它們。這些擴充套件構成了所謂的“多平面API”。
一些 V4L2 API 呼叫和結構根據使用的是單平面還是多平面API 而有不同的解釋。應用程式可以透過向其 ioctl 呼叫傳遞相應的緩衝區型別來選擇使用其中一個。緩衝區型別的多平面版本帶有 _MPLANE 字串字尾。有關可用多平面緩衝區型別的列表,請參見列舉 v4l2_buf_type。
1.26.1. 多平面格式¶
多平面API引入了新的多平面格式。這些格式使用一套獨立的FourCC程式碼。區分多平面API和多平面格式是很重要的。多平面API呼叫也可以處理所有單平面格式(只要它們在多平面API結構中傳遞),而單平面API不能處理多平面格式。
1.26.2. 區分單平面和多平面API的呼叫¶
- VIDIOC_QUERYCAP
新增了兩項多平面功能。對於同時支援單平面和多平面格式的裝置,它們可以與非多平面功能一起設定。
- VIDIOC_G_FMT, VIDIOC_S_FMT, VIDIOC_TRY_FMT
新增了用於描述多平面格式的結構體:struct
v4l2_pix_format_mplane和 structv4l2_plane_pix_format。驅動程式可以定義新的多平面格式,這些格式具有與現有單平面格式不同的FourCC程式碼。- VIDIOC_QBUF, VIDIOC_DQBUF, VIDIOC_QUERYBUF
新增了用於描述平面的結構體
v4l2_plane。此結構體的陣列在結構體v4l2_buffer的新m.planes欄位中傳遞。- VIDIOC_REQBUFS
將根據請求分配多平面緩衝區。