使用Mediacodec和OpenGL-es覆盖帧上的位图

时间:2016-01-27 17:38:42

标签: android opengl-es bitmap mediacodec

我已成功解码视频并根据https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/DecodeEditEncodeTest.java重新编码 它使用基于https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/TextureRender.java

的textureRenderer

现在我想更改de drawFrame函数以覆盖位图。我尝试使用GlUtils.TextSubImage2DGlUtils.TextImage2D,两者都返回GlError = 1280。 我是OpenGl-es的新手,我真的很感激如果有人可以建议我或者告诉我如何叠加位图。我看过这篇文章:http://www.jayway.com/2010/12/30/opengl-es-tutorial-for-android-part-vi-textures/ 但我想我必须将已创建的纹理与GlUtils.TextSubImage2D一起使用。 我应该将渲染器更改为使用GLES20.GL_TEXTURE_2D而不是GLES11Ext.Gl_Texture_External_Oes的{​​{3}}中的帧缓冲区吗?  有人可以帮我吗?感谢

    public void drawFrame(SurfaceTexture st)
    {
        checkGlError("onDrawFrame start");
        st.GetTransformMatrix(mSTMatrix);
        GLES20.GlClearColor(0.0f, 1.0f, 0.0f, 1.0f);
        GLES20.GlClear(GLES20.GlDepthBufferBit | GLES20.GlColorBufferBit);

        // Select the program.
        GLES20.GlUseProgram(mProgram);
        checkGlError("glUseProgram");

        // Set the texture.
        GLES20.GlActiveTexture(GLES20.GlTexture0);
        GLES20.GlBindTexture(GLES11Ext.GlTextureExternalOes, mTextureID);

        mTriangleVertices.Position(TRIANGLE_VERTICES_DATA_POS_OFFSET);
        GLES20.GlVertexAttribPointer(maPositionHandle, 3, GLES20.GlFloat, false,
            TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);
        checkGlError("glVertexAttribPointer maPosition");
        GLES20.GlEnableVertexAttribArray(maPositionHandle);
        checkGlError("glEnableVertexAttribArray maPositionHandle");
        mTriangleVertices.Position(TRIANGLE_VERTICES_DATA_UV_OFFSET);
        GLES20.GlVertexAttribPointer(maTextureHandle, 2, GLES20.GlFloat, false,
            TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);
        checkGlError("glVertexAttribPointer maTextureHandle");

        // Enable the "aPosition" vertex attribute.
        GLES20.GlEnableVertexAttribArray(maTextureHandle);
        checkGlError("glEnableVertexAttribArray maTextureHandle");

        Android.Opengl.Matrix.SetIdentityM(mMVPMatrix, 0);
        // Copy the model / view / projection matrix over.
        GLES20.GlUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);
        GLES20.GlUniformMatrix4fv(muSTMatrixHandle, 1, false, mSTMatrix, 0);

        // Draw the rect.
        GLES20.GlDrawArrays(GLES20.GlTriangleStrip, 0, 4);
        checkGlError("glDrawArrays");

        GLUtils.TexSubImage2D(GLES11Ext.GlTextureExternalOes, 0, 0, 0, bitmap, GLES20.GlRgb, GLES20.GlUnsignedByte);
        //GLUtils.TexImage2D(GLES11Ext.GlTextureExternalOes, 0, bitmap, 0);
        checkGlError("TexSubImage2D"); 


        GLES20.GlFinish();
    }

0 个答案:

没有答案