Android图片到视频

时间:2016-10-13 14:25:25

标签: android opengl-es mediacodec mediamuxer

如何将图像作为纹理加载并通过GLES渲染以使用MediaCodec Surface输入法?

我是从EncodeAndMuxTest示例开始的。

提前谢谢。

1 个答案:

答案 0 :(得分: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的课程,因此您应该自行复制或实施类似的功能