Ignore:
Timestamp:
11/09/06 21:39:12 (17 years ago)
Author:
r2d
Message:
  • report file size
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libmpcdec/branches/zorg/src/mpc_decoder.c

    r107 r108  
    119119                                                          mpc_frame_info * i)
    120120{
    121         d->decoded_frames++;
    122 
    123         if (d->decoded_frames > d->frames && !d->is_true_gapless) {
     121        mpc_int64_t samples_left;
     122        if (d->decoded_frames >= d->frames && !d->is_true_gapless) {
    124123                mpc_decoder_reset_y(d);
    125124        } else {
     
    129128        mpc_decoder_synthese_filter_float(d, i->buffer);
    130129
     130        d->decoded_frames++;
     131
    131132    // cut off first MPC_DECODER_SYNTH_DELAY zero-samples
    132133    // reconstruct exact filelength
    133         if (d->decoded_frames == d->frames && (d->stream_version & 15) == 7) {
    134                 d->last_frame_samples = mpc_bits_read(r, 11);
    135                 if (d->last_frame_samples == 0) {
    136             // Encoder bugfix
    137                         d->last_frame_samples = MPC_FRAME_LENGTH;
    138                 }
    139         }
    140 
    141         mpc_int32_t samples_left = d->last_frame_samples + MPC_DECODER_SYNTH_DELAY
    142                         + (d->frames - d->decoded_frames) * MPC_FRAME_LENGTH;
     134        if (d->decoded_frames == d->frames && (d->stream_version & 15) == 7 &&
     135                (d->last_frame_samples = mpc_bits_read(r, 11)) == 0)
     136                // Encoder bugfix
     137                d->last_frame_samples = MPC_FRAME_LENGTH;
     138
     139        samples_left = d->last_frame_samples + MPC_DECODER_SYNTH_DELAY
     140                        + ((mpc_int64_t)d->frames - d->decoded_frames) * MPC_FRAME_LENGTH;
    143141
    144142        i->samples = samples_left > MPC_FRAME_LENGTH ? MPC_FRAME_LENGTH : samples_left < 0 ? 0 : samples_left;
     143
     144        if (samples_left <= MPC_FRAME_LENGTH) d->is_true_gapless = 0;
    145145
    146146        if (d->samples_to_skip) {
Note: See TracChangeset for help on using the changeset viewer.