Libavを使用してWindowsプラットフォームでDirectShowが行うのと同じ数のカメラタイプからフレームをキャプチャする方法はありますか?DirectShowフィルターを使用せずにカメラ出力をキャプチャする必要があり、アプリケーションを多くの種類のカメラデバイスで動作させたいです。
libavのこの機能についてインターネットで検索したところ、特別な入力形式「vfwcap」を使用してlibav経由で実行できることがわかりました。そのようなもの(コードの正確さについてはわかりません-私は自分で書いた):
AVFormatParameters formatParams = NULL;
AVInputFormat* pInfmt = NULL;
pInFormatCtx* pInFormatCtx = NULL;
av_register_all();
//formatParams.device = NULL; //this was probably deprecated and then removed
formatParams.channel = 0;
formatParams.standard = "ntsc"; //deprecated too but still available
formatParams.width = 640;
formatParams.height = 480;
formatParams.time_base.num = 1000;
formatParams.time_base.den = 30000; //so we want 30000/1000 = 30 frames per second
formatParams.prealloced_context = 0;
pInfmt = av_find_input_format("vfwcap");
if( !pInfmt )
{
fprintf(stderr,"Unknown input format\n");
return -1;
}
// Open video file (formatParams can be NULL for autodetecting probably)
if (av_open_input_file(&pInFormatCtx, 0, pInfmt, 0, formatParams) < 0)
return -1; // Couldn't open device
/* Same as video4linux code*/
つまり、もう1つの質問は、Libavでサポートされているデバイスの数です。Windowsでlibavを使用して出力されたカメラのキャプチャについて私が見つけたのは、libavがサポートするデバイスが少なすぎるため、この目的でDirectShowを使用することをお勧めすることだけです。おそらく状況はすでに変化しており、本番アプリケーションで使用するのに十分なデバイスをサポートしていますか?
これが不可能な場合..まあ、私の質問が役に立たないことを願っています。これは、さまざまなソースのコードから構成されており、このテーマに興味のある人に役立つでしょう。