現在、FFMPEG を使用してビデオ プレーヤーを開発しています。YUV420P を Shader で RGB に変換してパフォーマンスへの影響を軽減しようとしていますが、正常に動作することがわかりました。画像サイズを変更しようとすると、問題が発生します。
ケース 1. YUV から RGB への変換は完璧です。しかし、画像はテクスチャ境界に正確には適合しません。たとえば、640x360 のビデオを再生すると、右側 (640-512) の部分がトリミングされ、下部 (512-360) が緑色の四角形で塗りつぶされます。
FRAME_X=512; //This is texture size
FRAME_Y=512;
avpicture_fill((AVPicture *) f, [currentVideoBuffer.data mutableBytes],
enc->pix_fmt,
FRAME_X, FRAME_Y);
av_picture_copy((AVPicture *) f, (AVPicture *) avFrame,
enc->pix_fmt,
enc->width, enc->height);
....
int yuvWidth= FRAME_X ;
int yuvHeight= FRAME_Y;
glBindTexture ( GL_TEXTURE_2D, textureIdY );
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,
yuvWidth, yuvHeight, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, y_channel);
glBindTexture ( GL_TEXTURE_2D, textureIdU );
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,
yuvWidth/2, yuvHeight/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, u_channel);
glBindTexture ( GL_TEXTURE_2D, textureIdV );
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,
yuvWidth/2, yuvHeight/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, v_channel);
ケース 2. 実際の画像サイズをテクスチャ サイズに設定すると、画像はテクスチャに正確にフィットしますが、画像の色が少し変です。緑色が多すぎます。
誰かが私にこれの手がかりを教えてくれますか?? 前もって感謝します。