📄 gstsegment.c
字号:
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);}GST_END_TEST;/* mess with the segment structure in the time format */GST_START_TEST (segment_newsegment_runningtime){ GstSegment segment; gint64 result; gst_segment_init (&segment, GST_FORMAT_TIME); /*************************** * Normal segment ***************************/ gst_segment_set_newsegment_full (&segment, FALSE, 1.0, 1.0, GST_FORMAT_TIME, 0, 200, 0); 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 == 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_running_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 0); fail_unless (result == 0); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 100); fail_unless (result == 100); /* at edge is exactly the segment duration */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 200); fail_unless (result == 200); /* outside of the segment */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 300); fail_unless (result == -1); /*********************************************************** * time shifted by 500, check if accumulation worked. * Rate convert to twice the speed which means scaling down * all positions by 2.0 in this segment. * Then time argument is not used at all here. ***********************************************************/ gst_segment_set_newsegment_full (&segment, FALSE, 2.0, 1.0, GST_FORMAT_TIME, 0, 200, 500); /* normal speed gives elapsed of 200 */ fail_unless (segment.accum == 200); /* invalid time gives invalid result */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 0); fail_unless (result == 200); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 100); fail_unless (result == 250); /* outside of the segment */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 500); fail_unless (result == -1); /******************************************** * time offset by 500 * applied rate is not used for running time ********************************************/ gst_segment_set_newsegment_full (&segment, FALSE, 1.0, 2.0, GST_FORMAT_TIME, 500, 700, 0); /* previous segment played at double speed gives elapsed time of * 100 added to previous accum of 200 gives 300. */ fail_unless (segment.accum == 300); /* invalid time gives invalid result */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); /* before segment is invalid */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 400); fail_unless (result == -1); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 500); fail_unless (result == 300); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 600); fail_unless (result == 400); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 700); fail_unless (result == 500); /* outside of the segment */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 800); fail_unless (result == -1); /********************************************************** * time offset by 500, shifted by 200 * Negative rate makes the running time go backwards * relative to the segment stop position. again time * is ignored. **********************************************************/ gst_segment_set_newsegment_full (&segment, FALSE, -1.0, 1.0, GST_FORMAT_TIME, 500, 700, 200); fail_unless (segment.accum == 500); /* invalid time gives invalid result */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); /* before segment is invalid */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 400); fail_unless (result == -1); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 500); fail_unless (result == 700); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 600); fail_unless (result == 600); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 700); fail_unless (result == 500); /* outside of the segment */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 800); fail_unless (result == -1); /********************************************************** * time offset by 500, shifted by 200 * Negative rate makes the running time go backwards at * twice speed relative to the segment stop position. again * time is ignored. **********************************************************/ gst_segment_set_newsegment_full (&segment, FALSE, -2.0, -2.0, GST_FORMAT_TIME, 500, 700, 200); fail_unless (segment.accum == 700); /* invalid time gives invalid result */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); /* before segment is invalid */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 400); fail_unless (result == -1); /* total scaled segment time is 100, accum is 700, so we get 800 */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 500); fail_unless (result == 800); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 600); fail_unless (result == 750); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 700); fail_unless (result == 700); /* outside of the segment */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 800); fail_unless (result == -1); /* see if negative rate closed segment correctly */ gst_segment_set_newsegment_full (&segment, FALSE, -2.0, -1.0, GST_FORMAT_TIME, 500, 700, 200); /* previous segment lasted 100, and was at 700 so we should get 800 */ fail_unless (segment.accum == 800);}GST_END_TEST;/* mess with the segment structure in the time format */GST_START_TEST (segment_newsegment_accum){ GstSegment segment; gint64 result; gst_segment_init (&segment, GST_FORMAT_TIME); /*************************** * Normal reverse segment ***************************/ gst_segment_set_newsegment_full (&segment, FALSE, -1.0, 1.0, GST_FORMAT_TIME, 0, 200, 0); 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 == 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_running_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 200); fail_unless (result == 0); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 150); fail_unless (result == 50); /* update segment, this accumulates 50 from the previous segment. */ gst_segment_set_newsegment_full (&segment, TRUE, -2.0, 1.0, GST_FORMAT_TIME, 0, 150, 0); 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 == 150); fail_unless (segment.time == 0); fail_unless (segment.accum == 50); fail_unless (segment.last_stop == 0); fail_unless (segment.duration == -1); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 150); fail_unless (result == 50); /* 50 accumulated + 50 / 2 */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 100); fail_unless (result == 75); /* update segment, this does not accumulate anything. */ gst_segment_set_newsegment_full (&segment, TRUE, 1.0, 1.0, GST_FORMAT_TIME, 100, 200, 100); 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 == 100); fail_unless (segment.stop == 200); fail_unless (segment.time == 100); fail_unless (segment.accum == 50); fail_unless (segment.last_stop == 100); fail_unless (segment.duration == -1); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 100); fail_unless (result == 50); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 150); fail_unless (result == 100);}GST_END_TEST;/* mess with the segment structure in the time format */GST_START_TEST (segment_newsegment_accum2){ GstSegment segment; gint64 result; gst_segment_init (&segment, GST_FORMAT_TIME); /*************************** * Normal reverse segment ***************************/ gst_segment_set_newsegment_full (&segment, FALSE, -1.0, 1.0, GST_FORMAT_TIME, 0, 200, 0); 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 == 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_running_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 200); fail_unless (result == 0); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 150); fail_unless (result == 50); /* close segment, this accumulates nothing. */ gst_segment_set_newsegment_full (&segment, TRUE, -1.0, 1.0, GST_FORMAT_TIME, 150, 200, 0); 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 == 150); fail_unless (segment.stop == 200); fail_unless (segment.time == 0); fail_unless (segment.accum == 0); fail_unless (segment.last_stop == 150); fail_unless (segment.duration == -1); /* new segment, this accumulates 50. */ gst_segment_set_newsegment_full (&segment, FALSE, 1.0, 1.0, GST_FORMAT_TIME, 150, 300, 150); 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 == 150); fail_unless (segment.stop == 300); fail_unless (segment.time == 150); fail_unless (segment.accum == 50); fail_unless (segment.last_stop == 150); fail_unless (segment.duration == -1); /* invalid time gives invalid result */ result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 150); fail_unless (result == 50); result = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, 200); fail_unless (result == 100);}GST_END_TEST;Suite *gst_segment_suite (void){ Suite *s = suite_create ("GstSegment"); TCase *tc_chain = tcase_create ("segments"); tcase_set_timeout (tc_chain, 20); suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, segment_seek_nosize); tcase_add_test (tc_chain, segment_seek_size); tcase_add_test (tc_chain, segment_seek_reverse); tcase_add_test (tc_chain, segment_newsegment_open); tcase_add_test (tc_chain, segment_newsegment_closed); tcase_add_test (tc_chain, segment_newsegment_streamtime); tcase_add_test (tc_chain, segment_newsegment_streamtime_rate); tcase_add_test (tc_chain, segment_newsegment_streamtime_applied_rate); tcase_add_test (tc_chain, segment_newsegment_streamtime_applied_rate_rate); tcase_add_test (tc_chain, segment_newsegment_runningtime); tcase_add_test (tc_chain, segment_newsegment_accum); tcase_add_test (tc_chain, segment_newsegment_accum2); return s;}GST_CHECK_MAIN (gst_segment);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -