diff options
author | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2012-01-20 16:44:21 +0100 |
---|---|---|
committer | Tim-Philipp Müller <tim.muller@collabora.co.uk> | 2012-01-23 18:20:43 +0000 |
commit | ef835476b46f99f8870b6bbfc9dfc5d1abfee21f (patch) | |
tree | d7ad3c3dbe66694ffbbea9ee8c0646fb83c8d9e4 | |
parent | b8107274f546cbc18de15915744ef3c968037172 (diff) |
jpegenc: check _alloc_buffer result and perform fallback alloc if needed
... rather than carrying on with NULL buffer.
-rw-r--r-- | ext/jpeg/gstjpegenc.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/ext/jpeg/gstjpegenc.c b/ext/jpeg/gstjpegenc.c index 98c7e09a9..c44cb2ea1 100644 --- a/ext/jpeg/gstjpegenc.c +++ b/ext/jpeg/gstjpegenc.c @@ -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); |