mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 09:10:36 +00:00
segment: fix offset handling with non 0 start
The position in the segment is relative to the start but the offset isn't, so subtract the start from the position when setting the offset. Add unit test for this as well.
This commit is contained in:
parent
78bdbadc4e
commit
6e67ad7675
2 changed files with 52 additions and 1 deletions
|
@ -757,7 +757,7 @@ gst_segment_offset_running_time (GstSegment * segment, GstFormat format,
|
||||||
if (position == -1)
|
if (position == -1)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
segment->offset = position;
|
segment->offset = position - segment->start;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -689,6 +689,57 @@ GST_START_TEST (segment_offset)
|
||||||
fail_unless (segment.base == 0);
|
fail_unless (segment.base == 0);
|
||||||
fail_unless (segment.offset == 200);
|
fail_unless (segment.offset == 200);
|
||||||
check_times (&segment, 200, 200, 0);
|
check_times (&segment, 200, 200, 0);
|
||||||
|
|
||||||
|
gst_segment_init (&segment, GST_FORMAT_TIME);
|
||||||
|
|
||||||
|
segment.start = 20;
|
||||||
|
segment.position = 50;
|
||||||
|
segment.stop = 220;
|
||||||
|
segment.time = 0;
|
||||||
|
|
||||||
|
check_times (&segment, 40, 20, 20);
|
||||||
|
check_times (&segment, 240, -1, -1);
|
||||||
|
|
||||||
|
fail_unless (gst_segment_offset_running_time (&segment, GST_FORMAT_TIME,
|
||||||
|
0) == TRUE);
|
||||||
|
fail_unless (segment.start == 20);
|
||||||
|
fail_unless (segment.stop == 220);
|
||||||
|
fail_unless (segment.time == 0);
|
||||||
|
fail_unless (segment.position == 50);
|
||||||
|
fail_unless (segment.base == 0);
|
||||||
|
fail_unless (segment.offset == 0);
|
||||||
|
check_times (&segment, 40, 20, 20);
|
||||||
|
|
||||||
|
fail_unless (gst_segment_offset_running_time (&segment, GST_FORMAT_TIME,
|
||||||
|
100) == TRUE);
|
||||||
|
fail_unless (segment.start == 20);
|
||||||
|
fail_unless (segment.stop == 220);
|
||||||
|
fail_unless (segment.time == 0);
|
||||||
|
fail_unless (segment.position == 50);
|
||||||
|
fail_unless (segment.base == 100);
|
||||||
|
fail_unless (segment.offset == 0);
|
||||||
|
check_times (&segment, 40, 20, 120);
|
||||||
|
|
||||||
|
fail_unless (gst_segment_offset_running_time (&segment, GST_FORMAT_TIME,
|
||||||
|
-50) == TRUE);
|
||||||
|
fail_unless (segment.start == 20);
|
||||||
|
fail_unless (segment.stop == 220);
|
||||||
|
fail_unless (segment.time == 0);
|
||||||
|
fail_unless (segment.position == 50);
|
||||||
|
fail_unless (segment.base == 50);
|
||||||
|
fail_unless (segment.offset == 0);
|
||||||
|
check_times (&segment, 40, 20, 70);
|
||||||
|
|
||||||
|
fail_unless (gst_segment_offset_running_time (&segment, GST_FORMAT_TIME,
|
||||||
|
-100) == TRUE);
|
||||||
|
fail_unless (segment.start == 20);
|
||||||
|
fail_unless (segment.stop == 220);
|
||||||
|
fail_unless (segment.time == 0);
|
||||||
|
fail_unless (segment.position == 50);
|
||||||
|
fail_unless (segment.base == 0);
|
||||||
|
fail_unless (segment.offset == 50);
|
||||||
|
check_times (&segment, 40, 20, -1);
|
||||||
|
check_times (&segment, 220, 200, 150);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
Loading…
Reference in a new issue