From 9132b72c322e0c2f2fec2b8b41f8bb33501e93bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 11 Mar 2016 10:00:39 +0200 Subject: [PATCH] amcvideodec: getOutputBuffers() returns a NULL array when a surface was configured So don't error out if it does. https://bugzilla.gnome.org/show_bug.cgi?id=763401 --- sys/androidmedia/gstamc.c | 10 ++++++++-- sys/androidmedia/gstjniutils.c | 7 ++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/sys/androidmedia/gstamc.c b/sys/androidmedia/gstamc.c index 1733ca2290..84c91b9078 100644 --- a/sys/androidmedia/gstamc.c +++ b/sys/androidmedia/gstamc.c @@ -362,7 +362,10 @@ gst_amc_codec_get_output_buffer (GstAmcCodec * codec, gint index, GError ** err) if (!media_codec.get_output_buffer) { g_return_val_if_fail (index < codec->n_output_buffers && index >= 0, NULL); - return gst_amc_buffer_copy (&codec->output_buffers[index]); + if (codec->output_buffers[index].object) + return gst_amc_buffer_copy (&codec->output_buffers[index]); + else + return NULL; } if (!gst_amc_jni_call_object_method (env, err, codec->object, @@ -440,7 +443,10 @@ gst_amc_codec_get_input_buffer (GstAmcCodec * codec, gint index, GError ** err) if (!media_codec.get_input_buffer) { g_return_val_if_fail (index < codec->n_input_buffers && index >= 0, NULL); - return gst_amc_buffer_copy (&codec->input_buffers[index]); + if (codec->input_buffers[index].object) + return gst_amc_buffer_copy (&codec->input_buffers[index]); + else + return NULL; } if (!gst_amc_jni_call_object_method (env, err, codec->object, diff --git a/sys/androidmedia/gstjniutils.c b/sys/androidmedia/gstjniutils.c index 7861002765..4fe3747191 100644 --- a/sys/androidmedia/gstjniutils.c +++ b/sys/androidmedia/gstjniutils.c @@ -1028,12 +1028,17 @@ gst_amc_jni_get_buffer_array (JNIEnv * env, GError ** err, jobject array, jobject buffer = NULL; buffer = (*env)->GetObjectArrayElement (env, array, i); - if ((*env)->ExceptionCheck (env) || !buffer) { + if ((*env)->ExceptionCheck (env)) { gst_amc_jni_set_error (env, err, GST_LIBRARY_ERROR, GST_LIBRARY_ERROR_FAILED, "Failed to get buffer %d", i); goto error; } + /* NULL buffers are not a problem and are happening when we configured + * a surface as input/output */ + if (!buffer) + continue; + (*buffers)[i].object = gst_amc_jni_object_make_global (env, buffer); if (!(*buffers)[i].object) { gst_amc_jni_set_error (env, err, GST_LIBRARY_ERROR,