Изображение Android в видео

Как я могу загрузить изображение как текстуру и визуализировать его через GLES, чтобы использовать подход ввода MediaCodec Surface?

Я начал с примера EncodeAndMuxTest.

Заранее спасибо.


person Siv    schedule 13.10.2016    source источник


Ответы (1)


Взгляните на образец из 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);
 }

и вот как вы можете отобразить его на inputurface

// 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();

FullFrameRect, Texture2dProgram, GlUtil - это классы от Grafika, поэтому вам следует скопировать их или реализовать аналогичные функции самостоятельно.

person jfawkes    schedule 14.10.2016
comment
Спасибо за ваш ответ. Кажется, у меня все в порядке, я пробовал ваше решение, но все равно получаю черный экран. Я не понимаю, нужен ли мне GLSurfaceView для рендеринга текстуры изображения? Спасибо - person Siv; 17.10.2016
comment
Ok. Я смог преобразовать свое изображение. Я был виноват, неправильная конфигурация для контекста Egl. Еще раз спасибо за вашу помощь. - person Siv; 17.10.2016
comment
@Siv было бы полезно узнать, каково ваше решение - person Gabriel Sanmartin; 18.05.2017