tests/check/pipelines/: Port to bufferstraw.
authorAndy Wingo <wingo@pobox.com>
Fri, 21 Jul 2006 15:59:24 +0000 (15:59 +0000)
committerAndy Wingo <wingo@pobox.com>
Fri, 21 Jul 2006 15:59:24 +0000 (15:59 +0000)
Original commit message from CVS:
2006-07-21  Andy Wingo  <wingo@pobox.com>

* tests/check/pipelines/vorbisenc.c:
* tests/check/pipelines/theoraenc.c: Port to bufferstraw.
Bufferstraw was actually factored out of these tests. Now we share
code yay.

ChangeLog
common
configure.ac
tests/check/pipelines/theoraenc.c
tests/check/pipelines/vorbisenc.c

index 5e88a27f3a8f3ce9fdf9f627ecdc6e99a1365110..27813d0676c61048e5829a972cb4dc06436ed60a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2006-07-21  Andy Wingo  <wingo@pobox.com>
+
+       * tests/check/pipelines/vorbisenc.c: 
+       * tests/check/pipelines/theoraenc.c: Port to bufferstraw.
+       Bufferstraw was actually factored out of these tests. Now we share
+       code yay.
+
+       * configure.ac (GST_MAJORMINOR): Rev core requirements to 0.10.9.1
+       for bufferstraw addition to gstcheck.
+
 2006-07-21  Wim Taymans  <wim@fluendo.com>
 
        * ext/theora/theoradec.c: (clip_buffer):
diff --git a/common b/common
index 53ecdc0c97a2992e5abeddd41d514bc142401e5d..c22b0a7fbd8ebcf0a531f2898163d9b834f89ab1 160000 (submodule)
--- a/common
+++ b/common
@@ -1 +1 @@
-Subproject commit 53ecdc0c97a2992e5abeddd41d514bc142401e5d
+Subproject commit c22b0a7fbd8ebcf0a531f2898163d9b834f89ab1
index fe0ec460409ebb723e686c8db4b00f62c93f686e..706dbfe79641453404655c3c46862901031acda3 100644 (file)
@@ -52,7 +52,7 @@ dnl AS_LIBTOOL_TAGS
 AM_PROG_LIBTOOL
 
 dnl *** required versions of GStreamer stuff ***
-GST_REQ=0.10.8.1
+GST_REQ=0.10.9.1
 
 dnl *** autotools stuff ****
 
index 327f436e44b4a1a1330fee88602c8ce549e914d4..03d2aaa70e30b2b30fca40bedeb38dfa637fc5b6 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 #include <gst/check/gstcheck.h>
+#include <gst/check/gstbufferstraw.h>
 
 #ifndef GST_DISABLE_PARSE
 
 /* I know all of these have a shift of 6 bits */
 #define GRANULEPOS_SHIFT 6
 
