iOS 5.0でffmpegとOpenGLを使用して逆のロゴと字幕を作成する

私は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];    

}

And now this is my result: link image

0

1 答え

しかし、私はそれを解決しないという問題があります。ビデオ画像の鎖のロゴと字幕が逆に表示されます。

チェーン全体のロゴや字幕だけでなく、画像全体が反映されます。私に間違ったテクスチャ座標のように見えます。あなたの描画コードを掲載してください。

質問の更新による編集

Phew I first had to understand what you do there, it's overly complicated. Just use texture coordinates 0 and 1, don't try to outsmart yourself by calculating some s, t. Next step. Don't use a perspective projection, unless you indend to render something in perspective.

あなたの元の問題に。 OpenGLは、画像の原点を左下に置き、ほとんどのビデオ形式は原点を左上に置きます。あなたがしたことは、写真を回転させることでしたが、これは直立させますが、それは鏡のままになります。その代わりに、Tのテクスチャ座標に沿ってミラーリングする必要があります。これは、tに負の値を使用することで簡単に実行できます。

2
追加された
daterwolf、あなたの答えをありがとう。画像全体が鏡に映っているのは事実です。 OpenGLメソッドで質問を編集します。何が間違っているのか教えていただけますか?ありがとう、
追加された 著者 resident_,
daterwolf、ありがとう。座標を変更して透視投影を削除しました。私は頂点と座標の千の変更を行った。今度は画像全体が鏡映されません。しかし、イメージは非常に小さいです。あなたはそれが分かっていますか?よ、ポストの新しいリンクの結果を見ることができます。どうもありがとう。
追加された 著者 resident_,