[mad-dev] mad on arm processor -- strange problems.

Reza Naima reza@reza.net
Sun, 26 May 2002 20:16:33 -0700


Rob Leslie wrote:

> 
> In order for minimad to use mmap(), it's necessary to invoke it like this:
> 
>     minimad <input.mp3 >output.pcm
> 

That's how I did invoke it, before the change.  It still failed. 
Perhaps because the location of the mp3 file is nfs mounted, though 
that's just a guess.


> 
> I don't think the problem is with the high-level API since both minimad 
> and madplay use it.
> 
> Perhaps the problem is the byte order of the output samples. minimad 
> always outputs little-endian samples, but madplay's raw output uses the 
> native endian format of your host. Is your audio driver expecting 
> big-endian samples?
> 


To test this, I went ahead and forced madplay to little-endian :

/*
# if defined(WORDS_BIGENDIAN)
#  define audio_pcm_s32  audio_pcm_s32be
#  define audio_pcm_s24  audio_pcm_s24be
#  define audio_pcm_s16  audio_pcm_s16be
# else
*/
#  define audio_pcm_s32  audio_pcm_s32le
#  define audio_pcm_s24  audio_pcm_s24le
#  define audio_pcm_s16  audio_pcm_s16le

//# endif


It played the audio just fine.  Perhaps it has something to do with 
minimad's scale() function (I'm currently using it as-is, in my code)? 
I might try ripping out some of the audio massaging code from 
audio_raw.c and putting into my code to see what it does.  Otherwise, do 
you have any other thoughts?


One other question -- with the high-level API's call of 
mad_stream_buffer(), does it want data in a prefered size?  Or does it 
have to end on some multiple of some size?

Thanks,
Reza