私はwebmビデオに変換する必要があるjpgの束を生成するアプリを持っています。jpegからvpxencサンプルにrgbデータを取得しようとしています。出力ビデオの元のjpgから基本的な形状を見ることができますが、すべてが緑色に着色されており(黒であるはずのピクセルでさえ、約半分の緑色です)、他のすべてのスキャンラインにはゴミが含まれています。
VPX_IMG_FMT_YV12データをフィードしようとしています。これは、次のように構成されていると想定しています。
フレームごとに8ビットYデータ各2x2Vブロックの8ビット平均各2x2Uブロックの8ビット平均
これがソース画像と出てくるビデオのスクリーンショットです:
RGB-> YV12変換を誤って行っている可能性は十分にありますが、8ビットのYデータのみをエンコードしてUブロックとVブロックを0に設定しても、ビデオはほぼ同じように見えます。私は基本的に次の式でRGBデータを実行しています。
// (R, G, and B are 0-255)
float y = 0.299f*R + 0.587f*G + 0.114f*B;
float v = (R-y)*0.713f;
float u = (B-v)*0.565f;
..次に、vpxencに書き込むUおよびVの2x2フィルター処理された値を生成するには、(a + b + c + d)/ 4を実行します。ここで、a、b、c、dはのUまたはV値です。各2x2ピクセルブロック。
だから私は疑問に思っています:
RGBデータを取得してvpx_codec_encodeにフィードして素敵なwebmビデオを取得する(コード内の)簡単な方法はありますか?
RGB-> YV12変換がどこか間違っていますか?
どんな助けでも大歓迎です。