summaryrefslogtreecommitdiff
path: root/package/madplay
diff options
context:
space:
mode:
authorJérôme Pouiller <jezz@sysmic.org>2013-08-30 11:05:57 +0200
committerPeter Korsgaard <jacmet@sunsite.dk>2013-09-08 21:41:39 +0200
commitadf6511013b8921d6856f5dc0e053cdd27891244 (patch)
tree14f1ba25f8ae138743e3f3954b85883c636714d8 /package/madplay
parentbafa8fcc6ce90553843b5c24e68de57c40f94abe (diff)
Remove multimedia subdirectory
Unless it was a group of sub-packages, packages was never regrouped by category. multimedia/ was an exception to this rule. This patch move packages/multimedia/ sub-directories to packages/. It keeps two subdirectories for gstream 0.10 and gstreamer 1.X. Signed-off-by: Jérôme Pouiller <jezz@sysmic.org> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Diffstat (limited to 'package/madplay')
-rw-r--r--package/madplay/Config.in17
-rw-r--r--package/madplay/madplay-0.15.2b-switch-to-new-alsa-api.patch173
-rw-r--r--package/madplay/madplay.mk22
3 files changed, 212 insertions, 0 deletions
diff --git a/package/madplay/Config.in b/package/madplay/Config.in
new file mode 100644
index 000000000..a77cc367e
--- /dev/null
+++ b/package/madplay/Config.in
@@ -0,0 +1,17 @@
+config BR2_PACKAGE_MADPLAY
+ bool "madplay"
+ select BR2_PACKAGE_LIBMAD
+ select BR2_PACKAGE_LIBID3TAG
+ help
+ Command-line front-end to libmad, a high-quality MPEG audio decoder.
+ It currently supports MPEG-1 and the MPEG-2 extension to lower
+ sampling frequencies, as well as the de facto MPEG 2.5 format. All
+ three audio layers — Layer I, Layer II, and Layer III (i.e. MP3) —
+ are fully implemented.
+
+ http://www.underbit.com/products/mad/
+
+config BR2_PACKAGE_MADPLAY_ALSA
+ bool
+ default y
+ depends on BR2_PACKAGE_MADPLAY && BR2_PACKAGE_ALSA_LIB
diff --git a/package/madplay/madplay-0.15.2b-switch-to-new-alsa-api.patch b/package/madplay/madplay-0.15.2b-switch-to-new-alsa-api.patch
new file mode 100644
index 000000000..60d7bd379
--- /dev/null
+++ b/package/madplay/madplay-0.15.2b-switch-to-new-alsa-api.patch
@@ -0,0 +1,173 @@
+Switch madplay to the new API. This is done thanks to a patch written
+by Micha Nelissen <micha@neli.hopto.org> and available at
+http://article.gmane.org/gmane.comp.audio.mad.devel/729.
+
+--- madplay-0.15.2b/audio_alsa.c 2008-10-18 15:10:16.000000000 +0200
++++ madplay-0.15.2b/audio_alsa.c.new 2008-10-18 15:03:27.000000000 +0200
+@@ -28,31 +28,30 @@
+
+ #include <errno.h>
+
+-#define ALSA_PCM_OLD_HW_PARAMS_API
+-#define ALSA_PCM_OLD_SW_PARAMS_API
+ #include <alsa/asoundlib.h>
+
+ #include <mad.h>
+
+ #include "audio.h"
+
+-char *buf = NULL;
+-int paused = 0;
++#define BUFFER_TIME_MAX 500000
+
+-int rate = -1;
+-int channels = -1;
+-int bitdepth = -1;
+-int sample_size = -1;
+-
+-int buffer_time = 500000;
+-int period_time = 100000;
+-char *defaultdev = "plughw:0,0";
++unsigned char *buf = NULL;
++int paused = 0;
++
++unsigned int rate = 0;
++unsigned int channels = -1;
++unsigned int bitdepth = -1;
++unsigned int sample_size = -1;
++
++unsigned int buffer_time;
++unsigned int period_time;
++char *defaultdev = "plughw:0,0";
+
+ snd_pcm_hw_params_t *alsa_hwparams;
+ snd_pcm_sw_params_t *alsa_swparams;
+
+-snd_pcm_sframes_t buffer_size;
+-snd_pcm_sframes_t period_size;
++snd_pcm_uframes_t buffer_size;
+
+ snd_pcm_format_t alsa_format = -1;
+ snd_pcm_access_t alsa_access = SND_PCM_ACCESS_MMAP_INTERLEAVED;
+@@ -66,14 +65,20 @@
+ snd_pcm_hw_params_t *params,
+ snd_pcm_access_t access)
+ {
+- int err, dir;
+-
++ int err;
++
+ /* choose all parameters */
+ err = snd_pcm_hw_params_any(handle,params);
+ if (err < 0) {
+ printf("Access type not available for playback: %s\n", snd_strerror(err));
+ return err;
+ }
++ /* set the access type */
++ err = snd_pcm_hw_params_set_access(handle, params, alsa_access);
++ if (err < 0) {
++ printf("Sample format not available for playback: %s\n", snd_strerror(err));
++ return err;
++ }
+ /* set the sample format */
+ err = snd_pcm_hw_params_set_format(handle, params, alsa_format);
+ if (err < 0) {
+@@ -87,29 +92,38 @@
+ return err;
+ }
+ /* set the stream rate */
+- err = snd_pcm_hw_params_set_rate_near(handle, params, rate, 0);
++ err = snd_pcm_hw_params_set_rate(handle, params, rate, 0);
+ if (err < 0) {
+ printf("Rate %iHz not available for playback: %s\n", rate, snd_strerror(err));
+ return err;
+ }
+- if (err != rate) {
+- printf("Rate doesn't match (requested %iHz, get %iHz)\n", rate, err);
+- return -EINVAL;
+- }
++ err = snd_pcm_hw_params_get_buffer_time_max(params, &buffer_time, NULL);
++ if (err < 0) {
++ printf("Unable to retrieve buffer time: %s\n", snd_strerror(err));
++ return err;
++ }
++ if (buffer_time > BUFFER_TIME_MAX)
++ buffer_time = BUFFER_TIME_MAX;
+ /* set buffer time */
+- err = snd_pcm_hw_params_set_buffer_time_near(handle, params, buffer_time, &dir);
++ err = snd_pcm_hw_params_set_buffer_time_near(handle, params, &buffer_time, 0);
+ if (err < 0) {
+ printf("Unable to set buffer time %i for playback: %s\n", buffer_time, snd_strerror(err));
+ return err;
+ }
+- buffer_size = snd_pcm_hw_params_get_buffer_size(params);
++ if (period_time * 4 > buffer_time)
++ period_time = buffer_time / 4;
+ /* set period time */
+- err = snd_pcm_hw_params_set_period_time_near(handle, params, period_time, &dir);
++ err = snd_pcm_hw_params_set_period_time_near(handle, params, &period_time, NULL);
+ if (err < 0) {
+ printf("Unable to set period time %i for playback: %s\n", period_time, snd_strerror(err));
+ return err;
+ }
+- period_size = snd_pcm_hw_params_get_period_size(params, &dir);
++ /* retrieve buffer size */
++ err = snd_pcm_hw_params_get_buffer_size(params, &buffer_size);
++ if (err < 0) {
++ printf("Unable to retrieve buffer size: %s\n", snd_strerror(err));
++ return err;
++ }
+ /* write the parameters to device */
+ err = snd_pcm_hw_params(handle, params);
+ if (err < 0) {
+@@ -123,6 +137,7 @@
+ int set_swparams(snd_pcm_t *handle,
+ snd_pcm_sw_params_t *params)
+ {
++ unsigned int start_threshold;
+ int err;
+
+ /* get current swparams */
+@@ -136,13 +151,7 @@
+ if (err < 0) {
+ printf("Unable to set start threshold mode for playback: %s\n", snd_strerror(err));
+ return err;
+- }
+- /* allow transfer when at least period_size samples can be processed */
+- err = snd_pcm_sw_params_set_avail_min(handle, params, period_size);
+- if (err < 0) {
+- printf("Unable to set avail min for playback: %s\n", snd_strerror(err));
+- return err;
+- }
++ }
+ /* align all transfers to 1 samples */
+ err = snd_pcm_sw_params_set_xfer_align(handle, params, 1);
+ if (err < 0) {
+@@ -190,7 +199,7 @@
+ rate = config->speed;
+
+ if ( bitdepth == 0 )
+- config->precision = bitdepth = 32;
++ config->precision = bitdepth = 16;
+
+ switch (bitdepth)
+ {
+@@ -241,7 +250,7 @@
+ return -1;
+ }
+
+- buf = malloc(buffer_size);
++ buf = malloc(buffer_size * sample_size);
+ if (buf == NULL) {
+ audio_error="unable to allocate output buffer table";
+ return -1;
+@@ -279,7 +288,7 @@
+ int play(struct audio_play *play)
+ {
+ int err, len;
+- char *ptr;
++ unsigned char *ptr;
+
+ ptr = buf;
+ len = play->nsamples;
+
diff --git a/package/madplay/madplay.mk b/package/madplay/madplay.mk
new file mode 100644
index 000000000..19ab13f69
--- /dev/null
+++ b/package/madplay/madplay.mk
@@ -0,0 +1,22 @@
+################################################################################
+#
+# madplay
+#
+################################################################################
+
+MADPLAY_VERSION = 0.15.2b
+MADPLAY_SOURCE = madplay-$(MADPLAY_VERSION).tar.gz
+MADPLAY_SITE = http://downloads.sourceforge.net/project/mad/madplay/$(MADPLAY_VERSION)
+MADPLAY_LICENSE = GPLv2+
+MADPLAY_LICENSE_FILES = COPYING COPYRIGHT
+MADPLAY_LIBTOOL_PATCH = NO
+MADPLAY_DEPENDENCIES = libmad libid3tag
+
+# Check if ALSA is built, then we should configure after alsa-lib so
+# ./configure can find alsa-lib.
+ifeq ($(BR2_PACKAGE_MADPLAY_ALSA),y)
+MADPLAY_CONF_OPT += --with-alsa
+MADPLAY_DEPENDENCIES += alsa-lib
+endif
+
+$(eval $(autotools-package))