lame: hook up to build system
authorTim-Philipp Müller <tim@centricular.com>
Sat, 26 Aug 2017 08:03:08 +0000 (09:03 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 26 Aug 2017 08:14:55 +0000 (09:14 +0100)
https://bugzilla.gnome.org/show_bug.cgi?id=774252

17 files changed:
REQUIREMENTS
configure.ac
docs/plugins/Makefile.am
docs/plugins/gst-plugins-good-plugins-docs.sgml
docs/plugins/gst-plugins-good-plugins-sections.txt
docs/plugins/gst-plugins-good-plugins.args
docs/plugins/gst-plugins-good-plugins.hierarchy
docs/plugins/gst-plugins-good-plugins.interfaces
docs/plugins/inspect/plugin-lame.xml [new file with mode: 0644]
ext/Makefile.am
ext/lame/Makefile.am
ext/lame/meson.build
ext/meson.build
po/POTFILES.in
tests/check/Makefile.am
tests/check/gst-plugins-good.supp
tests/check/meson.build

index d399ea0..0c5accd 100644 (file)
@@ -125,6 +125,12 @@ DebianPackage:  libdv4-dev
 Plugins:        dv (dvdec)
 URL:            http://libdv.sourceforge.net/
 
+Package:       liblame
+Version:       >= 3.98
+DebianPackage: libmp3lame-dev
+Plugins:       lame (lamemp3enc)
+URL:           http://www.mp3dev.org/mp3/
+
 Package:       libmpg123
 Version:        >= 1.3
 DebianPackage:  libpng12-dev
index 9dc76c8..ea1c91c 100644 (file)
@@ -665,6 +665,26 @@ AG_GST_CHECK_FEATURE(JPEG, [jpeg library], jpeg, [
   AC_SUBST(JPEG_LIBS)
 ])
 
+dnl *** lame ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_LAME, true)
+AG_GST_CHECK_FEATURE(LAME, [lame mp3 encoder library], lame, [
+  AG_GST_CHECK_LIBHEADER(LAME, mp3lame, lame_init, $LIBM, lame/lame.h,
+  [
+    HAVE_LAME="yes"
+    LAME_LIBS="-lmp3lame $LIBM"
+    dnl is lame presets available
+    LAME_CFLAGS=""
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <lame/lame.h>]], [[ int preset = MEDIUM ]])],[LAME_CFLAGS="-DGSTLAME_PRESET"],[LAME_CFLAGS=""
+    ])
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <lame/lame.h>]], [[
+        void *ptr = &lame_set_VBR_quality
+      ]])],[LAME_CFLAGS="$LAME_CFLAGS -DHAVE_LAME_SET_VBR_QUALITY"],[LAME_CFLAGS="$LAME_CFLAGS"
+    ])
+  AC_SUBST(LAME_CFLAGS)
+  AC_SUBST(LAME_LIBS)
+  ])
+])
+
 dnl *** libcaca ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_LIBCACA, true)
 AG_GST_CHECK_FEATURE(LIBCACA, [libcaca coloured ASCII art], cacasink, [
@@ -878,6 +898,7 @@ AM_CONDITIONAL(USE_FLAC, false)
 AM_CONDITIONAL(USE_GDK_PIXBUF, false)
 AM_CONDITIONAL(USE_JACK, false)
 AM_CONDITIONAL(USE_JPEG, false)
+AM_CONDITIONAL(USE_LAME, false)
 AM_CONDITIONAL(USE_LIBCACA, false)
 AM_CONDITIONAL(USE_LIBDV, false)
 AM_CONDITIONAL(USE_LIBIEC61883, false)
@@ -1021,6 +1042,7 @@ ext/flac/Makefile
 ext/gdk_pixbuf/Makefile
 ext/jack/Makefile
 ext/jpeg/Makefile
+ext/lame/Makefile
 ext/libcaca/Makefile
 ext/libpng/Makefile
 ext/mpg123/Makefile
index 54069c7..ae34a1c 100644 (file)
@@ -64,6 +64,7 @@ EXTRA_HFILES = \
        $(top_srcdir)/ext/jack/gstjackaudiosink.h \
        $(top_srcdir)/ext/jpeg/gstjpegdec.h \
        $(top_srcdir)/ext/jpeg/gstjpegenc.h \
+       $(top_srcdir)/ext/lame/gstlamemp3enc.h \
        $(top_srcdir)/ext/libcaca/gstcacasink.h \
        $(top_srcdir)/ext/libpng/gstpngdec.h \
        $(top_srcdir)/ext/libpng/gstpngenc.h \
index 48bca35..2ba9612 100644 (file)
@@ -99,6 +99,7 @@
     <xi:include href="xml/element-jackaudiosrc.xml" />
     <xi:include href="xml/element-jpegdec.xml" />
     <xi:include href="xml/element-jpegenc.xml" />
+    <xi:include href="xml/element-lamemp3enc.xml" />
     <xi:include href="xml/element-level-example.xml" />
     <xi:include href="xml/element-level.xml" />
     <xi:include href="xml/element-matroskademux.xml" />
     <xi:include href="xml/plugin-isomp4.xml" />
     <xi:include href="xml/plugin-jack.xml" />
     <xi:include href="xml/plugin-jpeg.xml" />
+    <xi:include href="xml/plugin-lame.xml" />
     <xi:include href="xml/plugin-level.xml" />
     <xi:include href="xml/plugin-matroska.xml" />
     <xi:include href="xml/plugin-monoscope.xml" />
index 8517061..506f63a 100644 (file)
@@ -1284,6 +1284,21 @@ gst_jpeg_enc_get_type
 </SECTION>
 
 <SECTION>
+<FILE>element-lamemp3enc</FILE>
+<TITLE>lamemp3enc</TITLE>
+GstLameMP3Enc
+<SUBSECTION Standard>
+GstLameMP3EncClass
+GST_LAMEMP3ENC
+GST_LAMEMP3ENC_CLASS
+GST_IS_LAMEMP3ENC
+GST_IS_LAMEMP3ENC_CLASS
+GST_TYPE_LAMEMP3ENC
+gst_lamemp3enc_get_type
+gst_lamemp3enc_register
+</SECTION>
+
+<SECTION>
 <FILE>element-level</FILE>
 <TITLE>level</TITLE>
 GstLevel
index ad60b1e..4a6b3c6 100644 (file)
 <DEFAULT>NULL</DEFAULT>
 </ARG>
 
+<ARG>
+<NAME>GstLameMP3Enc::bitrate</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[8,320]</RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Bitrate (kb/s)</NICK>
+<BLURB>Bitrate in kbit/sec (Only valid if target is bitrate, for CBR one of 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 or 320).</BLURB>
+<DEFAULT>128</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstLameMP3Enc::cbr</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>CBR</NICK>
+<BLURB>Enforce constant bitrate encoding (Only valid if target is bitrate).</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstLameMP3Enc::encoding-engine-quality</NAME>
+<TYPE>GstLameMP3EncEncodingEngineQuality</TYPE>
+<RANGE></RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Encoding Engine Quality</NICK>
+<BLURB>Quality/speed of the encoding engine, this does not affect the bitrate!.</BLURB>
+<DEFAULT>Standard</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstLameMP3Enc::mono</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Mono</NICK>
+<BLURB>Enforce mono encoding.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstLameMP3Enc::quality</NAME>
+<TYPE>gfloat</TYPE>
+<RANGE>[0,9.999]</RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Quality</NICK>
+<BLURB>VBR Quality from 0 to 10, 0 being the best (Only valid if target is quality).</BLURB>
+<DEFAULT>4</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstLameMP3Enc::target</NAME>
+<TYPE>GstLameMP3EncTarget</TYPE>
+<RANGE></RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Target</NICK>
+<BLURB>Optimize for quality or bitrate.</BLURB>
+<DEFAULT>Quality</DEFAULT>
+</ARG>
+
index a928dc5..6e101cb 100644 (file)
@@ -33,6 +33,7 @@ GObject
         GstAudioEncoder
           GstALawEnc
           GstFlacEnc
+          GstLameMP3Enc
           GstMuLawEnc
           GstSpeexEnc
           GstWavpackEnc
index 14fe6cd..2025f2b 100644 (file)
@@ -45,6 +45,7 @@ GstIirEqualizer3Bands GstChildProxy GstPreset
 GstIirEqualizerNBands GstChildProxy
 GstIirEqualizerNBands GstChildProxy GstPreset
 GstJpegEnc GstPreset
+GstLameMP3Enc GstPreset
 GstMJ2Mux GstTagSetter GstTagXmpWriter
 GstMJ2Mux GstTagSetter GstTagXmpWriter GstPreset
 GstMP4Mux GstTagSetter GstTagXmpWriter
diff --git a/docs/plugins/inspect/plugin-lame.xml b/docs/plugins/inspect/plugin-lame.xml
new file mode 100644 (file)
index 0000000..67fc2e6
--- /dev/null
@@ -0,0 +1,34 @@
+<plugin>
+  <name>lame</name>
+  <description>Encode MP3s with LAME</description>
+  <filename>../../ext/lame/.libs/libgstlame.so</filename>
+  <basename>libgstlame.so</basename>
+  <version>1.13.0.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-good</source>
+  <package>GStreamer Good Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>lamemp3enc</name>
+      <longname>L.A.M.E. mp3 encoder</longname>
+      <class>Codec/Encoder/Audio</class>
+      <description>High-quality free MP3 encoder</description>
+      <author>Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 }, channels=(int)1; audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 }, channels=(int)2, channel-mask=(bitmask)0x0000000000000003</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/mpeg, mpegversion=(int)1, layer=(int)3, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 }, channels=(int)[ 1, 2 ]</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
\ No newline at end of file
index 1bb540b..fee653f 100644 (file)
@@ -34,6 +34,12 @@ else
 JPEG_DIR =
 endif
 
