summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2016-03-11 10:00:39 +0200
committerSebastian Dröge <sebastian@centricular.com>2016-03-11 10:46:10 +0200
commit9132b72c322e0c2f2fec2b8b41f8bb33501e93bb (patch)
tree24410dee79e76266469903fbeb6f1bb4da5999b7
parent4e7797546aa80f3d96bf346f212ba01fb6795b6f (diff)
downloadgstreamer-plugins-bad-9132b72c322e0c2f2fec2b8b41f8bb33501e93bb.tar.gz
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
-rw-r--r--sys/androidmedia/gstamc.c10
-rw-r--r--sys/androidmedia/gstjniutils.c7
2 files changed, 14 insertions, 3 deletions
diff --git a/sys/androidmedia/gstamc.c b/sys/androidmedia/gstamc.c
index 1733ca229..84c91b907 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 786100276..4fe374719 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,