-static GCond *cond = NULL;
-static GMutex *lock = NULL;
-static GstBuffer *buf = NULL;
-static gulong id;
-
-/* called for every buffer.  Waits until the global "buf" variable is unset,
- * then sets it to the buffer received, and signals. */
-static gboolean
-buffer_probe (GstPad * pad, GstBuffer * buffer, gpointer unused)
-{
-  g_mutex_lock (lock);
-
-  while (buf != NULL)
-    g_cond_wait (cond, lock);
-
-  /* increase the refcount because we store it globally for others to use */
-  buf = gst_buffer_ref (buffer);
-
-  g_cond_signal (cond);
-
-  g_mutex_unlock (lock);
-
-  return TRUE;
-}
-
-static void
-start_pipeline (GstElement * bin, GstPad * pad)
-{
-  GstStateChangeReturn ret;
-
-  id = gst_pad_add_buffer_probe (pad, G_CALLBACK (buffer_probe), NULL);
-
-  cond = g_cond_new ();
-  lock = g_mutex_new ();
-
-  ret = gst_element_set_state (bin, GST_STATE_PLAYING);
-  fail_if (ret == GST_STATE_CHANGE_FAILURE, "Could not start test pipeline");
-  if (ret == GST_STATE_CHANGE_ASYNC) {
-    ret = gst_element_get_state (bin, NULL, NULL, GST_CLOCK_TIME_NONE);
-    fail_if (ret != GST_STATE_CHANGE_SUCCESS, "Could not start test pipeline");
-  }
-}
-
-/* waits until the probe receives a buffer.  will catch every buffer */
-static GstBuffer *
-get_buffer (GstElement * bin, GstPad * pad)
-{
-  GstBuffer *ret;
-
-  g_mutex_lock (lock);
-
-  while (buf == NULL)
-    g_cond_wait (cond, lock);
-
-  ret = buf;
-  buf = NULL;
-
-  g_cond_signal (cond);
-
-  g_mutex_unlock (lock);
-
-  return ret;
-}
-
-static void
-stop_pipeline (GstElement * bin, GstPad * pad)
-{
-  GstStateChangeReturn ret;
-
-  g_mutex_lock (lock);
-  if (buf)
-    gst_buffer_unref (buf);
-  buf = NULL;
-  gst_pad_remove_buffer_probe (pad, (guint) id);
-  id = 0;
-  g_cond_signal (cond);
-  g_mutex_unlock (lock);
-
-  ret = gst_element_set_state (bin, GST_STATE_NULL);
-  fail_if (ret == GST_STATE_CHANGE_FAILURE, "Could not stop test pipeline");
-  if (ret == GST_STATE_CHANGE_ASYNC) {
-    ret = gst_element_get_state (bin, NULL, NULL, GST_CLOCK_TIME_NONE);
-    fail_if (ret != GST_STATE_CHANGE_SUCCESS, "Could not stop test pipeline");
-  }
-
-  g_mutex_lock (lock);
-  if (buf)
-    gst_buffer_unref (buf);
-  buf = NULL;
-  g_mutex_unlock (lock);
-
-  g_mutex_free (lock);
-  g_cond_free (cond);
-
-  lock = NULL;
-  cond = NULL;
-}
-
 static void
 check_buffer_is_header (GstBuffer * buffer, gboolean is_header)
 {
@@ -228,24 +131,24 @@ GST_START_TEST (test_granulepos_offset)
     gst_object_unref (sink);
   }
 
-  start_pipeline (bin, pad);
+  gst_buffer_straw_start_pipeline (bin, pad);
 
   /* header packets should have timestamp == NONE, granulepos 0, IN_CAPS */
-  buffer = get_buffer (bin, pad);
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
   check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_granulepos (buffer, 0);
   check_buffer_is_header (buffer, TRUE);
   gst_buffer_unref (buffer);
 
-  buffer = get_buffer (bin, pad);
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
   check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_granulepos (buffer, 0);
   check_buffer_is_header (buffer, TRUE);
   gst_buffer_unref (buffer);
 
-  buffer = get_buffer (bin, pad);
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
   check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_granulepos (buffer, 0);
@@ -262,7 +165,7 @@ GST_START_TEST (test_granulepos_offset)
      * same value due to loss of precision with granulepos. theoraenc does
      * take care to timestamp correctly based on the offset of the input data
      * however, so it does do sub-granulepos timestamping. */
-    buffer = get_buffer (bin, pad);
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
     last_granulepos = GST_BUFFER_OFFSET_END (buffer);
     check_buffer_timestamp (buffer, TIMESTAMP_OFFSET);
     /* don't really have a good way of checking duration... */
@@ -274,7 +177,7 @@ GST_START_TEST (test_granulepos_offset)
     gst_buffer_unref (buffer);
 
     /* check continuity with the next buffer */
-    buffer = get_buffer (bin, pad);
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
     check_buffer_timestamp (buffer, next_timestamp);
     check_buffer_duration (buffer,
         gst_util_uint64_scale (GST_BUFFER_OFFSET_END (buffer), GST_SECOND,
@@ -286,7 +189,7 @@ GST_START_TEST (test_granulepos_offset)
     gst_buffer_unref (buffer);
   }
 
-  stop_pipeline (bin, pad);
+  gst_buffer_straw_stop_pipeline (bin, pad);
 
   gst_object_unref (pad);
   gst_object_unref (bin);
@@ -322,24 +225,24 @@ GST_START_TEST (test_continuity)
     gst_object_unref (sink);
   }
 
-  start_pipeline (bin, pad);
+  gst_buffer_straw_start_pipeline (bin, pad);
 
   /* header packets should have timestamp == NONE, granulepos 0 */
-  buffer = get_buffer (bin, pad);
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
   check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_granulepos (buffer, 0);
   check_buffer_is_header (buffer, TRUE);
   gst_buffer_unref (buffer);
 
-  buffer = get_buffer (bin, pad);
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
   check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_granulepos (buffer, 0);
   check_buffer_is_header (buffer, TRUE);
   gst_buffer_unref (buffer);
 
-  buffer = get_buffer (bin, pad);
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
   check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_granulepos (buffer, 0);
@@ -356,7 +259,7 @@ GST_START_TEST (test_continuity)
      * same value due to loss of precision with granulepos. theoraenc does
      * take care to timestamp correctly based on the offset of the input data
      * however, so it does do sub-granulepos timestamping. */
-    buffer = get_buffer (bin, pad);
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
     last_granulepos = GST_BUFFER_OFFSET_END (buffer);
     check_buffer_timestamp (buffer, 0);
     /* plain division because I know the answer is exact */
@@ -369,7 +272,7 @@ GST_START_TEST (test_continuity)
     gst_buffer_unref (buffer);
 
     /* check continuity with the next buffer */
-    buffer = get_buffer (bin, pad);
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
     check_buffer_timestamp (buffer, next_timestamp);
     check_buffer_duration (buffer, GST_SECOND / 10);
     check_buffer_granulepos (buffer, 1);
@@ -378,7 +281,7 @@ GST_START_TEST (test_continuity)
     gst_buffer_unref (buffer);
   }
 
-  stop_pipeline (bin, pad);
+  gst_buffer_straw_stop_pipeline (bin, pad);
 
   gst_object_unref (pad);
   gst_object_unref (bin);
index 395588d2ee56975a02085ab9405159a376549c2e..6919d26f30d138eb0d111f58f1ebf05c1039106d 100644 (file)
  */
 
 #include <gst/check/gstcheck.h>
+#include <gst/check/gstbufferstraw.h>
 
 #ifndef GST_DISABLE_PARSE
 
 #define TIMESTAMP_OFFSET G_GINT64_CONSTANT(3249870963)
 
-static GCond *cond = NULL;
-static GMutex *lock = NULL;
-static GstBuffer *buf = NULL;
-static gulong id;
-
-static gboolean
-buffer_probe (GstPad * pad, GstBuffer * buffer, gpointer unused)
-{
-  g_mutex_lock (lock);
-
-  while (buf != NULL)
-    g_cond_wait (cond, lock);
-
-  buf = gst_buffer_ref (buffer);
-
-  g_cond_signal (cond);
-
-  g_mutex_unlock (lock);
-
-  return TRUE;
-}
-
-static void
-start_pipeline (GstElement * bin, GstPad * pad)
-{
-  id = gst_pad_add_buffer_probe (pad, G_CALLBACK (buffer_probe), NULL);
-
-  cond = g_cond_new ();
-  lock = g_mutex_new ();
-
-  gst_element_set_state (bin, GST_STATE_PLAYING);
-
-}
-
-static GstBuffer *
-get_buffer (GstElement * bin, GstPad * pad)
-{
-  GstBuffer *ret;
-
-  g_mutex_lock (lock);
-
-  while (buf == NULL)
-    g_cond_wait (cond, lock);
-
-  ret = buf;
-  buf = NULL;
-
-  g_cond_signal (cond);
-
-  g_mutex_unlock (lock);
-
-  return ret;
-}
-
-static void
-stop_pipeline (GstElement * bin, GstPad * pad)
-{
-  g_mutex_lock (lock);
-  if (buf)
-    gst_buffer_unref (buf);
-  buf = NULL;
-  g_cond_signal (cond);
-  gst_pad_remove_buffer_probe (pad, (guint) id);
-  id = 0;
-  g_mutex_unlock (lock);
-
-  gst_element_set_state (bin, GST_STATE_NULL);
-
-  g_mutex_lock (lock);
-  if (buf)
-    gst_buffer_unref (buf);
-  buf = NULL;
-  g_mutex_unlock (lock);
-
-  g_mutex_free (lock);
-  g_cond_free (cond);
-
-  lock = NULL;
-  cond = NULL;
-}
-
 static void
 check_buffer_timestamp (GstBuffer * buffer, GstClockTime timestamp)
 {
@@ -194,10 +114,10 @@ GST_START_TEST (test_granulepos_offset)
     gst_object_unref (sink);
   }
 
