Ignore:
Timestamp:
02/09/07 18:57:23 (18 years ago)
Author:
r2d
Message:
  • corrected a bug where very short frames ( < 1 byte, generally silence) were skiped at the end of a block.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libmpc/branches/r2d/libmpcdec/mpc_demux.c

    r205 r206  
    6666        d->bits_reader.count = 8;
    6767        d->block_bits = 0;
    68         d->end = MPC_FALSE;
     68        d->block_frames = 0;
    6969}
    7070
     
    361361                mpc_bits_reader r;
    362362                i->is_key_frame = MPC_FALSE;
    363                 if (d->block_bits < 8 && d->end == MPC_FALSE) {
     363
     364                if (d->block_frames == 0) {
    364365                        mpc_block b = {{0,0},0};
    365366                        d->bits_reader.count &= -8;
     
    372373                        while( memcmp(b.key, "AD", 2) != 0 ) { // scan all blocks until audio
    373374                                if (memcmp(b.key, "SE", 2) == 0) { // end block
    374                                         d->end = MPC_TRUE;
    375                                         break;
     375                                        i->bits = -1;
     376                                        return;
    376377                                }
    377378                                mpc_demux_fill(d, 11 + (mpc_uint32_t) b.size, 0);
     
    380381                        }
    381382                        d->block_bits = (mpc_uint32_t) b.size * 8;
     383                        d->block_frames = 1 << d->si.block_pwr;
    382384                        i->is_key_frame = MPC_TRUE;
    383385                }
     
    387389                mpc_decoder_decode_frame(d->d, &d->bits_reader, i);
    388390                d->block_bits -= ((d->bits_reader.buff - r.buff) << 3) + r.count - d->bits_reader.count;
     391                d->block_frames--;
     392                if (d->block_bits < 0) i->bits = -1;
    389393        } else {
    390394                mpc_bits_reader r;
Note: See TracChangeset for help on using the changeset viewer.