diff --git a/gst/playback/gstplaybasebin.c b/gst/playback/gstplaybasebin.c index 66ae4c1fc8..6239bf251d 100644 --- a/gst/playback/gstplaybasebin.c +++ b/gst/playback/gstplaybasebin.c @@ -826,10 +826,22 @@ gen_preroll_element (GstPlayBaseBin * play_base_bin, * after the source that measures the datarate and scales this * queue of encoded data instead. */ - g_object_set (G_OBJECT (preroll), - "max-size-buffers", 0, "max-size-bytes", - ((type == GST_STREAM_TYPE_VIDEO) ? 25 : 2) * 1024 * 1024, - "max-size-time", play_base_bin->queue_size, NULL); + if (play_base_bin->raw_decoding_mode) { + if (type == GST_STREAM_TYPE_VIDEO) { + g_object_set (G_OBJECT (preroll), + "max-size-buffers", 2, "max-size-bytes", 0, + "max-size-time", (guint64) 0, NULL); + } else { + g_object_set (G_OBJECT (preroll), + "max-size-buffers", 0, "max-size-bytes", + 2 * 1024 * 1024, "max-size-time", play_base_bin->queue_size, NULL); + } + } else { + g_object_set (G_OBJECT (preroll), + "max-size-buffers", 0, "max-size-bytes", + ((type == GST_STREAM_TYPE_VIDEO) ? 25 : 2) * 1024 * 1024, + "max-size-time", play_base_bin->queue_size, NULL); + } /* the overrun signal is always attached and serves two purposes: * @@ -1697,6 +1709,7 @@ source_new_pad (GstElement * element, GstPad * pad, GstPlayBaseBin * bin) GST_DEBUG_PAD_NAME (pad), GST_ELEMENT_NAME (element)); /* if this is a pad with all raw caps, we can expose it */ + bin->raw_decoding_mode = TRUE; if (has_all_raw_caps (pad, &is_raw) && is_raw) { /* it's all raw, create output pads. */ new_decoded_pad_full (element, pad, FALSE, bin, FALSE); @@ -2066,6 +2079,7 @@ setup_source (GstPlayBaseBin * play_base_bin) if (!play_base_bin->need_rebuild) return TRUE; + play_base_bin->raw_decoding_mode = FALSE; GST_DEBUG_OBJECT (play_base_bin, "setup source"); diff --git a/gst/playback/gstplaybasebin.h b/gst/playback/gstplaybasebin.h index b567794a90..c8c86499ef 100644 --- a/gst/playback/gstplaybasebin.h +++ b/gst/playback/gstplaybasebin.h @@ -87,6 +87,7 @@ struct _GstPlayBaseBin { GstElement *subtitle; /* additional filesrc ! subparse bin */ gboolean subtitle_done; gboolean need_rebuild; + gboolean raw_decoding_mode; /* Use smaller queues when source outputs raw data */ GSList *subtitle_elements; /* subtitle elements that have 'subtitle-encoding' property */ gchar *subencoding; /* encoding to propagate to the above subtitle elements */