看網上的程式,使用v4l2框架時,buffer的數量基本上都是三個,這個有沒有理論支撐啊。如果設定成一個,會有什么結果呢?對于buffer對列原理不太理解,有沒有大神指導一下啊?
uj5u.com熱心網友回復:
這個buf在驅動里用來裝影像資料,驅動處資料存完會才可以出隊,1個buf,出隊后,驅動就沒有buf可以裝影像資料了。而且這個buf是用物理記憶體的,不可以使用太多,至少要保證>=2, 方便用戶程式和驅動使用。
uj5u.com熱心網友回復:
輸入對列中如果沒有buffer會產生什么后果?是視頻流卡住嗎,當我將那一個buffer重新入隊,是不是又能接著存資料?
uj5u.com熱心網友回復:
佇列中沒有buf的話,需要看你你打開設備時是否使用了非阻塞模式O_NONBLOCK,如果使用了,就會不會阻塞,程式直接回傳-EAGAIN,如果沒有的話,就會阻塞呼叫。
如果有興趣可以下個linux內核代碼看看這部分的功能在內核代碼的如下位置,對應的ioctrl為
VIDIOC_REQBUFS,
VIDIOC_QUERYBUF,
VIDIOC_QBUF,
VIDIOC_DQBUF,
內核實作部分可以參考下面代碼的具體實作:
drivers/media/v4l2-core/v4l2-ioctl.c
drivers/media/platform/s3c-camif/camif-capture.c
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/92918.html
標籤:驅動開發/核心開發
上一篇:藍屏代碼
