V4L2 小整理

V4L2 全名 Video For Linux Version 2, 它是 Linux 裡面多媒體類的 kernel module [1]. 和它同等地位的包括 DTV, CEC 等其他 user space API. 比較複雜的系統也可能使用 Media Controller API 來維護 [5], 因為 V4L2 不提供查找 device 的能力, 但後者可以. 

V4L2 支援 16 種介面 (Interface), 在 [2] 裡面會各自稍微給一點介紹. 重點部分還是在它的 function [3] 和基本操作流程. 標準的 V4L2 使用流程, 包括下面 6 個步驟. 但執行順序可調換, 也可以省略其中幾步.

  • Opening the device
  • Changing device properties, selecting a video and audio input, video standard, picture brightness a. o.
  • Negotiating a data format
  • Negotiating an input/output method
  • The actual input/output loop
  • Closing the device

不可省略的像是基本安裝和打開關閉 device (open()/close()) 等等, 例如

mknod /dev/video0 c 81 0 // V4L2 的 major number 是 81.

某些 device 可以接受多次 open(), 表示各自得到使用的權利. 理論上每個 node 都可以支援所有的 function, 但這偏離現實. 我們可以使用 ioctl VIDIOC_QUERYCAP 這個 ioctl 去看一個 device 支援那些 function 和 IO method.

附帶一題, 最近不常看書, 所以很少找到印刷錯誤. 但我覺得 [6] 這裡打錯了, hyperlink 也錯. 畫紅線的地方應該是 mmap(), 要 link 到 [7] 才對.

在這數十個 function 之中, 最基本的就是: open(), close(), read(), write(), select(),poll(), mmap(), unmap(). 其他 97 個 VIDIOC_ 開頭的 request 都是代入 V4L2  ioctl() 使用. 

[REF]

  1. https://www.kernel.org/doc/html/v4.16/media/uapi/v4l/v4l2.html
  2. https://www.kernel.org/doc/html/v4.16/media/uapi/v4l/devices.html#devices
  3. https://www.kernel.org/doc/html/v4.16/media/uapi/v4l/user-func.html
  4. https://www.kernel.org/doc/html/v4.16/media/uapi/v4l/open.html
  5. https://www.kernel.org/doc/html/v4.16/media/uapi/mediactl/media-controller.html
  6. https://www.kernel.org/doc/html/v4.16/media/uapi/v4l/libv4l-introduction.html
  7. https://www.kernel.org/doc/html/v4.16/media/uapi/v4l/func-mmap.html

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

%d 位部落客按了讚: