⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gstsegment.c

📁 gnash 在pc和嵌入式下开发需要的源码
💻 C
📖 第 1 页 / 共 4 页
字号:
/* GStreamer * Copyright (C) 2005 Jan Schmidt <thaytan@mad.scientist.com> * * gstsegment.c: Unit test for segments * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#include <gst/check/gstcheck.h>/* mess with the segment structure in the bytes format */GST_START_TEST (segment_seek_nosize){  GstSegment segment;  gboolean res;  gint64 cstart, cstop;  gboolean update;  gst_segment_init (&segment, GST_FORMAT_BYTES);  /* configure segment to start 100 */  gst_segment_set_seek (&segment, 1.0,      GST_FORMAT_BYTES,      GST_SEEK_FLAG_NONE,      GST_SEEK_TYPE_SET, 100, GST_SEEK_TYPE_NONE, -1, &update);  fail_unless (segment.start == 100);  fail_unless (segment.stop == -1);  fail_unless (update == TRUE);  /* configure segment to stop relative, should not do anything since    * size is unknown. */  gst_segment_set_seek (&segment, 1.0,      GST_FORMAT_BYTES,      GST_SEEK_FLAG_NONE,      GST_SEEK_TYPE_NONE, 200, GST_SEEK_TYPE_CUR, -100, &update);  fail_unless (segment.start == 100);  fail_unless (segment.stop == -1);  fail_unless (update == FALSE);  /* do some clipping on the open range */  /* completely outside */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 0, 50, &cstart, &cstop);  fail_unless (res == FALSE);  /* touching lower bound, still outside of the segment */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 50, 100, &cstart, &cstop);  fail_unless (res == FALSE);  /* partially inside */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 50, 150, &cstart, &cstop);  fail_unless (res == TRUE);  fail_unless (cstart == 100);  fail_unless (cstop == 150);  /* inside, touching lower bound */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES,      100, 150, &cstart, &cstop);  fail_unless (res == TRUE);  fail_unless (cstart == 100);  fail_unless (cstop == 150);  /* special case, 0 duration */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES,      100, 100, &cstart, &cstop);  fail_unless (res == TRUE);  fail_unless (cstart == 100);  fail_unless (cstop == 100);  /* completely inside */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES,      150, 200, &cstart, &cstop);  fail_unless (res == TRUE);  fail_unless (cstart == 150);  fail_unless (cstop == 200);  /* invalid start */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, -1, 100, &cstart, &cstop);  fail_unless (res == FALSE);  /* start outside, we don't know the stop */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 50, -1, &cstart, &cstop);  fail_unless (res == TRUE);  fail_unless (cstart == 100);  fail_unless (cstop == -1);  /* 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 == -1);  /* 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 == -1);  /* add 100 to start, set stop to 300 */  gst_segment_set_seek (&segment, 1.0,      GST_FORMAT_BYTES,      GST_SEEK_FLAG_NONE,      GST_SEEK_TYPE_CUR, 100, GST_SEEK_TYPE_SET, 300, &update);  fail_unless (segment.start == 200);  fail_unless (segment.stop == 300);  fail_unless (update == TRUE);  update = FALSE;  /* add 100 to start (to 300), set stop to 200, this is not allowed.    * nothing should be updated in the segment. A g_warning is   * emited. */  ASSERT_CRITICAL (gst_segment_set_seek (&segment, 1.0,          GST_FORMAT_BYTES,          GST_SEEK_FLAG_NONE,          GST_SEEK_TYPE_CUR, 100, GST_SEEK_TYPE_SET, 200, &update));  fail_unless (segment.start == 200);  fail_unless (segment.stop == 300);  /* update didn't change */  fail_unless (update == FALSE);  update = TRUE;  /* seek relative to end, should not do anything since size is   * unknown. */  gst_segment_set_seek (&segment, 1.0,      GST_FORMAT_BYTES,      GST_SEEK_FLAG_NONE,      GST_SEEK_TYPE_END, -300, GST_SEEK_TYPE_END, -100, &update);  fail_unless (segment.start == 200);  fail_unless (segment.stop == 300);  fail_unless (update == FALSE);  /* completely outside */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 0, 50, &cstart, &cstop);  fail_unless (res == FALSE);  /* touching lower bound */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 50, 200, &cstart, &cstop);  fail_unless (res == FALSE);  /* partially inside */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 50, 250, &cstart, &cstop);  fail_unless (res == TRUE);  fail_unless (cstart == 200);  fail_unless (cstop == 250);  /* inside, touching lower bound */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES,      200, 250, &cstart, &cstop);  fail_unless (res == TRUE);  fail_unless (cstart == 200);  fail_unless (cstop == 250);  /* completely inside */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES,      250, 290, &cstart, &cstop);  fail_unless (res == TRUE);  fail_unless (cstart == 250);  fail_unless (cstop == 290);  /* partially inside */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES,      250, 350, &cstart, &cstop);  fail_unless (res == TRUE);  fail_unless (cstart == 250);  fail_unless (cstop == 300);  /* 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 == 200);  fail_unless (cstop == 300);  /* start on lower bound */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 200, -1, &cstart, &cstop);  fail_unless (res == TRUE);  fail_unless (cstart == 200);  fail_unless (cstop == 300);  /* start inside */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 250, -1, &cstart, &cstop);  fail_unless (res == TRUE);  fail_unless (cstart == 250);  fail_unless (cstop == 300);  /* start outside on boundary */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 300, -1, &cstart, &cstop);  fail_unless (res == FALSE);  /* start completely outside */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 350, -1, &cstart, &cstop);  fail_unless (res == FALSE);}GST_END_TEST;/* mess with the segment structure in the bytes format */GST_START_TEST (segment_seek_size){  GstSegment segment;  gboolean res;  gint64 cstart, cstop;  gboolean update;  gst_segment_init (&segment, GST_FORMAT_BYTES);  gst_segment_set_duration (&segment, GST_FORMAT_BYTES, 200);  /* configure segment to start 100 */  gst_segment_set_seek (&segment, 1.0,      GST_FORMAT_BYTES,      GST_SEEK_FLAG_NONE,      GST_SEEK_TYPE_SET, 100, GST_SEEK_TYPE_NONE, -1, &update);  fail_unless (segment.start == 100);  fail_unless (segment.stop == -1);  fail_unless (update == TRUE);  /* configure segment to stop relative, does not update stop   * since we did not set it before. */  gst_segment_set_seek (&segment, 1.0,      GST_FORMAT_BYTES,      GST_SEEK_FLAG_NONE,      GST_SEEK_TYPE_NONE, 200, GST_SEEK_TYPE_CUR, -100, &update);  fail_unless (segment.start == 100);  fail_unless (segment.stop == -1);  fail_unless (update == FALSE);  /* do some clipping on the open range */  /* completely outside */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 0, 50, &cstart, &cstop);  fail_unless (res == FALSE);  /* touching lower bound */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 50, 100, &cstart, &cstop);  fail_unless (res == FALSE);  /* partially inside */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 50, 150, &cstart, &cstop);  fail_unless (res == TRUE);  fail_unless (cstart == 100);  fail_unless (cstop == 150);  /* inside, touching lower bound */  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, 200, &cstart, &cstop);  fail_unless (res == TRUE);  fail_unless (cstart == 150);  fail_unless (cstop == 200);  /* partially inside, clip to size */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES,      150, 300, &cstart, &cstop);  fail_unless (res == TRUE);  fail_unless (cstart == 150);  fail_unless (cstop == 200);  /* 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 == -1);  /* 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 == -1);  /* 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 == -1);  /* add 100 to start, set stop to 300, stop clips to 200 */  gst_segment_set_seek (&segment, 1.0,      GST_FORMAT_BYTES,      GST_SEEK_FLAG_NONE,      GST_SEEK_TYPE_CUR, 100, GST_SEEK_TYPE_SET, 300, &update);  fail_unless (segment.start == 200);  fail_unless (segment.stop == 200);  /* add 100 to start (to 300), set stop to 200, this clips start   * to duration */  gst_segment_set_seek (&segment, 1.0,      GST_FORMAT_BYTES,      GST_SEEK_FLAG_NONE,      GST_SEEK_TYPE_CUR, 100, GST_SEEK_TYPE_SET, 200, &update);  fail_unless (segment.start == 200);  fail_unless (segment.stop == 200);  fail_unless (update == FALSE);  /* seek relative to end */  gst_segment_set_seek (&segment, 1.0,      GST_FORMAT_BYTES,      GST_SEEK_FLAG_NONE,      GST_SEEK_TYPE_END, -100, GST_SEEK_TYPE_END, -20, &update);  fail_unless (segment.start == 100);  fail_unless (segment.stop == 180);  fail_unless (update == TRUE);  /* completely outside */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 0, 50, &cstart, &cstop);  fail_unless (res == FALSE);  /* touching lower bound */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 50, 100, &cstart, &cstop);  fail_unless (res == FALSE);  /* partially inside */  res = gst_segment_clip (&segment, GST_FORMAT_BYTES, 50, 150, &cstart, &cstop);  fail_unless (res == TRUE);  fail_unless (cstart == 100);  fail_unless (cstop == 150);  /* inside, touching lower bound */  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);

⌨️ 快捷键说明

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