jpegenc: check _alloc_buffer result and perform fallback alloc if needed
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Fri, 20 Jan 2012 15:44:21 +0000 (16:44 +0100)
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Fri, 20 Jan 2012 16:10:11 +0000 (17:10 +0100)
... rather than carrying on with NULL buffer.

ext/jpeg/gstjpegenc.c

index 98c7e09a94be94733e38adf88b3957798c37af23..c44cb2ea158aa3ec11078003503315ec90ba5b70 100644 (file)
@@ -210,15 +210,23 @@ gst_jpegenc_flush_destination (j_compress_ptr cinfo)
   GstBuffer *overflow_buffer;
   guint32 old_buffer_size;
   GstJpegEnc *jpegenc = (GstJpegEnc *) (cinfo->client_data);
+  GstFlowReturn ret;
+
   GST_DEBUG_OBJECT (jpegenc,
       "gst_jpegenc_chain: flush_destination: buffer too small");
 
   /* Our output buffer wasn't big enough.
    * Make a new buffer that's twice the size, */
   old_buffer_size = GST_BUFFER_SIZE (jpegenc->output_buffer);
-  gst_pad_alloc_buffer_and_set_caps (jpegenc->srcpad,
+  ret = gst_pad_alloc_buffer_and_set_caps (jpegenc->srcpad,
       GST_BUFFER_OFFSET_NONE, old_buffer_size * 2,
       GST_PAD_CAPS (jpegenc->srcpad), &overflow_buffer);
+  /* handle here if needed */
+  if (ret != GST_FLOW_OK) {
+    overflow_buffer = gst_buffer_new_and_alloc (old_buffer_size * 2);
+    gst_buffer_set_caps (overflow_buffer, GST_PAD_CAPS (jpegenc->srcpad));
+  }
+
   memcpy (GST_BUFFER_DATA (overflow_buffer),
       GST_BUFFER_DATA (jpegenc->output_buffer), old_buffer_size);