diff --git a/gst/mpegaudioparse/gstxingmux.c b/gst/mpegaudioparse/gstxingmux.c
index d10006ccd7..49a4628b16 100644
--- a/gst/mpegaudioparse/gstxingmux.c
+++ b/gst/mpegaudioparse/gstxingmux.c
@@ -20,6 +20,31 @@
/* Xing SDK: http://www.mp3-tech.org/programmer/sources/vbrheadersdk.zip */
+
+/**
+ * SECTION:element-xingmux
+ * @short_description: Adds a Xing header to MP3 files
+ *
+ *
+ *
+ * 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.
+ *
+ *
+ * This element will remove any existing Xing, LAME or VBRI headers from the beginning of the file.
+ *
+ * Example launch line
+ *
+ *
+ * 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
+ *
+ *
+ *
+ */
+
#ifdef HAVE_CONFIG_H
#include
#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);
diff --git a/gst/mpegaudioparse/gstxingmux.h b/gst/mpegaudioparse/gstxingmux.h
index 06b25a35db..197fc6f2a2 100644
--- a/gst/mpegaudioparse/gstxingmux.h
+++ b/gst/mpegaudioparse/gstxingmux.h
@@ -21,33 +21,10 @@
#include
#include
-typedef struct _GstXingSeekEntry
-{
- gint64 timestamp;
- gint byte;
-} GstXingSeekEntry;
+#ifndef __GST_XINGMUX_H__
+#define __GST_XINGMUX_H__
-/* Definition of structure storing data for this element. */
-typedef struct _GstXingMux {
- GstElement element;
-
- GstPad *sinkpad, *srcpad;
-
- GstAdapter *adapter;
- GstClockTime duration;
- guint64 byte_count;
- guint64 frame_count;
- GList *seek_table;
- gboolean sent_xing;
-
- /* 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;
+G_BEGIN_DECLS
/* Standard macros for defining types for this element. */
#define GST_TYPE_XING_MUX \
@@ -61,5 +38,48 @@ typedef struct _GstXingMuxClass {
#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. */
+
+/**
+ * GstXingMux:
+ *
+ * Opaque data structure.
+ */
+struct _GstXingMux {
+ GstElement element;
+
+ GstPad *sinkpad, *srcpad;
+
+ /* < private > */
+
+ GstAdapter *adapter;
+ GstClockTime duration;
+ guint64 byte_count;
+ guint64 frame_count;
+ GList *seek_table;
+ gboolean sent_xing;
+
+ /* Copy of the first frame header */
+ guint32 first_header;
+};
+
+/* Standard definition defining a class for this element. */
+
+/**
+ * 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__ */
diff --git a/tests/check/elements/xingmux.c b/tests/check/elements/xingmux.c
index 0571353166..52f27ceb24 100644
--- a/tests/check/elements/xingmux.c
+++ b/tests/check/elements/xingmux.c
@@ -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 ()));