mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
mpdparser: Refactor to get rid of one level of indentation in seeking code
Also go out of the segment searching loop once segment->start > ts. We're not going to find any earlier segment anymore.
This commit is contained in:
parent
ffa63c5933
commit
43d1dd3dad
1 changed files with 36 additions and 37 deletions
|
@ -4765,62 +4765,61 @@ gst_mpd_client_stream_seek (GstMpdClient * client, GstActiveStream * stream,
|
||||||
gint index = 0;
|
gint index = 0;
|
||||||
gint repeat_index = 0;
|
gint repeat_index = 0;
|
||||||
GstMediaSegment *selectedChunk = NULL;
|
GstMediaSegment *selectedChunk = NULL;
|
||||||
gboolean in_segment;
|
|
||||||
|
|
||||||
g_return_val_if_fail (stream != NULL, 0);
|
g_return_val_if_fail (stream != NULL, 0);
|
||||||
|
|
||||||
if (stream->segments) {
|
if (stream->segments) {
|
||||||
for (index = 0; index < stream->segments->len; index++) {
|
for (index = 0; index < stream->segments->len; index++) {
|
||||||
|
gboolean in_segment = FALSE;
|
||||||
GstMediaSegment *segment = g_ptr_array_index (stream->segments, index);
|
GstMediaSegment *segment = g_ptr_array_index (stream->segments, index);
|
||||||
|
GstClockTime end_time;
|
||||||
|
|
||||||
GST_DEBUG ("Looking at fragment sequence chunk %d / %d", index,
|
GST_DEBUG ("Looking at fragment sequence chunk %d / %d", index,
|
||||||
stream->segments->len);
|
stream->segments->len);
|
||||||
in_segment = FALSE;
|
|
||||||
if (segment->start <= ts) {
|
|
||||||
GstClockTime end_time;
|
|
||||||
|
|
||||||
if (segment->repeat >= 0) {
|
if (segment->start > ts)
|
||||||
end_time = segment->start + (segment->repeat + 1) * segment->duration;
|
break;
|
||||||
} else {
|
|
||||||
end_time =
|
|
||||||
gst_mpdparser_get_segment_end_time (client, stream->segments,
|
|
||||||
segment, index);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* avoid downloading another fragment just for 1ns in reverse mode */
|
if (segment->repeat >= 0) {
|
||||||
if (forward)
|
end_time = segment->start + (segment->repeat + 1) * segment->duration;
|
||||||
in_segment = ts < end_time;
|
} else {
|
||||||
else
|
end_time =
|
||||||
in_segment = ts <= end_time;
|
gst_mpdparser_get_segment_end_time (client, stream->segments,
|
||||||
|
segment, index);
|
||||||
|
}
|
||||||
|
|
||||||
if (in_segment) {
|
/* avoid downloading another fragment just for 1ns in reverse mode */
|
||||||
selectedChunk = segment;
|
if (forward)
|
||||||
repeat_index = (ts - segment->start) / segment->duration;
|
in_segment = ts < end_time;
|
||||||
|
else
|
||||||
|
in_segment = ts <= end_time;
|
||||||
|
|
||||||
/* At the end of a segment in reverse mode, start from the previous fragment */
|
if (in_segment) {
|
||||||
if (!forward && repeat_index > 0
|
selectedChunk = segment;
|
||||||
&& ((ts - segment->start) % segment->duration == 0))
|
repeat_index = (ts - segment->start) / segment->duration;
|
||||||
repeat_index--;
|
|
||||||
|
|
||||||
if ((flags & GST_SEEK_FLAG_SNAP_NEAREST) ==
|
/* At the end of a segment in reverse mode, start from the previous fragment */
|
||||||
GST_SEEK_FLAG_SNAP_NEAREST) {
|
if (!forward && repeat_index > 0
|
||||||
/* FIXME implement this */
|
&& ((ts - segment->start) % segment->duration == 0))
|
||||||
} else if ((forward && flags & GST_SEEK_FLAG_SNAP_AFTER) ||
|
repeat_index--;
|
||||||
(!forward && flags & GST_SEEK_FLAG_SNAP_BEFORE)) {
|
|
||||||
|
|
||||||
if (repeat_index + 1 < segment->repeat) {
|
if ((flags & GST_SEEK_FLAG_SNAP_NEAREST) == GST_SEEK_FLAG_SNAP_NEAREST) {
|
||||||
repeat_index++;
|
/* FIXME implement this */
|
||||||
|
} else if ((forward && flags & GST_SEEK_FLAG_SNAP_AFTER) ||
|
||||||
|
(!forward && flags & GST_SEEK_FLAG_SNAP_BEFORE)) {
|
||||||
|
|
||||||
|
if (repeat_index + 1 < segment->repeat) {
|
||||||
|
repeat_index++;
|
||||||
|
} else {
|
||||||
|
repeat_index = 0;
|
||||||
|
if (index + 1 >= stream->segments->len) {
|
||||||
|
selectedChunk = NULL;
|
||||||
} else {
|
} else {
|
||||||
repeat_index = 0;
|
selectedChunk = g_ptr_array_index (stream->segments, ++index);
|
||||||
if (index + 1 >= stream->segments->len) {
|
|
||||||
selectedChunk = NULL;
|
|
||||||
} else {
|
|
||||||
selectedChunk = g_ptr_array_index (stream->segments, ++index);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue