add a method that returns a proper GstClockTime
authorThomas Vander Stichele <thomas@apestaart.org>
Mon, 21 Nov 2005 22:56:33 +0000 (22:56 +0000)
committerThomas Vander Stichele <thomas@apestaart.org>
Mon, 21 Nov 2005 22:56:33 +0000 (22:56 +0000)
Original commit message from CVS:
add a method that returns a proper GstClockTime

ChangeLog
check/Makefile.am
gst-libs/gst/audio/audio.c
gst-libs/gst/audio/audio.h
tests/check/Makefile.am

index b6429843b636eee9c7dc8be0fe177a3d9ae4b708..82520601c61aa62218a117149fedbdb6aa98b005 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2005-11-21  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * check/Makefile.am:
+       * gst-libs/gst/audio/audio.c: (gst_audio_duration_from_pad_buffer):
+       * gst-libs/gst/audio/audio.h:
+         add a method that returns a proper GstClockTime
+
 2005-11-21  Tim-Philipp Müller  <tim at centricular dot net>
 
        * gst-libs/gst/interfaces/xoverlay.c: (gst_x_overlay_base_init),
index 0975bdbbf7651696f7dbd99b2521bdb48a0a755e..48a4a19b275fdeb62be14e43cdf50b888e0870e2 100644 (file)
@@ -31,6 +31,7 @@ check_PROGRAMS = \
        elements/audioconvert \
        elements/audioresample \
        elements/volume \
+       generic/states \
         pipelines/simple_launch_lines \
        clocks/selection \
        $(check_vorbis)
@@ -38,12 +39,11 @@ check_PROGRAMS = \
 # tests to fix leaks in
 VALGRIND_TO_FIX = \
        elements/audioresample \
+       generic/states \
         pipelines/simple_launch_lines
 
 # these tests don't even pass
-# generic/states: elements need state fixin' before this can be added
-noinst_PROGRAMS = \
-       generic/states
+noinst_PROGRAMS =
 
 AM_CFLAGS = $(GST_OBJ_CFLAGS) $(GST_CHECK_CFLAGS) $(CHECK_CFLAGS)
 LDADD = $(GST_OBJ_LIBS) $(GST_CHECK_LIBS) $(CHECK_LIBS)
index f82337a5da415623f5c7af2a6fbbaddadb581bb7..1e145dada75a9bf7ce2cf8bd3220eac1014329aa 100644 (file)
@@ -147,6 +147,49 @@ gst_audio_length (GstPad * pad, GstBuffer * buf)
   return length;
 }
 
+double
+gst_audio_duration_from_pad_buffer (GstPad * pad, GstBuffer * buf)
+{
+/* calculate length in nanoseconds
+ * of audio buffer buf
+ * based on capabilities of pad
+ */
+
+  long bytes = 0;
+  int width = 0;
+  int channels = 0;
+  int rate = 0;
+
+  GstClockTime length;
+
+  const GstCaps *caps = NULL;
+  GstStructure *structure;
+
+  g_assert (GST_IS_BUFFER (buf));
+  /* get caps of pad */
+  caps = GST_PAD_CAPS (pad);
+  if (caps == NULL) {
+    /* ERROR: could not get caps of pad */
+    g_warning ("gstaudio: could not get caps of pad %s:%s\n",
+        GST_ELEMENT_NAME (gst_pad_get_parent (pad)), GST_PAD_NAME (pad));
+    length = GST_CLOCK_TIME_NONE;
+  } else {
+    structure = gst_caps_get_structure (caps, 0);
+    bytes = GST_BUFFER_SIZE (buf);
+    gst_structure_get_int (structure, "width", &width);
+    gst_structure_get_int (structure, "channels", &channels);
+    gst_structure_get_int (structure, "rate", &rate);
+
+    g_assert (bytes != 0);
+    g_assert (width != 0);
+    g_assert (channels != 0);
+    g_assert (rate != 0);
+    length = (bytes * 8.0 * GST_SECOND) / (rate * channels * width);
+  }
+  /* g_print ("DEBUG: audio: returning length of %f\n", length); */
+  return length;
+}
+
 long
 gst_audio_highest_sample_value (GstPad * pad)
 /* calculate highest possible sample value
index 3821c82e5cda8960c1c6fcb6cd83c2888ddb0a35..189de51fde25c68fb842b53190db771550589b90 100644 (file)
@@ -110,6 +110,8 @@ long     gst_audio_frame_rate           (GstPad *pad);
 /* calculate length in seconds of audio buffer buf based on caps of pad */
 double   gst_audio_length               (GstPad* pad, GstBuffer* buf);
 
+double   gst_audio_duration_from_pad_buffer (GstPad * pad, GstBuffer * buf);
+
 /* calculate highest possible sample value based on capabilities of pad */
 long     gst_audio_highest_sample_value (GstPad* pad);
 
index 0975bdbbf7651696f7dbd99b2521bdb48a0a755e..48a4a19b275fdeb62be14e43cdf50b888e0870e2 100644 (file)
@@ -31,6 +31,7 @@ check_PROGRAMS = \
        elements/audioconvert \
        elements/audioresample \
        elements/volume \
+       generic/states \
         pipelines/simple_launch_lines \
        clocks/selection \
        $(check_vorbis)
@@ -38,12 +39,11 @@ check_PROGRAMS = \
 # tests to fix leaks in
 VALGRIND_TO_FIX = \
        elements/audioresample \
+       generic/states \
         pipelines/simple_launch_lines
 
 # these tests don't even pass
-# generic/states: elements need state fixin' before this can be added
-noinst_PROGRAMS = \
-       generic/states
+noinst_PROGRAMS =
 
 AM_CFLAGS = $(GST_OBJ_CFLAGS) $(GST_CHECK_CFLAGS) $(CHECK_CFLAGS)
 LDADD = $(GST_OBJ_LIBS) $(GST_CHECK_LIBS) $(CHECK_LIBS)