📄 gstsegment.c
字号:
fail_unless (result == -1); /*************************************** * Normal segment rate -1.0, offset ***************************************/ /* buffers will arrive from 300 to 100 in a sink, stream time * calculation is unaffected by the rate */ gst_segment_set_newsegment_full (&segment, FALSE, -1.0, 1.0, GST_FORMAT_TIME, 100, 300, 0); fail_unless (segment.accum == 200); /* invalid time gives invalid result */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 100); fail_unless (result == 0); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 200); fail_unless (result == 100); /*********************************************** * Normal segment rate -1.0, offset, time = 200 ***********************************************/ gst_segment_set_newsegment_full (&segment, FALSE, -1.0, 1.0, GST_FORMAT_TIME, 100, 300, 200); /* invalid time gives invalid result */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 100); fail_unless (result == 200); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 200); fail_unless (result == 300); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 300); fail_unless (result == 400); /* outside of the segment */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 400); fail_unless (result == -1);}GST_END_TEST;/* mess with the segment structure in the time format */GST_START_TEST (segment_newsegment_streamtime_applied_rate){ GstSegment segment; gint64 result; gst_segment_init (&segment, GST_FORMAT_TIME); /*********************************************************** * Normal segment rate 1.0, applied rate -1.0 * This means the timestamps represents a stream going backwards * starting from @time to 0. ************************************************************/ gst_segment_set_newsegment_full (&segment, FALSE, 1.0, -1.0, GST_FORMAT_TIME, 0, 200, 200); fail_unless (segment.rate == 1.0); fail_unless (segment.applied_rate == -1.0); fail_unless (segment.format == GST_FORMAT_TIME); fail_unless (segment.flags == 0); fail_unless (segment.start == 0); fail_unless (segment.stop == 200); fail_unless (segment.time == 200); fail_unless (segment.accum == 0); fail_unless (segment.last_stop == 0); fail_unless (segment.duration == -1); /* invalid time gives invalid result */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); /* we count backwards from 200 */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 0); fail_unless (result == 200); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 100); fail_unless (result == 100); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 150); fail_unless (result == 50); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 200); fail_unless (result == 0); /* outside of the segment */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 300); fail_unless (result == -1); /*********************************************************** * Normal segment rate 1.0, applied rate 2.0 * This means the timestamps represents a stream at twice the * normal rate ************************************************************/ gst_segment_set_newsegment_full (&segment, FALSE, 1.0, 2.0, GST_FORMAT_TIME, 0, 200, 0); fail_unless (segment.rate == 1.0); fail_unless (segment.applied_rate == 2.0); fail_unless (segment.format == GST_FORMAT_TIME); fail_unless (segment.flags == 0); fail_unless (segment.start == 0); fail_unless (segment.stop == 200); fail_unless (segment.time == 0); fail_unless (segment.accum == 200); fail_unless (segment.last_stop == 0); fail_unless (segment.duration == -1); /* invalid time gives invalid result */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 0); fail_unless (result == 0); /* the stream prepresents a stream going twice as fast, the position * in the segment is therefore scaled by the applied rate */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 100); fail_unless (result == 200); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 150); fail_unless (result == 300); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 200); fail_unless (result == 400); /* outside of the segment */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 300); fail_unless (result == -1); /*********************************************************** * Normal segment rate 1.0, applied rate -2.0 * This means the timestamps represents a stream at twice the * reverse rate ************************************************************/ gst_segment_set_newsegment_full (&segment, FALSE, 1.0, -2.0, GST_FORMAT_TIME, 0, 200, 400); fail_unless (segment.rate == 1.0); fail_unless (segment.applied_rate == -2.0); fail_unless (segment.format == GST_FORMAT_TIME); fail_unless (segment.flags == 0); fail_unless (segment.start == 0); fail_unless (segment.stop == 200); fail_unless (segment.time == 400); /* previous segment lasted 200, rate of 2.0 was already applied */ fail_unless (segment.accum == 400); fail_unless (segment.last_stop == 0); fail_unless (segment.duration == -1); /* invalid time gives invalid result */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); /* we count backwards from 400 */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 0); fail_unless (result == 400); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 100); fail_unless (result == 200); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 150); fail_unless (result == 100); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 200); fail_unless (result == 0); /* outside of the segment */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 300); fail_unless (result == -1); /*********************************************************** * Normal segment rate 1.0, applied rate -2.0 * This means the timestamps represents a stream at twice the * reverse rate, start time cannot compensate the complete * duration of the segment so we stop at 0 ************************************************************/ gst_segment_set_newsegment_full (&segment, FALSE, 1.0, -2.0, GST_FORMAT_TIME, 0, 200, 200); fail_unless (segment.rate == 1.0); fail_unless (segment.applied_rate == -2.0); fail_unless (segment.format == GST_FORMAT_TIME); fail_unless (segment.flags == 0); fail_unless (segment.start == 0); fail_unless (segment.stop == 200); fail_unless (segment.time == 200); fail_unless (segment.accum == 600); fail_unless (segment.last_stop == 0); fail_unless (segment.duration == -1); /* invalid time gives invalid result */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); /* we count backwards from 200 */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 0); fail_unless (result == 200); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 100); fail_unless (result == 0); /* clamp at 0 */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 150); fail_unless (result == 0); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 200); fail_unless (result == 0); /* outside of the segment */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 300); fail_unless (result == -1);}GST_END_TEST;/* mess with the segment structure in the time format */GST_START_TEST (segment_newsegment_streamtime_applied_rate_rate){ GstSegment segment; gint64 result; gst_segment_init (&segment, GST_FORMAT_TIME); /*********************************************************** * Segment rate 2.0, applied rate 2.0 * this means we have a double speed stream that we should * speed up by a factor of 2.0 some more. the resulting * stream will be played at four times the speed. ************************************************************/ gst_segment_set_newsegment_full (&segment, FALSE, 2.0, 2.0, GST_FORMAT_TIME, 0, 200, 0); fail_unless (segment.rate == 2.0); fail_unless (segment.applied_rate == 2.0); fail_unless (segment.format == GST_FORMAT_TIME); fail_unless (segment.flags == 0); fail_unless (segment.start == 0); fail_unless (segment.stop == 200); fail_unless (segment.time == 0); fail_unless (segment.accum == 0); fail_unless (segment.last_stop == 0); fail_unless (segment.duration == -1); /* invalid time gives invalid result */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); /* only applied rate affects our calculation of the stream time */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 0); fail_unless (result == 0); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 100); fail_unless (result == 200); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 150); fail_unless (result == 300); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 200); fail_unless (result == 400); /* outside of the segment */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 300); fail_unless (result == -1); /*********************************************************** * Segment rate 2.0, applied rate -1.0 * this means we have a reverse stream that we should * speed up by a factor of 2.0 ************************************************************/ gst_segment_set_newsegment_full (&segment, FALSE, 2.0, -1.0, GST_FORMAT_TIME, 0, 200, 200); fail_unless (segment.rate == 2.0); fail_unless (segment.applied_rate == -1.0); fail_unless (segment.format == GST_FORMAT_TIME); fail_unless (segment.flags == 0); fail_unless (segment.start == 0); fail_unless (segment.stop == 200); fail_unless (segment.time == 200); /* previous segment lasted 100 */ fail_unless (segment.accum == 100); fail_unless (segment.last_stop == 0); fail_unless (segment.duration == -1); /* invalid time gives invalid result */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); /* only applied rate affects our calculation of the stream time */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 0); fail_unless (result == 200); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 100); fail_unless (result == 100); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 150); fail_unless (result == 50); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 200); fail_unless (result == 0); /* outside of the segment */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 300); fail_unless (result == -1); /*********************************************************** * Segment rate -1.0, applied rate -1.0 * this means we have a reverse stream that we should * reverse to get the normal stream again. ************************************************************/ gst_segment_set_newsegment_full (&segment, FALSE, -1.0, -1.0, GST_FORMAT_TIME, 0, 200, 200); fail_unless (segment.rate == -1.0); fail_unless (segment.applied_rate == -1.0); fail_unless (segment.format == GST_FORMAT_TIME); fail_unless (segment.flags == 0); fail_unless (segment.start == 0); fail_unless (segment.stop == 200); fail_unless (segment.time == 200); /* accumulated 100 of previous segment to make 200 */ fail_unless (segment.accum == 200); fail_unless (segment.last_stop == 0); fail_unless (segment.duration == -1); /* invalid time gives invalid result */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); /* only applied rate affects our calculation of the stream time */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 0); fail_unless (result == 200); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 100); fail_unless (result == 100); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 150); fail_unless (result == 50); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 200); fail_unless (result == 0); /* outside of the segment */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 300); fail_unless (result == -1); /*********************************************************** * Segment rate -1.0, applied rate -1.0 * this means we have a reverse stream that we should * reverse to get the normal stream again. ************************************************************/ gst_segment_set_newsegment_full (&segment, FALSE, -1.0, 2.0, GST_FORMAT_TIME, 0, 200, 0); fail_unless (segment.rate == -1.0); fail_unless (segment.applied_rate == 2.0); fail_unless (segment.format == GST_FORMAT_TIME); fail_unless (segment.flags == 0); fail_unless (segment.start == 0); fail_unless (segment.stop == 200); fail_unless (segment.time == 0); fail_unless (segment.accum == 400); fail_unless (segment.last_stop == 0); fail_unless (segment.duration == -1); /* invalid time gives invalid result */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); /* only applied rate affects our calculation of the stream time */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 0); fail_unless (result == 0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -