キャプチャカードから受け取った4:2:0の生データの一部をAVIファイルに書き込もうとしています。すべてのピクセルに対して、charバッファには2バイト(16ビット)が格納されます。データの順序は、FOURCC UYVY:YUV 4:2:2と同じです(各ピクセルでYサンプル、各ラインで水平ピクセルごとにUとVがサンプリングされます)。マクロピクセルは、1つのu_int32に2つのピクセルを含みます。4:2:0 YUV-RawdataをC++のDirectShow経由でAVIファイルに書き込む
まず、私はOpenCV Videowriterを試しました。しかし、この膨大な量のビデオデータ(これは2つのビデオストリームをキャプチャしていますが、それぞれが1080p25形式です)ではこれが遅すぎるため、Windowsの「Video for Windows」ライブラリに切り替えました。しかし、このファイルでさえ、リアルタイムでファイルの書き込みを進めません。私の最後のチャンスはDirectshowです。私は、AVI MuxとFile Writer Filtersを使って生データをAVIファイルとして保存したいのですが、AVI Muxに生データ(文字配列)を "与える" UYVYオーダー、オーディオなし。多分あなたは私に助言を与えることができます。あなたが前の質問で10件のfpsを述べたように
CoInitialize(NULL);
IGraphBuilder*pGraph= NULL;
CoCreateInstance(CLSID_FilterGraph, NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder, (void **)&pGraph);
IMediaControl*pMediaControl= NULL;
pGraph->QueryInterface(IID_IMediaControl,(void **)&pMediaControl);
ICaptureGraphBuilder2 *pCapture= NULL;
CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL,CLSCTX_INPROC,IID_ICaptureGraphBuilder2, (void **)&pCapture);
IBaseFilter *pMux;
pCapture->SetOutputFileName(&MEDIASUBTYPE_Avi,L"Test.avi",&pMux,NULL);
IBaseFilter *pCap;
pCapture->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,pCap,NULL,pMux);
Thxをたくさんしてよろしく、
バレンティン
時には単純な解決策が最高です^^。ありがとう。 RAIDを使用することで問題は解決します。よろしく – user1213697