V4L2の問題に起因

私は次のコードを使用していたデータアウト:

構造体v4l2_bufferのBUF。
memset(&BUF、0はsizeof (BUF))。
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE。
buf.memory = V4L2_MEMORY_MMAP。

もし(IOCTL(FD、VIDIOC_DQBUF、&BUF)== - 1 
{ 
のprintf(" VIDIOC_DQBUFが\ nを失敗" )。
返す - 10 
} 
のprintf(" VIDIOC_DQBUF成功する\ n ");

 

結果はのioctlリターン-1を実行してきた、我々は問題を解決することができませんでした

しかし、私はこの問題を解決するために、この中に試験用に選択し追加する前にステップするとき

FD_SET FDS;
ストラクト体timevalテレビを。
FD_ZERO( FDS)。
FD_SET(FD、 FDS)。
tv.tv_sec = 2 
tv.tv_usec = 0 ;
int型のRET; 
RET = セレクト(FD + 1、およびFDS、NULL、NULL、&TV);

 

この時間遅延は、データFDが存在するか否かを検出するために、上記のコードに設定されたデータがある場合、選択が返すFD、そうでなければ選択が待って、そこにブロックされています。

これは、前の問題を解決同様、すぐに1つのフレームのデータを取得するのioctlを使用して、データを取得すると、カメラが起動する前に、問題があるが、メッセージキューは、この時点ではそれほどのioctlリターンをしていない-1、問題は、コマンドは失敗します

selectを使用して、データFDが復帰する前に存在しているとき、私たちは私たちが得るデータを持っている子を削除すると、エラーは発生しません。

おすすめ

転載: www.cnblogs.com/yangjiquan/p/11369472.html