2016-10-13 70 views
0

如何將圖像作爲紋理加載並通過GLES渲染以使用MediaCodec Surface輸入方法?Android圖像到視頻

我是從EncodeAndMuxTest例子開始的。

預先感謝您。

回答

0

看從grafika樣品,它會給你見識一下,你應該做的如何

下面是代碼爲位圖加載到紋理

int mTextureId = -1; 

public void loadTexture(Bitmap bitmap) 
{ 
    if (mTextureId != -1) { 
     int[] textureHandle = new int[1]; 

     GLES20.glGenTextures(1, textureHandle, 0); 


     GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureId); 

     GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, 
      GLES20.GL_TEXTURE_MIN_FILTER, 
      GLES20.GL_NEAREST); 
     GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, 
      GLES20.GL_TEXTURE_MAG_FILTER, 
      GLES20.GL_LINEAR); 
     GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, 
      GLES20.GL_TEXTURE_WRAP_S, 
      GLES20.GL_CLAMP_TO_EDGE); 
     GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, 
      GLES20.GL_TEXTURE_WRAP_T, 
      GLES20.GL_CLAMP_TO_EDGE); 
    } else { 
     GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureId); 
    } 

    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); 
} 

,這裏是你如何渲染它inputsurface

// Create Fullframe rectangle (a class from grafika), 
mInputSurface.makeCurrent(); 
mFullFrameRect = new FullFrameRect(new Texture2dProgram(Texture2dProgram.ProgramType.TEXTURE_2D)); 

.... 


// And when you want to draw it 
mInputSurface.makeCurrent(); // if its not already current 
loadTexture(bitmap); 
GLES20.glViewport(0, 0, viewWidth, viewHeight); 
mFullFrameRect.drawFrame(mTextureId, GlUtil.IDENTITY_MATRIX); 
mInputSurface.setPresentationTime(pts); 
mInputSurface.swapBuffers(); 

FullFrameRectTexture2dProgramGlUtil來自Grafika類,所以你應該COP y它或自己實現類似的功能

+0

感謝您的迴應。看起來我在一個很好的方式,我嘗試了你的解決方案,但我仍然得到一個黑屏視頻。我不明白我需要一個GLSurfaceView來渲染圖像紋理?謝謝 – Siv

+0

好的。我能夠轉換我的圖像。 tI是我的錯,Egl上下文的配置錯誤。再次感謝你的幫助。 – Siv

+0

@Siv將有助於瞭解您的解決方案 –