2012-03-28 5 views
3

に取得します。ループでフレームを取得し、その結果としてAVFrameを取得するffmpegでデコードします。ffmpeg AVFrameは、完全なデコード済みデータをchar *

フレームの必要なピクセルデータをchar *に取得し、コールバック関数のパラメータとして与える必要があります。では、このようなchar *配列をどのようにgenereteできますか?

for(y=0; y<height; y++) { fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, width*3, pFile);}

またはこのような何か:インターネットでは、私は、次のようないくつかの例を見ました。本当ですか?そしてどのサイズが私のchar *でしょうか?私は、幅* 3 *高さバイトを記述していますか?

+0

フレームのフォーマットによって異なります。それはどのフォーマットですか? – mattjgalloway

答えて

2
for(y=0; y<height; y++) { 
    fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, width*3, pFile); 
} 

はい正しいです。
これは、AVFrame->データポインタから3バイト/ピクセル(おそらくはRGB)の行を書き込んでいます。

ps。このようにする理由は、データの各行の開始が新しい4バイトのメモリ境界から始まるからです。コンピュータは32ビット(4バイト)の倍数でメモリにアクセスする方が効率的です。 ピクセルサイズ(3バイト)と幅が4の倍数でない場合は、単にwidth*height*3バイトのデータをコピーするのではなく、これを行う必要があります。

+0

私はそれがピクセルデータのPPM形式であると理解していました。たとえば、フルピクセルデータをbmpに保存するにはどうしたらいいですか? – mmmaaak

+0

@ mmmaaak - PPMは直接書き込むのが最も簡単な形式です。 BMPは本質的に同じですが、より複雑なヘッダーを使用しています。ウィンドウ上にある場合、libにはすでにbmpsを書き込むコードが含まれていますが、msdnを検索してください。 –

+0

関連の回答:http://stackoverflow.com/questions/1047200/extract-rgb-values -from-a-avframe-ffmpeg-in-c – Nav

関連する問題