V4L2使用V4L2_MEMORY_USERPTR和V4L2_MEMORY_MMAP的區別


視頻應用可以通過兩種方式從V4L2驅動申請buffer

1. USERPTR, 顧名思義是用戶空間指針的意思,應用層負責分配需要的內存空間,然后以指針的形式傳遞給V4L2驅動層,V4L2驅動會把capture的內容保存到指針所指的空間

一般來說,應用層需要確保這個內存空間物理上是連續的(IPU處理單元的需求),在android系統可以通過PMEM驅動來分配大塊的連續物理內存。應用層在不需要的時候要負責釋放申請的PMEM內存。

2. MMAP方式,內存映射模式,應用調用VIDIOC_REQBUFS ioctl分配設備buffers,參數標識需要的數目和類型。這個ioctl也可以用來改變buffers的數據以及釋放分配的內存,當然這個內存空間一般也是連續的。在應用空間能夠訪問這些物理地址之前,必須調用mmap函數把這些物理空間映射為用戶虛擬地址空間。

虛擬地址空間是通過munmap函數釋放的; 而物理內存的釋放是通過VIDIOC_REQBUFS來實現的(設置參數buf count為(0)),物理內存的釋放是實現特定的,mx51 v4l2是在關閉設備時進行釋放的。

所以二者都是申請連續的物理內存,只是申請和釋放的方式不同


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM