📄 gstsegment.c
字号:
res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 100, 150, &cstart, &cstop); fail_unless (res == TRUE); fail_unless (cstart == 100); fail_unless (cstop == 150); /* completely inside */ res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 150, 170, &cstart, &cstop); fail_unless (res == TRUE); fail_unless (cstart == 150); fail_unless (cstop == 170); /* partially inside */ res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 150, 250, &cstart, &cstop); fail_unless (res == TRUE); fail_unless (cstart == 150); fail_unless (cstop == 180); /* invalid start */ res = gst_segment_clip (&segment, GST_FORMAT_BYTES, -1, 100, &cstart, &cstop); fail_unless (res == FALSE); /* start outside */ res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 50, -1, &cstart, &cstop); fail_unless (res == TRUE); fail_unless (cstart == 100); fail_unless (cstop == 180); /* start on lower bound */ res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 100, -1, &cstart, &cstop); fail_unless (res == TRUE); fail_unless (cstart == 100); fail_unless (cstop == 180); /* start inside */ res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 150, -1, &cstart, &cstop); fail_unless (res == TRUE); fail_unless (cstart == 150); fail_unless (cstop == 180); /* start outside on boundary */ res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 180, -1, &cstart, &cstop); fail_unless (res == FALSE); /* start completely outside */ res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 250, -1, &cstart, &cstop); fail_unless (res == FALSE);}GST_END_TEST;GST_START_TEST (segment_seek_reverse){ GstSegment segment; gboolean update; gst_segment_init (&segment, GST_FORMAT_BYTES); gst_segment_set_duration (&segment, GST_FORMAT_BYTES, 200); /* configure segment to stop 100 */ gst_segment_set_seek (&segment, -1.0, GST_FORMAT_BYTES, GST_SEEK_FLAG_NONE, GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_SET, 100, &update); fail_unless (segment.start == 0); fail_unless (segment.stop == 100); fail_unless (segment.time == 0); fail_unless (segment.last_stop == 100); fail_unless (update == TRUE); /* update */ gst_segment_set_seek (&segment, -1.0, GST_FORMAT_BYTES, GST_SEEK_FLAG_NONE, GST_SEEK_TYPE_SET, 10, GST_SEEK_TYPE_CUR, -20, &update); fail_unless (segment.start == 10); fail_unless (segment.stop == 80); fail_unless (segment.time == 10); fail_unless (segment.last_stop == 80); fail_unless (update == TRUE); gst_segment_set_seek (&segment, -1.0, GST_FORMAT_BYTES, GST_SEEK_FLAG_NONE, GST_SEEK_TYPE_SET, 20, GST_SEEK_TYPE_NONE, 0, &update); fail_unless (segment.start == 20); fail_unless (segment.stop == 80); fail_unless (segment.time == 20); fail_unless (segment.last_stop == 80); fail_unless (update == FALSE);}GST_END_TEST;/* mess with the segment structure in the bytes format */GST_START_TEST (segment_newsegment_open){ GstSegment segment; gst_segment_init (&segment, GST_FORMAT_BYTES); /* time should also work for starting from 0 */ gst_segment_set_newsegment (&segment, FALSE, 1.0, GST_FORMAT_TIME, 0, -1, 0); fail_unless (segment.rate == 1.0); fail_unless (segment.format == GST_FORMAT_BYTES); fail_unless (segment.flags == 0); fail_unless (segment.start == 0); fail_unless (segment.stop == -1); fail_unless (segment.time == 0); fail_unless (segment.accum == 0); fail_unless (segment.last_stop == 0); fail_unless (segment.duration == -1); /* we set stop but in the wrong format, stop stays open. */ gst_segment_set_newsegment (&segment, FALSE, 1.0, GST_FORMAT_TIME, 0, 200, 0); fail_unless (segment.start == 0); fail_unless (segment.stop == -1); fail_unless (segment.time == 0); fail_unless (segment.accum == 0); /* update, nothing changes */ gst_segment_set_newsegment (&segment, TRUE, 1.0, GST_FORMAT_BYTES, 0, -1, 0); fail_unless (segment.start == 0); fail_unless (segment.stop == -1); fail_unless (segment.time == 0); fail_unless (segment.accum == 0); /* update */ gst_segment_set_newsegment (&segment, TRUE, 1.0, GST_FORMAT_BYTES, 100, -1, 100); fail_unless (segment.start == 100); fail_unless (segment.stop == -1); fail_unless (segment.time == 100); fail_unless (segment.accum == 100); /* last_stop 0, accum does not change */ gst_segment_set_newsegment (&segment, FALSE, 1.0, GST_FORMAT_BYTES, 0, -1, 0); fail_unless (segment.start == 0); fail_unless (segment.stop == -1); fail_unless (segment.time == 0); fail_unless (segment.accum == 100); gst_segment_set_last_stop (&segment, GST_FORMAT_BYTES, 200); /* last_stop 200, accum changes */ gst_segment_set_newsegment (&segment, FALSE, 1.0, GST_FORMAT_BYTES, 0, -1, 0); fail_unless (segment.start == 0); fail_unless (segment.stop == -1); fail_unless (segment.time == 0); fail_unless (segment.accum == 300);}GST_END_TEST;/* mess with the segment structure in the bytes format */GST_START_TEST (segment_newsegment_closed){ GstSegment segment; gst_segment_init (&segment, GST_FORMAT_BYTES); gst_segment_set_newsegment (&segment, FALSE, 1.0, GST_FORMAT_BYTES, 0, 200, 0); fail_unless (segment.rate == 1.0); fail_unless (segment.format == GST_FORMAT_BYTES); 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); /* do an update */ gst_segment_set_newsegment (&segment, TRUE, 1.0, GST_FORMAT_BYTES, 0, 300, 0); fail_unless (segment.start == 0); fail_unless (segment.stop == 300); fail_unless (segment.time == 0); fail_unless (segment.accum == 0); /* and a new accumulated one */ gst_segment_set_newsegment (&segment, FALSE, 1.0, GST_FORMAT_BYTES, 100, 400, 300); fail_unless (segment.start == 100); fail_unless (segment.stop == 400); fail_unless (segment.time == 300); fail_unless (segment.accum == 300); /* and a new updated one */ gst_segment_set_newsegment (&segment, TRUE, 1.0, GST_FORMAT_BYTES, 100, 500, 300); fail_unless (segment.start == 100); fail_unless (segment.stop == 500); fail_unless (segment.time == 300); fail_unless (segment.accum == 300); /* and a new partially updated one */ gst_segment_set_newsegment (&segment, TRUE, 1.0, GST_FORMAT_BYTES, 200, 500, 400); fail_unless (segment.start == 200); fail_unless (segment.stop == 500); fail_unless (segment.time == 400); fail_unless (segment.accum == 400);}GST_END_TEST;/* mess with the segment structure in the time format */GST_START_TEST (segment_newsegment_streamtime){ 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_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); 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, 200); fail_unless (result == 200); /* outside of the segment */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 300); fail_unless (result == -1); /********************* * time shifted by 500 *********************/ gst_segment_set_newsegment_full (&segment, FALSE, 1.0, 1.0, GST_FORMAT_TIME, 0, 200, 500); 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, 0); fail_unless (result == 500); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 100); fail_unless (result == 600); /* outside of the segment */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 500); fail_unless (result == -1); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 300); fail_unless (result == -1); /********************* * time offset by 500 *********************/ gst_segment_set_newsegment_full (&segment, FALSE, 1.0, 1.0, GST_FORMAT_TIME, 500, 700, 0); fail_unless (segment.accum == 400); /* invalid time gives invalid result */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); /* before segment is invalid */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 400); fail_unless (result == -1); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 500); fail_unless (result == 0); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 600); fail_unless (result == 100); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 700); fail_unless (result == 200); /* outside of the segment */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 800); fail_unless (result == -1); /************************************* * time offset by 500, shifted by 200 *************************************/ gst_segment_set_newsegment_full (&segment, FALSE, 1.0, 1.0, GST_FORMAT_TIME, 500, 700, 200); fail_unless (segment.accum == 600); /* invalid time gives invalid result */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, -1); fail_unless (result == -1); /* before segment is invalid */ result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 400); fail_unless (result == -1); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 500); fail_unless (result == 200); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 600); fail_unless (result == 300); result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 700);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -