В Android, как передать предопределенную поверхность в MediaCodec для кодирования?

У меня есть приложение, которое управляет собственным GLSurfaceView, и теперь я хочу использовать Android 4.3.s новая функция MediaCodec, которая принимает Surface в качестве входных данных.

Во всех примерах яКак видно, Surface создается с использованием MediaCodec.createInputSurface (), затем для этой Surface создается контекст GL. Это кажется монолитным и невероятно разрушительным, чтобы перейти на кодовую базу, которая уже стабильна.

Можно ли использовать MediaCodec.configure (format, a_predefined_Surface, null, MediaCodec.CONFIGURE_FLAG_ENCODE) вместо этого? Это позволяет мне использовать MediaCodec в режиме «подключи и работай» и по требованию. Тот факт, что MediaCodec.configure () принимает параметр Surface, указывает на то, что это должно быть возможно. Однако API утверждает, чтоУкажите поверхность, на которой будет отображаться вывод этого декодера. http://developer.android.com/reference/android/media/MediaCodec.html#configure(android.media.MediaFormat, android.view.Surface, android.media.MediaCrypto, int) означает ли это, что это предназначено только дляраскодировать и нешифровать?. Если да, есть ли способ заставить MediaCodec использовать предопределенную поверхность для кодирования?

Поверхность Я 'Передача m уже создана с EGL_RECORDABLE_ANDROID, установленным в true, и возвращенный контекст GL проверен на наличие обязательного атрибута EGL_RECORDABLE_ANDROID. Несмотря на это, MediaCodec.configure () завершается неудачей с бесполезным исключением 'native_window_api_connect вернул ошибку: неверный аргумент (-22) ':

I/ACodec(32383):  Now uninitialized
I/OMXClient(32383): Using client-side OMX mux.
I/ACodec(32383): [OMX.qcom.video.encoder.avc] Now Loaded
E/MediaCodec(32383): native_window_api_connect returned an error: Invalid argument (-22)
W/System.err(32383): java.lang.IllegalStateException
W/System.err(32383):    at android.media.MediaCodec.native_configure(Native Method)
W/System.err(32383):    at android.media.MediaCodec.configure(MediaCodec.java:259)
[...]
W/System.err(32383):    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1520)
W/System.err(32383):    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)

Это от Samsung Galaxy S4 с Android 4.3.

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

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