mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-09 05:38:58 +00:00
Add the headers to the adaptationsets segments if any one of these changed representation
This commit is contained in:
parent
713d02b81a
commit
fab388c9fd
1 changed files with 25 additions and 6 deletions
|
@ -863,7 +863,7 @@ gst_dash_demux_stream_loop (GstDashDemux * demux)
|
||||||
buffer_list = gst_fragment_get_buffer_list (fragment);
|
buffer_list = gst_fragment_get_buffer_list (fragment);
|
||||||
g_object_unref (fragment);
|
g_object_unref (fragment);
|
||||||
ret = gst_pad_push_list (demux->srcpad[i], buffer_list);
|
ret = gst_pad_push_list (demux->srcpad[i], buffer_list);
|
||||||
if ((ret != GST_FLOW_OK)&& (stream->mimeType == GST_STREAM_VIDEO))
|
if ((ret != GST_FLOW_OK) && (stream->mimeType == GST_STREAM_VIDEO))
|
||||||
goto error_pushing;
|
goto error_pushing;
|
||||||
}
|
}
|
||||||
if (GST_STATE (demux) == GST_STATE_PLAYING) {
|
if (GST_STATE (demux) == GST_STATE_PLAYING) {
|
||||||
|
@ -1260,6 +1260,28 @@ gst_dash_demux_get_input_caps (GstDashDemux * demux, GstActiveStream * stream)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
need_add_header (GstDashDemux * demux)
|
||||||
|
{
|
||||||
|
GstActiveStream *stream;
|
||||||
|
guint stream_idx = 0;
|
||||||
|
gboolean switch_caps = FALSE;
|
||||||
|
while (stream_idx < gst_mpdparser_get_nb_active_stream (demux->client)) {
|
||||||
|
stream =
|
||||||
|
gst_mpdparser_get_active_stream_by_index (demux->client, stream_idx);
|
||||||
|
if (stream == NULL)
|
||||||
|
return FALSE;
|
||||||
|
GstCaps *caps = gst_dash_demux_get_input_caps (demux, stream);
|
||||||
|
if (!demux->input_caps[stream_idx]
|
||||||
|
|| !gst_caps_is_equal (caps, demux->input_caps[stream_idx])) {
|
||||||
|
switch_caps = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
stream_idx++;
|
||||||
|
}
|
||||||
|
return switch_caps;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_dash_demux_get_next_fragment (GstDashDemux * demux, gboolean caching)
|
gst_dash_demux_get_next_fragment (GstDashDemux * demux, gboolean caching)
|
||||||
{
|
{
|
||||||
|
@ -1274,10 +1296,10 @@ gst_dash_demux_get_next_fragment (GstDashDemux * demux, gboolean caching)
|
||||||
GTimeVal start;
|
GTimeVal start;
|
||||||
GstClockTime diff;
|
GstClockTime diff;
|
||||||
guint64 size_buffer = 0;
|
guint64 size_buffer = 0;
|
||||||
gboolean switch_pad = FALSE;
|
|
||||||
|
|
||||||
g_get_current_time (&start);
|
g_get_current_time (&start);
|
||||||
/* support multiple streams */
|
/* support multiple streams */
|
||||||
|
gboolean need_header = need_add_header (demux);
|
||||||
int stream_idx = 0;
|
int stream_idx = 0;
|
||||||
list_fragment = NULL;
|
list_fragment = NULL;
|
||||||
while (stream_idx < gst_mpdparser_get_nb_active_stream (demux->client)) {
|
while (stream_idx < gst_mpdparser_get_nb_active_stream (demux->client)) {
|
||||||
|
@ -1308,14 +1330,11 @@ gst_dash_demux_get_next_fragment (GstDashDemux * demux, gboolean caching)
|
||||||
|
|
||||||
GstCaps *caps = gst_dash_demux_get_input_caps (demux, stream);
|
GstCaps *caps = gst_dash_demux_get_input_caps (demux, stream);
|
||||||
|
|
||||||
if (!demux->input_caps[stream_idx]
|
if (need_header) {
|
||||||
|| !gst_caps_is_equal (caps, demux->input_caps[stream_idx])
|
|
||||||
|| switch_pad) {
|
|
||||||
/* We changed spatial representation */
|
/* We changed spatial representation */
|
||||||
gst_caps_replace (&demux->input_caps[stream_idx], caps);
|
gst_caps_replace (&demux->input_caps[stream_idx], caps);
|
||||||
GST_INFO_OBJECT (demux, "Input source caps: %" GST_PTR_FORMAT,
|
GST_INFO_OBJECT (demux, "Input source caps: %" GST_PTR_FORMAT,
|
||||||
demux->input_caps[stream_idx]);
|
demux->input_caps[stream_idx]);
|
||||||
switch_pad = TRUE;
|
|
||||||
/* We need to fetch a new header */
|
/* We need to fetch a new header */
|
||||||
if ((header = gst_dash_demux_get_next_header (demux, stream_idx)) == NULL) {
|
if ((header = gst_dash_demux_get_next_header (demux, stream_idx)) == NULL) {
|
||||||
GST_INFO_OBJECT (demux, "Unable to fetch header");
|
GST_INFO_OBJECT (demux, "Unable to fetch header");
|
||||||
|
|
Loading…
Reference in a new issue