[Armadeus-commitlog] SF.net SVN: armadeus:[1024] trunk/buildroot/package/audio/madplay/ madplay-aud
Brought to you by:
sszy
|
From: <ar...@us...> - 2009-01-19 19:37:12
|
Revision: 1024
http://armadeus.svn.sourceforge.net/armadeus/?rev=1024&view=rev
Author: artemys
Date: 2009-01-19 19:37:04 +0000 (Mon, 19 Jan 2009)
Log Message:
-----------
[BUILDROOT] Makes madplayer work again
Modified Paths:
--------------
trunk/buildroot/package/audio/madplay/madplay-audio-alsa.patch
Modified: trunk/buildroot/package/audio/madplay/madplay-audio-alsa.patch
===================================================================
--- trunk/buildroot/package/audio/madplay/madplay-audio-alsa.patch 2009-01-19 15:09:57 UTC (rev 1023)
+++ trunk/buildroot/package/audio/madplay/madplay-audio-alsa.patch 2009-01-19 19:37:04 UTC (rev 1024)
@@ -1,11 +1,12 @@
-Now this patch is needed for madplay to compile when ALSA is configured with
- --with-versioned=no option.
-madplay is compiling but still crashes when used... :-(
-cf SF bug: https://sourceforge.net/tracker/index.php?func=detail&aid=2184767&group_id=122057&atid=692259
+* needed for madplay to compile when ALSA is configured with
+ --with-versioned=no option.
+* fix allocation of buffer, buffer_size is number of frames
+* use default 16 bit depth (some hardware has small buffers, 16/24 bit
+ difference is very small)
---- madplay-0.15.2b/audio_alsa.c 2004-02-23 22:35:23.000000000 +0100
-+++ madplay-0.15.2b-new/audio_alsa.c 2007-12-02 16:40:38.000000000 +0100
-@@ -28,31 +28,28 @@
+--- madplay-0.15.2b.org/audio_alsa.c 2004-02-23 22:35:23.000000000 +0100
++++ madplay-0.15.2b/audio_alsa.c 2009-01-19 19:18:36.000000000 +0100
+@@ -28,31 +28,30 @@
#include <errno.h>
@@ -19,8 +20,14 @@
-char *buf = NULL;
-int paused = 0;
-+unsigned char *buf = NULL;
-+int paused = 0;
++#define BUFFER_TIME_MAX 500000
++unsigned char *buf = NULL;
++int paused = 0;
++
++unsigned int rate = 0;
++unsigned int channels = -1;
++unsigned int bitdepth = -1;
++unsigned int sample_size= -1;
-int rate = -1;
-int channels = -1;
@@ -29,28 +36,44 @@
-
-int buffer_time = 500000;
-int period_time = 100000;
--char *defaultdev = "plughw:0,0";
-+unsigned int rate = 0;
-+unsigned int channels = -1;
-+unsigned int bitdepth = -1;
-+unsigned int sample_size = -1;
-+
-+unsigned int buffer_time = 500000;
-+unsigned int period_time = 100000;
-+char *defaultdev = "plughw:0,0";
++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 buffer_size;
-snd_pcm_sframes_t period_size;
-+snd_pcm_uframes_t buffer_size;
++snd_pcm_uframes_t period_size;
snd_pcm_format_t alsa_format = -1;
snd_pcm_access_t alsa_access = SND_PCM_ACCESS_MMAP_INTERLEAVED;
-@@ -87,29 +84,28 @@
+@@ -66,7 +65,7 @@
+ 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);
+@@ -74,6 +73,12 @@
+ 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,42 @@
+ 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);
@@ -59,34 +82,53 @@
return err;
}
- if (err != rate) {
-- printf("Rate doesn't match (requested %iHz, get %iHz)\n", rate, err);
-- return -EINVAL;
-- }
++ /*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, &dir);
++ err = snd_pcm_hw_params_set_buffer_time_near(handle, params, &buffer_time, NULL);
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);
-+ 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;
-+ }
++ 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, &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) {
-@@ -136,13 +132,7 @@
+@@ -123,6 +141,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 +155,7 @@
if (err < 0) {
printf("Unable to set start threshold mode for playback: %s\n", snd_strerror(err));
return err;
@@ -101,7 +143,25 @@
/* align all transfers to 1 samples */
err = snd_pcm_sw_params_set_xfer_align(handle, params, 1);
if (err < 0) {
-@@ -279,7 +269,7 @@
+@@ -190,7 +203,7 @@
+ rate = config->speed;
+
+ if ( bitdepth == 0 )
+- config->precision = bitdepth = 32;
++ config->precision = bitdepth = 16;
+
+ switch (bitdepth)
+ {
+@@ -241,7 +254,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 +292,7 @@
int play(struct audio_play *play)
{
int err, len;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|