【发布时间】:2012-05-20 23:34:58
【问题描述】:
目前我正在使用 FFMPEG 开发视频播放器。 我正在尝试通过 Shader 将 YUV420P 转换为 RGB 以减少性能损失,我可以看到它工作正常。问题是我尝试更改图像大小时引起的。
案例 1. YUV to 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。如果我将实际图像大小设置为纹理大小,则图像完全适合纹理,但图像颜色有点奇怪。它有太多的绿色。
有人给我一些线索吗? 提前致谢。
【问题讨论】: