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
This commit is contained in:
Tim-Philipp Müller 2012-10-17 10:55:01 +01:00
parent 4834e11da0
commit efff57d497

View file

@ -3032,11 +3032,16 @@ gst_video_decoder_negotiate (GstVideoDecoder * decoder)
* Helper function that allocates a buffer to hold a video frame for @decoder's * Helper function that allocates a buffer to hold a video frame for @decoder's
* current #GstVideoCodecState. * 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 * GstBuffer *
gst_video_decoder_allocate_output_buffer (GstVideoDecoder * decoder) gst_video_decoder_allocate_output_buffer (GstVideoDecoder * decoder)
{ {
GstFlowReturn flow;
GstBuffer *buffer; GstBuffer *buffer;
GST_DEBUG ("alloc src 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_pad_check_reconfigure (decoder->srcpad))))
gst_video_decoder_negotiate (decoder); 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); 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; return buffer;
} }