mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 20:21:24 +00:00
dashdemux: Remove timing code that delays pushing of fragments
Fragments should be pushed ASAP as downstream should be responsible for doing the syncrhonization and proper buffering. This has the great side effect of fixing most of the seeking A/V sync issues.
This commit is contained in:
parent
a1447a8ede
commit
f27bb684f7
2 changed files with 8 additions and 35 deletions
|
@ -9,6 +9,9 @@
|
||||||
* David Corvoysier <david.corvoysier@orange.com>
|
* David Corvoysier <david.corvoysier@orange.com>
|
||||||
* Hamid Zakari <hamid.zakari@gmail.com>
|
* Hamid Zakari <hamid.zakari@gmail.com>
|
||||||
*
|
*
|
||||||
|
* Copyright (C) 2013 Smart TV Alliance
|
||||||
|
* Author: Thiago Sousa Santos <thiago.sousa.santos@collabora.com>, Collabora Ltd.
|
||||||
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
* License as published by the Free Software Foundation; either
|
* License as published by the Free Software Foundation; either
|
||||||
|
@ -979,12 +982,6 @@ gst_dash_demux_stream_loop (GstDashDemux * demux)
|
||||||
gboolean switch_pad;
|
gboolean switch_pad;
|
||||||
guint i = 0;
|
guint i = 0;
|
||||||
|
|
||||||
/* Wait until the next scheduled push downstream */
|
|
||||||
if (g_cond_timed_wait (GST_TASK_GET_COND (demux->stream_task),
|
|
||||||
demux->stream_timed_lock, &demux->next_push)) {
|
|
||||||
goto quit;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_queue_is_empty (demux->queue)) {
|
if (g_queue_is_empty (demux->queue)) {
|
||||||
if (demux->end_of_manifest)
|
if (demux->end_of_manifest)
|
||||||
goto end_of_manifest;
|
goto end_of_manifest;
|
||||||
|
@ -1007,6 +1004,7 @@ gst_dash_demux_stream_loop (GstDashDemux * demux)
|
||||||
}
|
}
|
||||||
listfragment = g_queue_pop_head (demux->queue);
|
listfragment = g_queue_pop_head (demux->queue);
|
||||||
nb_adaptation_set = g_list_length (listfragment);
|
nb_adaptation_set = g_list_length (listfragment);
|
||||||
|
|
||||||
/* Figure out if we need to create/switch pads */
|
/* Figure out if we need to create/switch pads */
|
||||||
switch_pad = needs_pad_switch (demux, listfragment);
|
switch_pad = needs_pad_switch (demux, listfragment);
|
||||||
if (switch_pad) {
|
if (switch_pad) {
|
||||||
|
@ -1036,27 +1034,10 @@ gst_dash_demux_stream_loop (GstDashDemux * demux)
|
||||||
goto error_pushing;
|
goto error_pushing;
|
||||||
}
|
}
|
||||||
demux->need_segment = FALSE;
|
demux->need_segment = FALSE;
|
||||||
demux->last_position_shift = demux->position_shift;
|
|
||||||
demux->position_shift = 0;
|
demux->position_shift = 0;
|
||||||
g_list_free (listfragment);
|
g_list_free (listfragment);
|
||||||
if (GST_STATE (demux) == GST_STATE_PLAYING) {
|
|
||||||
/* Wait for the duration of a fragment before resuming this task */
|
|
||||||
g_get_current_time (&demux->next_push);
|
|
||||||
g_time_val_add (&demux->next_push,
|
|
||||||
(gst_mpd_client_get_next_fragment_duration (demux->client) -
|
|
||||||
demux->last_position_shift) / GST_SECOND * G_USEC_PER_SEC);
|
|
||||||
GST_DEBUG_OBJECT (demux, "Next push scheduled at %s",
|
|
||||||
g_time_val_to_iso8601 (&demux->next_push));
|
|
||||||
demux->last_position_shift = 0;
|
|
||||||
} else {
|
|
||||||
/* The pipeline is now set up, wait until playback begins */
|
|
||||||
goto pause_streaming;
|
|
||||||
}
|
|
||||||
|
|
||||||
quit:
|
return;
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
end_of_manifest:
|
end_of_manifest:
|
||||||
{
|
{
|
||||||
|
@ -1078,13 +1059,6 @@ error_pushing:
|
||||||
gst_dash_demux_stop (demux);
|
gst_dash_demux_stop (demux);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pause_streaming:
|
|
||||||
{
|
|
||||||
GST_INFO_OBJECT (demux, "Pausing streaming task");
|
|
||||||
gst_task_pause (demux->stream_task);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1403,7 +1377,6 @@ gst_dash_demux_pause_stream_task (GstDashDemux * demux)
|
||||||
static void
|
static void
|
||||||
gst_dash_demux_resume_stream_task (GstDashDemux * demux)
|
gst_dash_demux_resume_stream_task (GstDashDemux * demux)
|
||||||
{
|
{
|
||||||
g_get_current_time (&demux->next_push);
|
|
||||||
gst_task_start (demux->stream_task);
|
gst_task_start (demux->stream_task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1762,4 +1735,3 @@ gst_dash_demux_get_next_fragment_set (GstDashDemux * demux)
|
||||||
demux->dnl_rate / 1000, size_buffer / 1024, ((double) diff / GST_SECOND));
|
demux->dnl_rate / 1000, size_buffer / 1024, ((double) diff / GST_SECOND));
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,13 @@
|
||||||
* gstdashdemux.h
|
* gstdashdemux.h
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Orange
|
* Copyright (C) 2012 Orange
|
||||||
*
|
|
||||||
* Authors:
|
* Authors:
|
||||||
* David Corvoysier <david.corvoysier@orange.com>
|
* David Corvoysier <david.corvoysier@orange.com>
|
||||||
* Hamid Zakari <hamid.zakari@gmail.com>
|
* Hamid Zakari <hamid.zakari@gmail.com>
|
||||||
*
|
*
|
||||||
|
* Copyright (C) 2013 Smart TV Alliance
|
||||||
|
* Author: Thiago Sousa Santos <thiago.sousa.santos@collabora.com>, Collabora Ltd.
|
||||||
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
* License as published by the Free Software Foundation; either
|
* License as published by the Free Software Foundation; either
|
||||||
|
@ -81,7 +83,6 @@ struct _GstDashDemux
|
||||||
GstTask *stream_task;
|
GstTask *stream_task;
|
||||||
GStaticRecMutex stream_lock;
|
GStaticRecMutex stream_lock;
|
||||||
GMutex *stream_timed_lock;
|
GMutex *stream_timed_lock;
|
||||||
GTimeVal next_push; /* Time of the next push */
|
|
||||||
|
|
||||||
/* Download task */
|
/* Download task */
|
||||||
GstTask *download_task;
|
GstTask *download_task;
|
||||||
|
|
Loading…
Reference in a new issue