return TRUE;
}
+#define MAX_BUFFER_SIZE 4096
+
static GstFlowReturn
gst_wavparse_stream_headers (GstWavParse * wav)
{
wav->state = GST_WAVPARSE_DATA;
+ /* determine reasonable max buffer size,
+ * that is, buffers not too small either size or time wise
+ * so we do not end up with too many of them */
+ /* var abuse */
+ upstream_size = 0;
+ gst_wavparse_time_to_bytepos (wav, 40 * GST_MSECOND, &upstream_size);
+ wav->max_buf_size = upstream_size;
+ wav->max_buf_size = MAX (wav->max_buf_size, MAX_BUFFER_SIZE);
+ if (wav->blockalign > 0)
+ wav->max_buf_size -= (wav->max_buf_size % wav->blockalign);
+
+ GST_DEBUG_OBJECT (wav, "max buffer size %d", wav->max_buf_size);
+
return GST_FLOW_OK;
/* ERROR */
}
}
-#define MAX_BUFFER_SIZE 4096
-
static GstFlowReturn
gst_wavparse_stream_data (GstWavParse * wav)
{
* amounts of data regardless of the playback rate */
desired =
MIN (gst_guint64_to_gdouble (wav->dataleft),
- MAX_BUFFER_SIZE * wav->segment.abs_rate);
+ wav->max_buf_size * wav->segment.abs_rate);
if (desired >= wav->blockalign && wav->blockalign > 0)
desired -= (desired % wav->blockalign);