gstsegment.c

来自「gnash 在pc和嵌入式下开发需要的源码」· C语言 代码 · 共 1,522 行 · 第 1/4 页

C
1,522
字号
  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);  fail_unless (result == 400);  /* outside of the segment */  result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 800);  fail_unless (result == -1);}GST_END_TEST;/* mess with the segment structure in the time format */GST_START_TEST (segment_newsegment_streamtime_rate){  GstSegment segment;  gint64 result;  gst_segment_init (&segment, GST_FORMAT_TIME);  /***************************   * Normal segment rate 2.0   ***************************/  gst_segment_set_newsegment_full (&segment, FALSE, 2.0, 1.0,      GST_FORMAT_TIME, 0, 200, 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 == 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, 150);  fail_unless (result == 150);  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);  /***************************************   * Normal segment rate 2.0, offset   ***************************************/  gst_segment_set_newsegment_full (&segment, FALSE, 2.0, 1.0,      GST_FORMAT_TIME, 100, 300, 0);  fail_unless (segment.accum == 100);  /* 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);  result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 250);  fail_unless (result == 150);  result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 300);  fail_unless (result == 200);  /* outside of the segment */  result = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME, 400);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?