jpegdec: Avoid unnecessary processing until we have a full picture.
authorEdward Hervey <bilboed@bilboed.com>
Thu, 3 Sep 2009 15:33:28 +0000 (17:33 +0200)
committerEdward Hervey <bilboed@bilboed.com>
Thu, 3 Sep 2009 15:40:20 +0000 (17:40 +0200)
This is for non-packetized mode, when we know the upstream size in bytes.

ext/jpeg/gstjpegdec.c

index a7312ba..e040342 100644 (file)
@@ -872,6 +872,18 @@ gst_jpeg_dec_chain (GstPad * pad, GstBuffer * buf)
   }
   buf = NULL;
 
+  /* If we are non-packetized and know the total incoming size in bytes,
+   * just wait until we have enough before doing any processing. */
+
+  if (!dec->packetized && (dec->segment.format == GST_FORMAT_BYTES) &&
+      (dec->segment.stop != -1) &&
+      (GST_BUFFER_SIZE (dec->tempbuf) < dec->segment.stop)) {
+    /* We assume that non-packetized input in bytes is *one* single jpeg image */
+    GST_DEBUG ("Non-packetized mode. Got %d bytes, need %d",
+        GST_BUFFER_SIZE (dec->tempbuf), dec->segment.stop);
+    goto need_more_data;
+  }
+
   if (!gst_jpeg_dec_ensure_header (dec))
     goto need_more_data;