-  start_pipeline (bin, pad);
+  gst_buffer_straw_start_pipeline (bin, pad);
 
   /* header packets should have timestamp == NONE, granulepos 0 */
-  buffer = get_buffer (bin, pad);
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
   GST_DEBUG ("Got buffer in test");
   check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
@@ -205,13 +125,13 @@ GST_START_TEST (test_granulepos_offset)
   gst_buffer_unref (buffer);
   GST_DEBUG ("Unreffed buffer in test");
 
-  buffer = get_buffer (bin, pad);
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
   check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_granulepos (buffer, 0);
   gst_buffer_unref (buffer);
 
-  buffer = get_buffer (bin, pad);
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
   check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_granulepos (buffer, 0);
@@ -227,7 +147,7 @@ GST_START_TEST (test_granulepos_offset)
      * value due to loss of precision with granulepos. vorbisenc does take care
      * to timestamp correctly based on the offset of the input data however, so
      * it does do sub-granulepos timestamping. */
-    buffer = get_buffer (bin, pad);
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
     last_granulepos = GST_BUFFER_OFFSET_END (buffer);
     check_buffer_timestamp (buffer, TIMESTAMP_OFFSET);
     /* don't really have a good way of checking duration... */
@@ -239,7 +159,7 @@ GST_START_TEST (test_granulepos_offset)
     gst_buffer_unref (buffer);
 
     /* check continuity with the next buffer */
-    buffer = get_buffer (bin, pad);
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
     check_buffer_timestamp (buffer, next_timestamp);
     check_buffer_duration (buffer,
         gst_util_uint64_scale (GST_BUFFER_OFFSET_END (buffer), GST_SECOND,
@@ -251,7 +171,7 @@ GST_START_TEST (test_granulepos_offset)
     gst_buffer_unref (buffer);
   }
 
-  stop_pipeline (bin, pad);
+  gst_buffer_straw_stop_pipeline (bin, pad);
 
   gst_object_unref (pad);
   gst_object_unref (bin);
@@ -286,22 +206,22 @@ GST_START_TEST (test_timestamps)
     gst_object_unref (sink);
   }
 
-  start_pipeline (bin, pad);
+  gst_buffer_straw_start_pipeline (bin, pad);
 
   /* check header packets */
-  buffer = get_buffer (bin, pad);
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
   check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_granulepos (buffer, 0);
   gst_buffer_unref (buffer);
 
-  buffer = get_buffer (bin, pad);
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
   check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_granulepos (buffer, 0);
   gst_buffer_unref (buffer);
 
-  buffer = get_buffer (bin, pad);
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
   check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
   check_buffer_granulepos (buffer, 0);
@@ -312,7 +232,7 @@ GST_START_TEST (test_timestamps)
     gint64 last_granulepos;
 
     /* first buffer has timestamp 0 */
-    buffer = get_buffer (bin, pad);
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
     last_granulepos = GST_BUFFER_OFFSET_END (buffer);
     check_buffer_timestamp (buffer, 0);
     /* don't really have a good way of checking duration... */
@@ -323,7 +243,7 @@ GST_START_TEST (test_timestamps)
     gst_buffer_unref (buffer);
 
     /* check continuity with the next buffer */
-    buffer = get_buffer (bin, pad);
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
     check_buffer_timestamp (buffer, next_timestamp);
     check_buffer_duration (buffer,
         gst_util_uint64_scale (GST_BUFFER_OFFSET_END (buffer), GST_SECOND,
@@ -335,7 +255,7 @@ GST_START_TEST (test_timestamps)
     gst_buffer_unref (buffer);
   }
 
-  stop_pipeline (bin, pad);
+  gst_buffer_straw_stop_pipeline (bin, pad);
 
   gst_object_unref (pad);
   gst_object_unref (bin);