handle _TIME and _BYTE queries
authorThomas Vander Stichele <thomas@apestaart.org>
Sat, 6 Mar 2004 16:41:39 +0000 (16:41 +0000)
committerThomas Vander Stichele <thomas@apestaart.org>
Sat, 6 Mar 2004 16:41:39 +0000 (16:41 +0000)
Original commit message from CVS:
handle _TIME and _BYTE queries

ChangeLog
ext/vorbis/vorbis.c
ext/vorbis/vorbisdec.c

index aa4b17e..4f00386 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2004-03-06  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/vorbis/vorbis.c: (plugin_init):
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
+       (gst_vorbis_dec_init), (vorbis_dec_event):
+        add debug category
+        make vorbisdec handle _BYTE and _TIME queries
+
 2004-03-06  Christophe Fergeau  <teuf@gnome.org>
 
        * ext/mad/gstmad.c: (gst_mad_chain): send the average bitrate read
index a23a480..faa61a3 100644 (file)
@@ -24,6 +24,8 @@
 #include "vorbisenc.h"
 #include "vorbisdec.h"
 
+GST_DEBUG_CATEGORY (vorbisdec_debug);
+
 extern GType vorbisfile_get_type(void);
 
 static gboolean
@@ -44,6 +46,7 @@ plugin_init (GstPlugin *plugin)
   if (!gst_element_register (plugin, "vorbisdec", GST_RANK_PRIMARY, gst_vorbis_dec_get_type ()))
     return FALSE;
 
+  GST_DEBUG_CATEGORY_INIT (vorbisdec_debug, "vorbisdec", 0, "vorbis decoding element");
   return TRUE;
 }
 
index 5e961c7..64d42b4 100644 (file)
@@ -25,6 +25,9 @@
 #include <string.h>
 #include <gst/tag/tag.h>
 
+GST_DEBUG_CATEGORY_EXTERN (vorbisdec_debug);
+#define GST_CAT_DEFAULT vorbisdec_debug
+
 static GstElementDetails vorbis_dec_details = {
   "VorbisDec",
   "Codec/Decoder/Audio",
@@ -78,6 +81,9 @@ static void           vorbis_dec_chain                (GstPad *               pad,
                                                         GstData *              data);
 static GstElementStateReturn 
                        vorbis_dec_change_state         (GstElement *           element);
+static const GstFormat*
+                        vorbis_dec_get_formats          (GstPad *pad);
+
 static gboolean                vorbis_dec_src_event            (GstPad *               pad,
                                                         GstEvent *             event);
 static gboolean                vorbis_dec_src_query            (GstPad *               pad, 
@@ -106,6 +112,23 @@ gst_vorbis_dec_class_init (GstVorbisDecClass *klass)
   gstelement_class->change_state = vorbis_dec_change_state;
 }
 
+static const GstFormat *
+vorbis_dec_get_formats (GstPad *pad)
+{
+  static const GstFormat src_formats[] = {
+    GST_FORMAT_BYTES,
+    GST_FORMAT_DEFAULT,
+    GST_FORMAT_TIME,
+    0
+  };
+  static const GstFormat sink_formats[] = {
+    GST_FORMAT_BYTES,
+    GST_FORMAT_TIME,
+    0
+  };
+  return (GST_PAD_IS_SRC (pad) ? src_formats : sink_formats);
+}
+
 static GstPadLinkReturn
 vorbis_dec_link (GstPad *pad, const GstCaps *caps)
 {
@@ -143,6 +166,7 @@ gst_vorbis_dec_init (GstVorbisDec *dec)
   dec->sinkpad = gst_pad_new_from_template(
       gst_static_pad_template_get (&vorbis_dec_sink_factory), "sink");
   gst_pad_set_chain_function (dec->sinkpad, vorbis_dec_chain);
+  gst_pad_set_formats_function (dec->sinkpad, vorbis_dec_get_formats);
   gst_element_add_pad (GST_ELEMENT (dec), dec->sinkpad);
 
   dec->srcpad = gst_pad_new_from_template(
@@ -151,6 +175,7 @@ gst_vorbis_dec_init (GstVorbisDec *dec)
   gst_pad_set_getcaps_function (dec->srcpad, vorbis_dec_getcaps);
   gst_pad_set_event_function (dec->srcpad, vorbis_dec_src_event);
   gst_pad_set_query_function (dec->srcpad, vorbis_dec_src_query);
+  gst_pad_set_formats_function (dec->srcpad, vorbis_dec_get_formats);
   gst_element_add_pad (GST_ELEMENT (dec), dec->srcpad);
 
   GST_FLAG_SET (dec, GST_ELEMENT_EVENT_AWARE);
@@ -254,7 +279,7 @@ vorbis_dec_event (GstVorbisDec *dec, GstEvent *event)
     case GST_EVENT_DISCONTINUOUS:
       if (gst_event_discont_get_value (event, GST_FORMAT_DEFAULT, &value)) {
        dec->granulepos = value;
-       GST_DEBUG_OBJECT (dec, "setting granuleposition to %"G_GUINT64_FORMAT" after discont\n", value);
+       GST_DEBUG_OBJECT (dec, "setting granuleposition to %"G_GUINT64_FORMAT" after discont", value);
       } else {
        GST_WARNING_OBJECT (dec, 
            "discont event didn't include offset, we might set it wrong now");