v4l打开video设备 ,执行VIDIOC_DQBUF,出现Resource temporarily unavailable 问题
如果你在執(zhí)行VIDIOC_DQBUF突然提示以下錯誤:
error: VIDIOC_DQBUF: Resource temporarily unavailable
那么很可能是你使用非阻塞方式打開設(shè)備文件的造成的。
Resource temporarily unavailable是一種EAGAIN的錯誤。EAGAIN是較常見的一種錯誤(比如用在非阻塞操作中),從字面上來看,是提示再試一次。這個錯誤經(jīng)常出現(xiàn)在當(dāng)應(yīng)用程序進行一些非阻塞(non-blocking)操作(對文件或socket)的時候。例如,以O(shè)_NONBLOCK的標(biāo)志打開文件/socket/FIFO,如果你連續(xù)做read操作而沒有數(shù)據(jù)可讀。此時程序不會阻塞起來等待數(shù)據(jù)準(zhǔn)備就緒返回,read函數(shù)會返回一個錯誤EAGAIN,提示你的應(yīng)用程序現(xiàn)在沒有數(shù)據(jù)可讀請稍后再試。(其實這樣的錯誤一改是可以會略才對,也只有用非阻塞方式打開文件時會出現(xiàn)此類錯誤)。
因此建議 V4L2編程中使用阻塞方式打開一個設(shè)備文件,除非你能保重開始采集數(shù)據(jù)時隊列里的n塊緩存已有數(shù)據(jù)存在。
/
1、建議 V4L2編程中使用阻塞方式打開一個設(shè)備文件,除非你能保重開始采集數(shù)據(jù)時隊列里的n塊緩存已有數(shù)據(jù)存在。
倘若使用非阻塞,則會出現(xiàn)BUG:
VIDIOC_DQBUF failed.
: Resource temporarily unavailable
?
2、視頻格式化測試成功代碼:
struct v4l2_format fmt;//設(shè)置獲取視頻的格式
memset( &fmt, 0, sizeof(fmt));
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;//視頻數(shù)據(jù)流類型,永遠(yuǎn)都是V4L2_BUF_TYPE_VIDEO_CAPTURE
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;//視頻源的格式為JPEG或YUN4:2:2或RGB
fmt.fmt.pix.width = 600;//設(shè)置視頻寬度
fmt.fmt.pix.height = 480;//設(shè)置視頻高度
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;//具體不知道干嘛的,貌似重要
if (ioctl(fd, VIDIOC_S_FMT, &fmt) < 0)//使配置生效
{
printf("set format failed\n");
return -1;
?
?
/* 待續(xù)?*/
}
總結(jié)
以上是生活随笔為你收集整理的v4l打开video设备 ,执行VIDIOC_DQBUF,出现Resource temporarily unavailable 问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机音视频应用开发(专注于Symbian
- 下一篇: MFC改变对话框背景图片实例