flacparse: Request at least the full header size when parsing headers
authorSebastian Dröge <sebastian@centricular.com>
Fri, 24 Nov 2017 08:36:01 +0000 (10:36 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 29 Nov 2017 15:28:25 +0000 (17:28 +0200)
Otherwise baseparse will incrementally send us bigger buffers until the
full header size is reached, which is not only pointless but also means
that baseparse will reallocate and copy into a bigger buffer for every
input buffers. In pull mode that's done in 64kb increments, in push mode
usually in much smaller increments, causing a lot of overhead for
example when parsing high-quality coverart.

gst/audioparsers/gstflacparse.c

index a222429..b1f729c 100644 (file)
@@ -793,6 +793,7 @@ gst_flac_parse_handle_frame (GstBaseParse * parse,
 
     GST_DEBUG_OBJECT (flacparse, "Found metadata block of size %u", size);
     framesize = size;
+    gst_base_parse_set_min_frame_size (GST_BASE_PARSE (flacparse), framesize);
     goto cleanup;
   }
 
@@ -1605,6 +1606,9 @@ gst_flac_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame,
 
       if (res != GST_FLOW_OK)
         goto cleanup;
+    } else {
+      /* Header length */
+      gst_base_parse_set_min_frame_size (GST_BASE_PARSE (flacparse), 4);
     }
 
     /* DROPPED because we pushed already or will push all headers manually */