|
|
|
@ -1055,7 +1055,7 @@ static float float32_unpack(uint32 x) |
|
|
|
|
uint32 sign = x & 0x80000000; |
|
|
|
|
uint32 exp = (x & 0x7fe00000) >> 21; |
|
|
|
|
double res = sign ? -(double)mantissa : (double)mantissa; |
|
|
|
|
return (float) ldexp((float)res, exp-788); |
|
|
|
|
return (float) ldexp((float)res, (int)exp-788); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -3379,7 +3379,7 @@ static int vorbis_decode_packet_rest(vorb *f, int *len, Mode *m, int left_start, |
|
|
|
|
// this isn't to spec, but spec would require us to read ahead
|
|
|
|
|
// and decode the size of all current frames--could be done,
|
|
|
|
|
// but presumably it's not a commonly used feature
|
|
|
|
|
f->current_loc = -n2; // start of first frame is positioned for discard
|
|
|
|
|
f->current_loc = 0u - n2; // start of first frame is positioned for discard (NB this is an intentional unsigned overflow/wrap-around)
|
|
|
|
|
// we might have to discard samples "from" the next frame too,
|
|
|
|
|
// if we're lapping a large block then a small at the start?
|
|
|
|
|
f->discard_samples_deferred = n - right_end; |
|
|
|
@ -3963,7 +3963,7 @@ static int start_decoder(vorb *f) |
|
|
|
|
if (g->class_masterbooks[j] >= f->codebook_count) return error(f, VORBIS_invalid_setup); |
|
|
|
|
} |
|
|
|
|
for (k=0; k < 1 << g->class_subclasses[j]; ++k) { |
|
|
|
|
g->subclass_books[j][k] = get_bits(f,8)-1; |
|
|
|
|
g->subclass_books[j][k] = (int16)get_bits(f,8)-1; |
|
|
|
|
if (g->subclass_books[j][k] >= f->codebook_count) return error(f, VORBIS_invalid_setup); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|