2016-03-27 17 views
3

短い質問は次のとおりです。CVPixelBufferのピクセル値を扱う数式は何ですか?CVPixelBufferのピクセルを正しくアドレス指定する方法は?

CVPixelBufferをフラットバイト配列に変換しようとしましたが、少し奇妙なことに気付きました。CVPixelBufferCMSampleBufferから取得しています。幅と高さは852x640ピクセルです。合計で545280ピクセルで、2181120バイトがピクセルあたり4バイトを考慮する必要があります。

最初の奇妙なことは、同じCVPixelBuffer864ピクセルのために十分なスペースである行あたり3456バイトを返すということです。それらの追加の12ピクセルはどこから来たのですか?最終画像の1つの行が852ピクセル幅であるが、CVPixelBufferの行に実際に864ピクセルがある場合、どのバイトをコピーする必要があるかをどのように知ることができますか?または、これらのバイトのどれが未使用ですか? Btw、彼らは未使用ですか?

CVPixelBuffersと報告されているデータサイズは、2211848バイトです。 1行あたり3456バイトに640行を掛け合わせると、最終的には2211840バイトになります。もう一度、我々は8の追加バイトを残しています。それらの8バイトの問題は何ですか?彼らは未使用ですか?彼らは終わりですか?

その点についていくつかの洞察を与えるアドバイスは、歓迎します。 ありがとうございます。

答えて

2

内部的に、CMSampleBufferは各ローを16バイトの倍数にパディングしているため、プロセッサの内部128ビット幅のレジスタで効率的にデータをスリングすることができます。それは私の推測です。 rowbytesパラメータと(x、y)を(0,0)〜(851,639)の範囲で使用してピクセルデータにアクセスする場合は、問題は発生しません。

関連する問題