Iphone 在iOS 5.0中使用ffmpeg和OpenGL反向显示徽标和字幕

Iphone 在iOS 5.0中使用ffmpeg和OpenGL反向显示徽标和字幕,iphone,ios,opengl-es,ios5,ffmpeg,Iphone,Ios,Opengl Es,Ios5,Ffmpeg,我正在使用ffmpeg在iOS 5.0上播放视频。在我的应用程序中使用ffmpeg解码视频帧,并使用OpenGL显示它 但我有个问题,我没有解决。视频图像的图标和字幕以相反的方式显示。我认为这就是渲染OpenGL 2.0或ffmpeg解码的问题 你能告诉我出了什么问题吗?我怎样才能解决它 非常感谢 编辑:我使用以下内容更改我的prepareTExture方法: - (void) prepareTextureW: (GLuint) texW textureHeight: (GLuint) texH

我正在使用ffmpeg在iOS 5.0上播放视频。在我的应用程序中使用ffmpeg解码视频帧,并使用OpenGL显示它

但我有个问题,我没有解决。视频图像的图标和字幕以相反的方式显示。我认为这就是渲染OpenGL 2.0或ffmpeg解码的问题

你能告诉我出了什么问题吗?我怎样才能解决它

非常感谢

编辑:我使用以下内容更改我的prepareTExture方法:

- (void) prepareTextureW: (GLuint) texW textureHeight: (GLuint) texH frameWidth: (GLuint) frameW frameHeight: (GLuint) frameH {

float aspect = (float)frameW/(float)frameH;
float minX=-1.f, minY=-1.f, maxX=1.f, maxY=1.f;
float scale ;
if(aspect>=(float)backingHeight/(float)backingWidth){
    // Aspect ratio will retain width.
    scale = (float)backingHeight / (float) frameW;
    maxY = ((float)frameH * scale) / (float) backingWidth;
    minY = -maxY;
} else {
    // Retain height.
    scale = (float) backingWidth / (float) frameW;
    maxX = ((float) frameW * scale) / (float) backingHeight;
    minX = -maxX;
}
if(frameTexture) glDeleteTextures(1, &frameTexture);
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &frameTexture);
glBindTexture(GL_TEXTURE_2D, frameTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texW, texH, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, NULL);          


 verts[0] = maxX;           
  verts[1] = maxY;
  verts[2] = minX;      
  verts[3] = maxY;
  verts[4] = maxX;  
  verts[5] = minY;
  verts[6] = minX;    
  verts[7] = minY;

float s = (float) frameW / (float) texW;
float t = (float) frameH / (float) texH;             

texCoords[0] = 0.f;        texCoords[1] = 1.f;
texCoords[2] = 1;          texCoords[3] = 1.f;
texCoords[4] = 0.f;        texCoords[5] =0;
texCoords[6] = 1;          texCoords[7] =0;

mFrameH = frameH;
mFrameW = frameW;
mTexH = texH;
mTexW = texW;
maxS = s;
maxT = t;

// Just supporting one rotation direction, landscape left.  Rotate Z by 90 degrees.
matSetRotZ(&rot,M_PI_2);

matMul(&mvp, &rot, &rot);
[self setupShader];    
}

现在这是我的结果:

但我有个问题,我没有解决。视频图像的图标和字幕以相反的方式显示

整个图像是镜像的,而不仅仅是连锁标志和字幕。我觉得纹理坐标不对。你能把你的图纸代码贴出来吗

由于问题更新而编辑 我首先要了解你在那里做什么,这太复杂了。只需使用纹理坐标0和1,不要试图通过计算一些s,t来超越自己。下一步。不要使用透视投影,除非您确定要以透视方式渲染某些内容


关于你最初的问题。OpenGL假定图像的原点位于左下角,而大多数视频格式将原点置于左上角。您所做的是旋转图片,但这会使其竖直,但会使其保持镜像。相反,您希望沿T纹理坐标镜像它,这很容易通过使用T的负值来实现。

daterwolf,谢谢您的回答。的确,整个图像都是镜像的。我用opengl方法编辑我的问题。你能告诉我怎么了吗?谢谢,daterwolf,再次感谢。我更改了坐标并删除了透视投影。我已经做了一千次顶点和坐标的改变。现在,整个图像没有镜像。但是图像非常小。你知道吗?。你可以在帖子的新链接中看到结果。非常感谢。