mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-02 16:52:42 +00:00
playbin2: add support for progressive download
Add a new playbin2 flag (initially disabled) to enable progressive download buffering in uridecodebin.
This commit is contained in:
parent
f4d78328dd
commit
4403cf4efb
3 changed files with 33 additions and 8 deletions
|
@ -59,6 +59,8 @@ register_gst_play_flags (GType * id)
|
||||||
"native-audio"},
|
"native-audio"},
|
||||||
{C_FLAGS (GST_PLAY_FLAG_NATIVE_VIDEO), "Only use native video formats",
|
{C_FLAGS (GST_PLAY_FLAG_NATIVE_VIDEO), "Only use native video formats",
|
||||||
"native-video"},
|
"native-video"},
|
||||||
|
{C_FLAGS (GST_PLAY_FLAG_DOWNLOAD), "Attempt progressive download buffering",
|
||||||
|
"download"},
|
||||||
{0, NULL, NULL}
|
{0, NULL, NULL}
|
||||||
};
|
};
|
||||||
*id = g_flags_register_static ("GstPlayFlags", values);
|
*id = g_flags_register_static ("GstPlayFlags", values);
|
||||||
|
|
|
@ -53,6 +53,8 @@ GType gst_autoplug_select_result_get_type (void);
|
||||||
* configuration of audioconvert and audioresample.
|
* configuration of audioconvert and audioresample.
|
||||||
* @GST_PLAY_FLAG_NATIVE_VIDEO: only allow native video formats, this omits
|
* @GST_PLAY_FLAG_NATIVE_VIDEO: only allow native video formats, this omits
|
||||||
* configuration of ffmpegcolorspace and videoscale.
|
* configuration of ffmpegcolorspace and videoscale.
|
||||||
|
* @GST_PLAY_FLAG_DOWNLOAD: enable progressice download buffering for selected
|
||||||
|
* formats.
|
||||||
*
|
*
|
||||||
* Extra flags to configure the behaviour of the sinks.
|
* Extra flags to configure the behaviour of the sinks.
|
||||||
*/
|
*/
|
||||||
|
@ -63,7 +65,8 @@ typedef enum {
|
||||||
GST_PLAY_FLAG_VIS = (1 << 3),
|
GST_PLAY_FLAG_VIS = (1 << 3),
|
||||||
GST_PLAY_FLAG_SOFT_VOLUME = (1 << 4),
|
GST_PLAY_FLAG_SOFT_VOLUME = (1 << 4),
|
||||||
GST_PLAY_FLAG_NATIVE_AUDIO = (1 << 5),
|
GST_PLAY_FLAG_NATIVE_AUDIO = (1 << 5),
|
||||||
GST_PLAY_FLAG_NATIVE_VIDEO = (1 << 6)
|
GST_PLAY_FLAG_NATIVE_VIDEO = (1 << 6),
|
||||||
|
GST_PLAY_FLAG_DOWNLOAD = (1 << 7)
|
||||||
} GstPlayFlags;
|
} GstPlayFlags;
|
||||||
|
|
||||||
#define GST_TYPE_PLAY_FLAGS (gst_play_flags_get_type())
|
#define GST_TYPE_PLAY_FLAGS (gst_play_flags_get_type())
|
||||||
|
|
|
@ -1173,6 +1173,23 @@ gst_play_bin_set_suburi (GstPlayBin * playbin, const gchar * suburi)
|
||||||
GST_PLAY_BIN_UNLOCK (playbin);
|
GST_PLAY_BIN_UNLOCK (playbin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_play_bin_set_flags (GstPlayBin * playbin, GstPlayFlags flags)
|
||||||
|
{
|
||||||
|
gst_play_sink_set_flags (playbin->playsink, flags);
|
||||||
|
gst_play_sink_reconfigure (playbin->playsink);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GstPlayFlags
|
||||||
|
gst_play_bin_get_flags (GstPlayBin * playbin)
|
||||||
|
{
|
||||||
|
GstPlayFlags flags;
|
||||||
|
|
||||||
|
flags = gst_play_sink_get_flags (playbin->playsink);
|
||||||
|
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
||||||
/* get the currently playing group or if nothing is playing, the next
|
/* get the currently playing group or if nothing is playing, the next
|
||||||
* group. Must be called with the PLAY_BIN_LOCK. */
|
* group. Must be called with the PLAY_BIN_LOCK. */
|
||||||
static GstSourceGroup *
|
static GstSourceGroup *
|
||||||
|
@ -1527,8 +1544,7 @@ gst_play_bin_set_property (GObject * object, guint prop_id,
|
||||||
gst_play_bin_set_suburi (playbin, g_value_get_string (value));
|
gst_play_bin_set_suburi (playbin, g_value_get_string (value));
|
||||||
break;
|
break;
|
||||||
case PROP_FLAGS:
|
case PROP_FLAGS:
|
||||||
gst_play_sink_set_flags (playbin->playsink, g_value_get_flags (value));
|
gst_play_bin_set_flags (playbin, g_value_get_flags (value));
|
||||||
gst_play_sink_reconfigure (playbin->playsink);
|
|
||||||
break;
|
break;
|
||||||
case PROP_CURRENT_VIDEO:
|
case PROP_CURRENT_VIDEO:
|
||||||
gst_play_bin_set_current_video_stream (playbin, g_value_get_int (value));
|
gst_play_bin_set_current_video_stream (playbin, g_value_get_int (value));
|
||||||
|
@ -1644,7 +1660,7 @@ gst_play_bin_get_property (GObject * object, guint prop_id, GValue * value,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PROP_FLAGS:
|
case PROP_FLAGS:
|
||||||
g_value_set_flags (value, gst_play_sink_get_flags (playbin->playsink));
|
g_value_set_flags (value, gst_play_bin_get_flags (playbin));
|
||||||
break;
|
break;
|
||||||
case PROP_N_VIDEO:
|
case PROP_N_VIDEO:
|
||||||
{
|
{
|
||||||
|
@ -2521,6 +2537,10 @@ activate_group (GstPlayBin * playbin, GstSourceGroup * group, GstState target)
|
||||||
/* configure connection speed */
|
/* configure connection speed */
|
||||||
g_object_set (uridecodebin, "connection-speed",
|
g_object_set (uridecodebin, "connection-speed",
|
||||||
playbin->connection_speed / 1000, NULL);
|
playbin->connection_speed / 1000, NULL);
|
||||||
|
if (gst_play_sink_get_flags (playbin->playsink) & GST_PLAY_FLAG_DOWNLOAD)
|
||||||
|
g_object_set (uridecodebin, "download", TRUE, NULL);
|
||||||
|
else
|
||||||
|
g_object_set (uridecodebin, "download", FALSE, NULL);
|
||||||
/* configure subtitle encoding */
|
/* configure subtitle encoding */
|
||||||
g_object_set (uridecodebin, "subtitle-encoding", playbin->encoding, NULL);
|
g_object_set (uridecodebin, "subtitle-encoding", playbin->encoding, NULL);
|
||||||
/* configure uri */
|
/* configure uri */
|
||||||
|
|
Loading…
Reference in a new issue