dashdemux: only update current reading position when needed

If the seek doesn't set the start/stop position, no need to
reposition the download index.
This commit is contained in:
Thiago Santos 2016-02-01 09:48:33 -03:00
parent fc72e48a48
commit d4b4069041

View File

@ -1259,6 +1259,10 @@ end:
return ret; return ret;
} }
#define SEEK_UPDATES_PLAY_POSITION(r, start_type, stop_type) \
((r >= 0 && start_type != GST_SEEK_TYPE_NONE) || \
(r < 0 && stop_type != GST_SEEK_TYPE_NONE))
static gboolean static gboolean
gst_dash_demux_seek (GstAdaptiveDemux * demux, GstEvent * seek) gst_dash_demux_seek (GstAdaptiveDemux * demux, GstEvent * seek)
{ {
@ -1278,11 +1282,16 @@ gst_dash_demux_seek (GstAdaptiveDemux * demux, GstEvent * seek)
gst_event_parse_seek (seek, &rate, &format, &flags, &start_type, &start, gst_event_parse_seek (seek, &rate, &format, &flags, &start_type, &start,
&stop_type, &stop); &stop_type, &stop);
/* TODO check if start-type/stop-type is SET */ if (!SEEK_UPDATES_PLAY_POSITION (rate, start_type, stop_type)) {
if (demux->segment.rate > 0.0) /* nothing to do if we don't have to update the current position */
return TRUE;
}
if (demux->segment.rate > 0.0) {
target_pos = (GstClockTime) start; target_pos = (GstClockTime) start;
else } else {
target_pos = (GstClockTime) stop; target_pos = (GstClockTime) stop;
}
/* select the requested Period in the Media Presentation */ /* select the requested Period in the Media Presentation */
if (!gst_mpd_client_setup_media_presentation (dashdemux->client, target_pos, if (!gst_mpd_client_setup_media_presentation (dashdemux->client, target_pos,