Posted with wrong from address.. here it is again.

 

 

Hi im new to the list.

Im trying to decode some data using the low level api, I want to decode it a frame at a time , but currently im just trying to do something simple, give it 8k of data and have it call decode without hanging.

‘in’ is a pointer to the data, I just put 8192 in for the hell of it.  The 8k of data is valid mpeg data and I can decode it fine with my own fpu based mp3 code.

I tried this

 

    mad_stream_init(&stream);

    mad_frame_init(&frame);

    mad_synth_init(&synth);

 

    mad_stream_buffer(&stream, in, 8192);

 

    if (mad_frame_decode(&frame, &stream) == -1)

    {

        return FALSE;

    }

 

It decodes the header correctly, then when decoding the data in the (stereo mp3) file, it goes into an infinite loop inside mad_frame_decode.

The code it hangs in is in III_huffdecode (not immediately)..  The while loop  is the following one.

 

while (!pair->final)

{

    cachesz -= clumpsz;

    clumpsz = pair->ptr.bits;

    pair    = &table[pair->ptr.offset + MASK(bitcache, cachesz, clumpsz)];

}

Its called from the III_decode function, and it is gr = 1, ngr = 2 and ch = 1 nch = 2.  So it performs in this manner.

gr = 0 ch = 0 : succeeds

gr = 0 ch = 1 : succeeds

gr = 1 ch = 0 : succeeds

gr = 1 ch = 1 : hang

 

Maybe I didn’t set the project up properly, all I did was create a new project in devstudio, add all the mad files, then defined FPM_DEFAULT,OPT_SPEED in my project.

Is there anything else I should be doing?

 

thanks

Brett