Add documentation for the xingheader plugin.
authorSebastian Dröge <slomo@circular-chaos.org>
Wed, 23 Jan 2008 10:34:40 +0000 (10:34 +0000)
committerSebastian Dröge <slomo@circular-chaos.org>
Wed, 23 Jan 2008 10:34:40 +0000 (10:34 +0000)
Original commit message from CVS:
* docs/plugins/Makefile.am:
* docs/plugins/gst-plugins-bad-plugins-docs.sgml:
* docs/plugins/gst-plugins-bad-plugins-sections.txt:
* gst/xingheader/gstxingmux.c:
* gst/xingheader/gstxingmux.h:
Add documentation for the xingheader plugin.
* tests/check/elements/xingmux.c: (GST_START_TEST):
Set element state to PLAYING before doing something else.

gst/mpegaudioparse/gstxingmux.c
gst/mpegaudioparse/gstxingmux.h
tests/check/elements/xingmux.c

index d10006ccd769fcee7b878e18faf161b98022e02b..49a4628b16511d3e3f45feeb1c5f62e4df872b20 100644 (file)
 
 /* Xing SDK: http://www.mp3-tech.org/programmer/sources/vbrheadersdk.zip */
 
+
+/**
+ * SECTION:element-xingmux
+ * @short_description: Adds a Xing header to MP3 files
+ *
+ * <refsect2>
+ * <para>
+ * xingmux adds a Xing header to MP3 files. This contains information about the duration and size
+ * of the file and a seek table and is very useful for getting an almost correct duration and better
+ * seeking on VBR MP3 files.
+ * </para>
+ * <para>
+ * This element will remove any existing Xing, LAME or VBRI headers from the beginning of the file.
+ * </para>
+ * <title>Example launch line</title>
+ * <para>
+ * <programlisting>
+ * gst-launch audiotestsrc num-buffers=1000 ! audioconvert ! lame ! xingmux ! filesink location=test.mp3
+ * gst-launch filesrc location=test.mp3 ! xingmux ! filesink location=test2.mp3
+ * gst-launch filesrc location=test.mp3 ! mp3parse ! xingmux ! filesink location=test2.mp3
+ * </programlisting>
+ * </para>
+ * </refsect2>
+ */
+
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
@@ -38,6 +63,12 @@ GST_BOILERPLATE (GstXingMux, gst_xing_mux, GstElement, GST_TYPE_ELEMENT);
 #define GST_XING_TOC_FIELD     (1 << 2)
 #define GST_XING_QUALITY_FIELD (1 << 3)
 
+typedef struct _GstXingSeekEntry
+{
+  gint64 timestamp;
+  gint byte;
+} GstXingSeekEntry;
+
 static void gst_xing_mux_finalize (GObject * obj);
 static GstStateChangeReturn
 gst_xing_mux_change_state (GstElement * element, GstStateChange transition);
index 06b25a35dbc697fff9407b6a4c8a048733771b23..197fc6f2a28ad9e8e35685f01df63578ec94c5dd 100644 (file)
 #include <gst/gst.h>
 #include <gst/base/gstadapter.h>
 
-typedef struct _GstXingSeekEntry
-{
-  gint64 timestamp;
-  gint byte;
-} GstXingSeekEntry;
+#ifndef __GST_XINGMUX_H__
+#define __GST_XINGMUX_H__
+
+G_BEGIN_DECLS
+
+/* Standard macros for defining types for this element.  */
+#define GST_TYPE_XING_MUX \
+  (gst_xing_mux_get_type())
+#define GST_XING_MUX(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_XING_MUX,GstXingMux))
+#define GST_XING_MUX_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_XING_MUX,GstXingMuxClass))
+#define GST_IS_XING_MUX(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_XING_MUX))
+#define GST_IS_XING_MUX_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_XING_MUX))
+
+typedef struct _GstXingMux GstXingMux;
+typedef struct _GstXingMuxClass GstXingMuxClass;
 
 /* Definition of structure storing data for this element. */
-typedef struct _GstXingMux {
+
+/**
+ * GstXingMux:
+ *
+ * Opaque data structure.
+ */
+struct _GstXingMux {
   GstElement element;
 
   GstPad *sinkpad, *srcpad;
 
+  /* < private > */
+
   GstAdapter *adapter;
   GstClockTime duration;
   guint64 byte_count;
@@ -42,24 +64,22 @@ typedef struct _GstXingMux {
 
   /* Copy of the first frame header */
   guint32 first_header;
-} GstXingMux;
+};
 
 /* Standard definition defining a class for this element. */
-typedef struct _GstXingMuxClass {
-  GstElementClass parent_class;
-} GstXingMuxClass;
 
-/* Standard macros for defining types for this element.  */
-#define GST_TYPE_XING_MUX \
-  (gst_xing_mux_get_type())
-#define GST_XING_MUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_XING_MUX,GstXingMux))
-#define GST_XING_MUX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_XING_MUX,GstXingMuxClass))
-#define GST_IS_XING_MUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_XING_MUX))
-#define GST_IS_XING_MUX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_XING_MUX))
+/**
+ * GstXingMuxClass:
+ *
+ * Opaque data structure.
+ */
+struct _GstXingMuxClass {
+  GstElementClass parent_class;
+};
 
 /* Standard function returning type information. */
-GType gst_my_filter_get_type (void);
+GType gst_xing_mux_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_XINGMUX_H__ */
index 05713531668319deb1cca4804115fe76aa762a39..52f27ceb2473922759496799024e7f7256923aeb 100644 (file)
@@ -80,20 +80,20 @@ GST_START_TEST (test_xing_remux)
   GstElement *xingmux;
   GstBuffer *inbuffer;
   GList *it;
-  guint8 *verify_data;
+  const guint8 *verify_data;
 
   xingmux = setup_xingmux ();
 
+  fail_unless (gst_element_set_state (xingmux,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+      "could not set to playing");
+
   inbuffer = gst_buffer_new_and_alloc (sizeof (test_xing));
   memcpy (GST_BUFFER_DATA (inbuffer), test_xing, sizeof (test_xing));
 
   gst_buffer_set_caps (inbuffer, GST_PAD_CAPS (mysrcpad));
   ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
 
-
-  /* FIXME: why are the xingmux pads flushing? */
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_flush_stop ()));
-
   /* pushing gives away my reference ... */
   fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
   fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));