+if USE_LAME
+LAME_DIR = lame
+else
+LAME_DIR =
+endif
+
 if USE_LIBCACA
 LIBCACA_DIR = libcaca
 else
@@ -115,6 +121,7 @@ SUBDIRS = \
        $(GDK_PIXBUF_DIR) \
        $(JACK_DIR) \
        $(JPEG_DIR) \
+       $(LAME_DIR) \
        $(LIBCACA_DIR) \
        $(LIBDV_DIR) \
        $(LIBMNG_DIR) \
@@ -136,6 +143,7 @@ DIST_SUBDIRS = \
        gdk_pixbuf \
        jack \
        jpeg \
+       lame \
        libcaca \
        libpng \
        mpg123 \
index 5e5b3a0..46198c8 100644 (file)
@@ -3,7 +3,7 @@ plugin_LTLIBRARIES = libgstlame.la
 libgstlame_la_SOURCES = gstlamemp3enc.c plugin.c
 libgstlame_la_CFLAGS = \
         $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(LAME_CFLAGS)
-libgstlame_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) \
+libgstlame_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) \
        $(GST_BASE_LIBS) $(GST_LIBS) $(LAME_LIBS)
 libgstlame_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 
index 2812cb9..e3e61b6 100644 (file)
@@ -10,7 +10,7 @@ if lame_dep.found() and cc.has_header_symbol('lame/lame.h', 'lame_init')
   endif
   lame = library('gstlame',
     ['gstlamemp3enc.c', 'plugin.c'],
-    c_args : ugly_args + lame_extra_c_args,
+    c_args : gst_plugins_good_args + lame_extra_c_args,
     include_directories : [configinc, libsinc],
     dependencies : [gstaudio_dep, lame_dep],
     install : true,
index 92f75ef..3bc8c82 100644 (file)
@@ -4,6 +4,7 @@ subdir('flac')
 subdir('gdk_pixbuf')
 subdir('jack')
 subdir('jpeg')
+subdir('lame')
 subdir('libcaca')
 # FIXME: dv plugin fails to link with msvc, wants pthread.lib
 if cc.get_id() != 'msvc'
index 747b208..895c7fe 100644 (file)
@@ -2,6 +2,7 @@ ext/flac/gstflacdec.c
 ext/jack/gstjackaudiosink.c
 ext/jack/gstjackaudiosrc.c
 ext/jpeg/gstjpegdec.c
+ext/lame/gstlamemp3enc.c
 ext/libpng/gstpngdec.c
 ext/pulse/pulsesink.c
 ext/shout2/gstshout2.c
index b18bc9b..6dd3979 100644 (file)
@@ -188,6 +188,12 @@ else
 check_jpeg =
 endif
 
+if USE_LAME
+check_lame = pipelines/lame
+else
+check_lame =
+endif
+
 if USE_PLUGIN_LEVEL
 check_level = elements/level
 else
@@ -372,6 +378,7 @@ check_PROGRAMS = \
        $(check_imagefreeze) \
        $(check_interleave) \
        $(check_jpeg) \
+       $(check_lame) \
        $(check_law) \
        $(check_level) \
        $(check_matroska) \
index e86794d..33737bf 100644 (file)
    fun:gst_value_deserialize_double
 }
 
+## lame
+
+{
+   <lame Conditional jump or move depends on uninitialised values>
+   Memcheck:Cond
+   fun:L3psycho_anal_vbr
+   fun:lame_encode_mp3_frame
+   ...
+   fun:lame_encode_flush
+   fun:gst_lamemp3enc_sink_event
+}
+
index a4335a1..a005326 100644 (file)
@@ -94,6 +94,7 @@ good_tests = [
   [ 'elements/vp8enc', not vpx_dep.found() or not have_vp8_encoder ],
   [ 'elements/vp8dec', not vpx_dep.found() or not have_vp8_decoder ],
   [ 'elements/vp9enc', not vpx_dep.found() or not have_vp9_encoder ],
+  [ 'pipelines/lame', not lame_dep.found() ],
   [ 'pipelines/wavenc' ],
   [ 'elements/wavpackdec', not wavpack_dep.found() ],
   [ 'elements/wavpackenc', not wavpack_dep.found() ],