4

これは私の最初の投稿であり、何か助けが得られることを願っています

samsung ok6410ボードとov9650 cmosカメラで組み込みLinuxに取り組んでいます

ビデオをキャプチャしてSDカードに保存する必要があります

ビデオをキャプチャする循環バッファーを使用したいのですが、それがいっぱいになると、新しいデータが古いデータを上書きできるようになります。

発生すると、キャプチャが 10 秒間継続してから停止するフラグがあります。ビデオは SD カードに保存され、フラグを上げる前の 10 秒と上げた後の 10 秒が含まれている必要があります。

v4l2 API仕様の公式サイトのキャプチャ例はこちら

http://free-electrons.com/kerneldoc/latest/video4linux/API.html

しかし、理解できない、または正しく理解しているかどうかわからない点がいくつかあります

  1. この例では、4 つのフレーム バッファがあり、各バッファは 1 つのフレームを保持できます。これは正しいですか?

  2. 70 に初期化される変数 (frame_count) がありますが、これは、このプログラムを終了すると、70 フレームを含むビデオが得られるということですか?

  3. fns (メインループ) と (読み取りフレーム) は何をしますか? 私は彼らが何をすべきかを知っていますが、書かれたコード、ループなどを理解できません..

  4. このコードで fps を調整するにはどうすればよいですか? または、カメラのレジスタに値を書き込む必要がありますか?

  5. ビデオをキャプチャした後、生データで満たされたバッファができます。それを圧縮するか、コーデックを使用して MPEG として保存したいのですが、YUYV の代わりにピクセル形式を圧縮 (MPEG など) に変更できますか? または、ビデオを圧縮するにはどうすればよいですか? コーデックまたは何?

  6. バッファ内のこれらの生データをファイル .yuv に書き込むことはできますか? この形式のビデオを再生できるソフトウェアをいくつか見つけました。

  7. キャプチャしたビデオを保持するために線形バッファーの代わりに循環バッファーを使用することは可能ですか?

投稿が長すぎることはわかっていますが、私は初心者であり、コードを書くのに役立つチュートリアルが見つかりません。

前もって感謝します

4

1 に答える 1

6

リンクしているページは 404 を返しますが、ドキュメントを参照している場合は、このhttps://linuxtv.org/downloads/v4l-dvb-apis/を確認する必要があります。特に、このを確認してください。やりたいことの出発点。

あなたが参照しているコードを推測したと思うので、私はあなたの質問に答えようとします

  1. 4 つのフレーム バッファは、ダブル バッファリングを行うために使用されます。つまり、フレームをキューから取り出して操作する一方で、他のフレームはビデオ入力によって満たされます。
  2. 私がリンクした例のようであれば、いいえ、入力から 70 フレームを取得して終了します。
  3. read_frame は、バッファからフレームをデキューして、それを操作し、完了したらキューに再度追加できるようにします。
  4. fps を調整するには、何もせずにフレームをドライバにデキューおよび再キューする必要があります。fps の変更は、フレーム スキップによって行われます。
  5. 一般的に言えば、ドライバーとエンコーダーに依存します。ドライバーとエンコーダーの両方でサポートされているビデオ形式 (V4L2_PIX_FMT_YUYV など) を見つける必要があります。存在しない場合は、独自の色空間変換ルーチンを作成する必要があります。
  6. もちろん!私はよくこれをします。
  7. 質問がわかりません。
于 2012-03-07T16:55:16.457 に答える