日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

DM6467之视频采集(Linux)下MMAP

發(fā)布時(shí)間:2023/12/10 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DM6467之视频采集(Linux)下MMAP 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

做dsp6467是在linux下做視頻采集,僅ARM端

一共有三種視頻采集方式

  1)使用read、write方式:直接使用 read 和 write 函數(shù)進(jìn)行讀寫。這種方式最簡單,但是這種方式會(huì)在用戶空間和內(nèi)核空間不斷拷貝數(shù)據(jù) ,同時(shí)在用戶空間和內(nèi)核空間占用 了 大量內(nèi)存,效率不高。
  2)內(nèi)存映射方式(mmap):把設(shè)備里的內(nèi)存映射到應(yīng)用程序中的內(nèi)存控件,直接處理設(shè)備內(nèi)存,這是一種有效的方式。上面的mmap函數(shù)就是使用這種方式。
  3)用戶指針模式內(nèi)存由用戶空間的應(yīng)用程序分配并把地址傳遞到內(nèi)核中的驅(qū)動(dòng)程序然后由 v4l2 驅(qū)動(dòng)程序直接將數(shù)據(jù)填充到用戶空間的內(nèi)存中。這點(diǎn)需要在v4l2_requestbuffers里將memory字段設(shè)置成V4L2_MEMORY_USERPTR。
  第一種方式效率是最低的,后面兩種方法都能提高執(zhí)行的效率,但是對(duì)于mmap 方式,文檔中有這樣一句描述 –Remember the buffers are allocated in physical memory, as opposed to virtual memory which can be swapped out to disk。 Applications should free the buffers as soon as possible with the munmap () function 。(使用mmap方法的時(shí)候,buffers相當(dāng)于是在內(nèi)核空間中分配的,這種情況下,這些buffer是不能被交換到虛擬內(nèi)存中,雖然這種方法不怎么影響讀寫效率,但是它一直占用著內(nèi)核空間中的內(nèi)存,當(dāng)系統(tǒng)的內(nèi)存有限的時(shí)候,如果同時(shí)運(yùn)行有大量的進(jìn)程,則對(duì)系統(tǒng)的整體性能會(huì)有一定的影響。)

  所以,對(duì)于三種視頻采集方式的選擇,推薦的順序是 userptr 、 mmap 、 read-write 。當(dāng)使用 mmap 或 userptr 方式的時(shí)候,有一個(gè)環(huán)形緩沖隊(duì)列的概念,這個(gè)隊(duì)列中,有 n 個(gè) buffer ,驅(qū)動(dòng)程序采集到的視頻幀數(shù)據(jù),就是存儲(chǔ)在每個(gè) buffer 中。在每次用 VIDIOC_DQBUF 取出一個(gè) buffer ,并且處理完數(shù)據(jù)后,一定要用 VIDIOC_QBUF 將這個(gè) buffer 再次放回到環(huán)形緩沖隊(duì)列中。環(huán)形緩沖隊(duì)列,也使得這兩種視頻采集方式的效率高于直接 read/write 。

但在用mmap是要注意關(guān)閉線程是才可訪問 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的DM6467之视频采集(Linux)下MMAP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。