From efff57d49746b37100f5137ed55fccd6399774e4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Wed, 17 Oct 2012 10:55:01 +0100 Subject: [PATCH] videodecoder: return NULL from _allocate_output_buffer() if alloc fails .. instead of garbage pointer. Also log failure in debug log. Should've returned the flow return like _allocate_output_frame(). https://bugzilla.gnome.org/show_bug.cgi?id=683098 --- gst-libs/gst/video/gstvideodecoder.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c index 4292a9c..9e830ff 100644 --- a/gst-libs/gst/video/gstvideodecoder.c +++ b/gst-libs/gst/video/gstvideodecoder.c @@ -3032,11 +3032,16 @@ gst_video_decoder_negotiate (GstVideoDecoder * decoder) * Helper function that allocates a buffer to hold a video frame for @decoder's * current #GstVideoCodecState. * - * Returns: (transfer full): allocated buffer + * You should use gst_video_decoder_allocate_output_frame() instead of this + * function, if possible at all. + * + * Returns: (transfer full): allocated buffer, or NULL if no buffer could be + * allocated (e.g. when downstream is flushing or shutting down) */ GstBuffer * gst_video_decoder_allocate_output_buffer (GstVideoDecoder * decoder) { + GstFlowReturn flow; GstBuffer *buffer; GST_DEBUG ("alloc src buffer"); @@ -3047,10 +3052,16 @@ gst_video_decoder_allocate_output_buffer (GstVideoDecoder * decoder) && gst_pad_check_reconfigure (decoder->srcpad)))) gst_video_decoder_negotiate (decoder); - gst_buffer_pool_acquire_buffer (decoder->priv->pool, &buffer, NULL); + flow = gst_buffer_pool_acquire_buffer (decoder->priv->pool, &buffer, NULL); GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); + if (flow != GST_FLOW_OK) { + GST_INFO_OBJECT (decoder, "couldn't allocate output buffer, flow %s", + gst_flow_get_name (flow)); + buffer = NULL; + } + return buffer; } -- 2.7.4