From 86981eea41485361a6c3f68815dc7004910942ec Mon Sep 17 00:00:00 2001 From: Gwenole Beauchesne Date: Tue, 9 Oct 2012 14:48:00 +0200 Subject: [PATCH] decoder: refine semantics of gst_vaapi_decoder_put_buffer(). Improve the semantics for gst_vaapi_decoder_put_buffer() when an empty buffer is passed on. An empty buffer is a buffer with a NULL data pointer or with a size equals to zero. In this case, that buffer is simply skipped and the function returns TRUE. A NULL buffer argument still marks the end-of-stream. --- gst-libs/gst/vaapi/gstvaapidecoder.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/gst-libs/gst/vaapi/gstvaapidecoder.c b/gst-libs/gst/vaapi/gstvaapidecoder.c index 085b3e0..b8052d3 100644 --- a/gst-libs/gst/vaapi/gstvaapidecoder.c +++ b/gst-libs/gst/vaapi/gstvaapidecoder.c @@ -389,7 +389,10 @@ gst_vaapi_decoder_get_caps(GstVaapiDecoder *decoder) * Queues a #GstBuffer to the HW decoder. The decoder holds a * reference to @buf. * - * Caller can notify an End-Of-Stream with @buf set to %NULL. + * Caller can notify an End-Of-Stream with @buf set to %NULL. However, + * if an empty buffer is passed, i.e. a buffer with %NULL data pointer + * or size equals to zero, then the function ignores this buffer and + * returns %TRUE. * * Return value: %TRUE on success */ @@ -398,7 +401,12 @@ gst_vaapi_decoder_put_buffer(GstVaapiDecoder *decoder, GstBuffer *buf) { g_return_val_if_fail(GST_VAAPI_IS_DECODER(decoder), FALSE); - return push_buffer(decoder, buf ? gst_buffer_ref(buf) : NULL); + if (buf) { + if (!GST_BUFFER_DATA(buf) || GST_BUFFER_SIZE(buf) <= 0) + return TRUE; + buf = gst_buffer_ref(buf); + } + return push_buffer(decoder, buf); } /** -- 2.7.4