[vlc-commits] mediacodec: Don't return frames before the output format is set

Martin Storsjö git at videolan.org
Sun Sep 22 19:12:16 CEST 2013


vlc | branch: master | Martin Storsjö <martin at martin.st> | Sun Sep 22 20:00:12 2013 +0300| [b8b8f03e002f43ca8de15b6eec88942e891fbcd5] | committer: Martin Storsjö

mediacodec: Don't return frames before the output format is set

The decoder on Sony Xperia Z1 seems to return one frame before
the output format is set (and calling getOutputFormat() at this
point throws an IllegalStateException). Therefore just drop any
frames that are returned before the output format has been set.

Signed-off-by: Martin Storsjö <martin at martin.st>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b8b8f03e002f43ca8de15b6eec88942e891fbcd5
---

 modules/codec/omxil/android_mediacodec.c |    5 +++++
 1 file changed, 5 insertions(+)

diff --git a/modules/codec/omxil/android_mediacodec.c b/modules/codec/omxil/android_mediacodec.c
index c4b712c..792f0ec 100644
--- a/modules/codec/omxil/android_mediacodec.c
+++ b/modules/codec/omxil/android_mediacodec.c
@@ -398,6 +398,11 @@ static void GetOutput(decoder_t *p_dec, JNIEnv *env, picture_t **pp_pic, int loo
         int index = (*env)->CallIntMethod(env, p_sys->codec, p_sys->dequeue_output_buffer,
                                           p_sys->buffer_info, (jlong) 0);
         if (index >= 0) {
+            if (!p_sys->pixel_format) {
+                msg_Warn(p_dec, "Buffers returned before output format is set, dropping frame");
+                (*env)->CallVoidMethod(env, p_sys->codec, p_sys->release_output_buffer, index, false);
+                continue;
+            }
             jobject buf = (*env)->GetObjectArrayElement(env, p_sys->output_buffers, index);
             jsize buf_size = (*env)->GetDirectBufferCapacity(env, buf);
             uint8_t *ptr = (*env)->GetDirectBufferAddress(env, buf);



More information about the vlc-commits mailing list