Re: PIC32 port question

Erik Friesen <[email protected]> Fri, 25 Aug 2017 15:03:11 -0400
Newsgroups gmane.comp.audio.mp3.lame
Message-ID <CAEuupiuQAhBXr8NwsuguuDvEEAZ+uGxhQbvSg_seCidFSvo87A@mail.gmail.com>
Ah, I found it.

init_bit_stream_w returns void, but really this should check the
malloc for NULL, which it doesn't

This is lame source 3.99.5.

void
init_bit_stream_w(lame_internal_flags * gfc)
{
    EncStateVar_t *const esv = &gfc->sv_enc;

    esv->h_ptr = esv->w_ptr = 0;
    esv->header[esv->h_ptr].write_timing = 0;

    gfc->bs.buf = (unsigned char *) malloc(BUFFER_SIZE);//<--------------
    gfc->bs.buf_size = BUFFER_SIZE;
    gfc->bs.buf_byte_idx = -1;
    gfc->bs.buf_bit_idx = 0;
    gfc->bs.totbit = 0;
}

On Fri, Aug 25, 2017 at 2:56 PM, Erik Friesen <[email protected]> wrote:
> I am attempting to port the Lame Encoder to the pic32 mips.  It may
> have nothing to do with the port, but I find an exception in
> putbits_noheaders
>
> Putting this helper inside
>
> putbits_noheaders(lame_internal_flags * gfc, int val, int j)
> {
>     Bit_stream_struc *bs;
>     bs = &gfc->bs;
>
>     assert(j < MAX_LENGTH - 2);
>
>     while (j > 0) {
>         int     k;
>         if (bs->buf_bit_idx == 0) {
>             bs->buf_bit_idx = 8;
>    bs->buf_byte_idx++;
>    assert(bs->buf_byte_idx < BUFFER_SIZE);
> /**MyHelper**/
>    PrintUart("bs->buf=%X[bs->buf_byte_idx=%i]\r\n", (int) bs->buf,
> bs->buf_byte_idx);
>    while (UartTxInProgress());
> /**End**/
>    bs->buf[bs->buf_byte_idx] = 0;
> }
>
> I get "bs->buf=0[bs->buf_byte_idx=0]"
>
> So can someone tell me where buf gets malloced?
>
> I have previously called it similar to:
> lame_t gf;
> gf = lame_init();
> FlushMp3Buffer(gf);
> SetParams(gf);
> and it dies in lame_init_params(gf);

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot