現在、私はFFMPEGを使ってビデオプレーヤーを開発しています。 私はYUV420PをShaderでRGBに変換しようとしていますが、パフォーマンスが低下するため、正常に動作することがわかります。この問題は、イメージサイズを変更しようとすると発生します。YUV to RGB by Shader on iPhone
ケース1. YUVからRGBに最適です。イメージはTexture Boundsに正確には適合しません。 たとえば、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.私は、テクスチャサイズに実際の画像サイズを設定すると、画像はテクスチャに正確に適合しているが、画像の色が少し奇妙です。緑色が多すぎます。
誰も私にこれのためのいくつかの手がかりを与えていますか? ありがとうございます。
ああ、ありがとうございます。私はちょうどあなたの答えを直前に見た。ありがとうございました。 – user1333656