私は次のコードを使用していたデータアウト:
構造体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が復帰する前に存在しているとき、私たちは私たちが得るデータを持っている子を削除すると、エラーは発生しません。