2012-02-16 24 views
0

キャプチャカードから受け取った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をたくさんしてよろしく、

バレンティン

答えて

0

(、私は効果的なフレームレートであることを前提としている:これは私が今まで持っているものです)デュアル1920x1080 12ビット/ 10 fpsをファイルに書き込んでいますか?これは毎秒60メガバイトで、HDDの書き込み容量の上限に達している可能性があります。

あなたのHDDが十分に強力でない場合、別のAPIを選択することは役に立ちません。データを圧縮するか、解像度またはFPSを低くする必要があります。または、より高速なドライブを使用してください。

+0

時には単純な解決策が最高です^^。ありがとう。 RAIDを使用することで問題は解決します。よろしく – user1213697

関連する問題