@ user924 нет, к сожалению: | Самый простой способ для этого - FFmpeg или BigFlake от Google

пример того, как визуализировать растровое изображение на поверхность, предоставляемую MediaCodec, чтобы я мог кодировать, а затем объединить их в MP4-видео.

Самый близкий хорошо известный пример, который я вижу, этоEncodeAndMuxTest, К сожалению, благодаря моим ограниченным знаниям OpenGL я не смог преобразовать пример для использования растровых изображений вместо необработанных кадров OpenGL, которые он генерирует в настоящее время. Вот пример метода генерирования кадров.

private void generateSurfaceFrame(int frameIndex) {

    frameIndex %= 8;
    int startX, startY;
    if (frameIndex < 4) {
        // (0,0) is bottom-left in GL
        startX = frameIndex * (mWidth / 4);
        startY = mHeight / 2;
    } else {
        startX = (7 - frameIndex) * (mWidth / 4);
        startY = 0;
    }

    GLES20.glClearColor(TEST_R0 / 255.0f, TEST_G0 / 255.0f, TEST_B0 / 255.0f, 1.0f);
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);

    GLES20.glEnable(GLES20.GL_SCISSOR_TEST);
    GLES20.glScissor(startX, startY, mWidth / 4, mHeight / 2);
    GLES20.glClearColor(TEST_R1 / 255.0f, TEST_G1 / 255.0f, TEST_B1 / 255.0f, 1.0f);
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    GLES20.glDisable(GLES20.GL_SCISSOR_TEST);
}

Может кто-нибудь показать мне, как изменить это, чтобы вместо этого отобразить растровое изображение или указать мне пример, который делает это? Я предполагаю, что это все, что мне нужно сделать, чтобы получить растровые изображения для рендеринга на поверхность (но я могу ошибаться).

Редактировать: это метод, который я заменил generateSurfaceFrame, который пока не создает никаких входных данных на поверхность кодера:

private int generatebitmapframe()
{
    final int[] textureHandle = new int[1];

    try {

        int id = _context.getResources().getIdentifier("drawable/other", null, _context.getPackageName());

        // Temporary create a bitmap
        Bitmap bmp = BitmapFactory.decodeResource(_context.getResources(), id);

        GLES20.glGenTextures(1, textureHandle, 0);

        if (textureHandle[0] != 0)
        {
            // Bind to the texture in OpenGL
            GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureHandle[0]);

            // Set filtering
            GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
            GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);

            // Load the bitmap into the bound texture.
            GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0);
        }

        if (textureHandle[0] == 0)
        {
            throw new RuntimeException("Error loading texture.");
        }

        //Utils.testSavebitmap(bmp, new File(OUTPUT_DIR, "testers.bmp").getAbsolutePath());
    }
    catch (Exception e) { e.printStackTrace(); }

    return textureHandle[0];
}

Ответы на вопрос(0)

Ваш ответ на вопрос