From: Sebastian Dröge Date: Wed, 23 Jan 2008 10:34:40 +0000 (+0000) Subject: Add documentation for the xingheader plugin. X-Git-Tag: 1.19.3~507^2~20540 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=afa31cfea03063a848ba4db5aa03001301839aa2;p=platform%2Fupstream%2Fgstreamer.git Add documentation for the xingheader plugin. 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. --- diff --git a/ChangeLog b/ChangeLog index 9627278..10685b9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ 2008-01-23 Sebastian Dröge + * 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. + +2008-01-23 Sebastian Dröge + * tests/check/Makefile.am: * tests/check/elements/.cvsignore: * tests/check/elements/xingmux.c: (setup_xingmux), diff --git a/docs/plugins/Makefile.am b/docs/plugins/Makefile.am index 02517b1..e26d690 100644 --- a/docs/plugins/Makefile.am +++ b/docs/plugins/Makefile.am @@ -142,7 +142,8 @@ EXTRA_HFILES = \ $(top_srcdir)/gst/videosignal/gstvideodetect.h \ $(top_srcdir)/gst/videosignal/gstvideomark.h \ $(top_srcdir)/sys/dvb/gstdvbsrc.h \ - $(top_srcdir)/sys/glsink/gstgltestsrc.h + $(top_srcdir)/sys/glsink/gstgltestsrc.h \ + $(top_srcdir)/gst/xingheader/gstxingmux.h # Images to copy into HTML directory. HTML_IMAGES = diff --git a/docs/plugins/gst-plugins-bad-plugins-docs.sgml b/docs/plugins/gst-plugins-bad-plugins-docs.sgml index 92dfbfd..a603be0 100644 --- a/docs/plugins/gst-plugins-bad-plugins-docs.sgml +++ b/docs/plugins/gst-plugins-bad-plugins-docs.sgml @@ -60,6 +60,7 @@ + diff --git a/docs/plugins/gst-plugins-bad-plugins-sections.txt b/docs/plugins/gst-plugins-bad-plugins-sections.txt index ab4f55c..befc67c 100644 --- a/docs/plugins/gst-plugins-bad-plugins-sections.txt +++ b/docs/plugins/gst-plugins-bad-plugins-sections.txt @@ -723,3 +723,17 @@ GST_IS_WILDMIDI_CLASS GST_TYPE_WILDMIDI +
+element-xingmux +xingmux +GstXingMux + +GstXingMuxClass +GST_XING_MUX +GST_XING_MUX_CLASS +GST_IS_XING_MUX +GST_IS_XING_MUX_CLASS +GST_TYPE_XING_MUX +gst_xing_mux_get_type +
+ diff --git a/gst/xingheader/gstxingmux.c b/gst/xingheader/gstxingmux.c index d10006c..49a4628 100644 --- a/gst/xingheader/gstxingmux.c +++ b/gst/xingheader/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/xingheader/gstxingmux.h b/gst/xingheader/gstxingmux.h index 06b25a3..197fc6f 100644 --- a/gst/xingheader/gstxingmux.h +++ b/gst/xingheader/gstxingmux.h @@ -21,18 +21,40 @@ #include #include -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__ */ diff --git a/tests/check/elements/xingmux.c b/tests/check/elements/xingmux.c index 0571353..52f27ce 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 ()));