int next_block_len_bits; ///< log2 of next block length
int prev_block_len_bits; ///< log2 of prev block length
int block_len; ///< block length in samples
- int block_num; ///< block number in current frame
int block_pos; ///< current position in frame
uint8_t ms_stereo; ///< true if mid/side stereo mode
uint8_t channel_coded[MAX_CHANNELS]; ///< true if channel is coded
struct private_wmadec_data *s;
int ret, i;
- if (len < 18)
- return 0;
-
PARA_NOTICE_LOG("initial buf: %d bytes\n", len);
s = para_calloc(sizeof(*s));
ret = read_asf_header(initial_buf, len, &s->ahi);
- if (ret < 0)
+ if (ret <= 0) {
+ free(s);
return ret;
+ }
s->use_exp_vlc = s->ahi.flags2 & 0x0001;
s->use_bit_reservoir = s->ahi.flags2 & 0x0002;
}
/* update block number */
- s->block_num++;
s->block_pos += s->block_len;
if (s->block_pos >= s->frame_len)
return 1;
float *iptr;
/* read each block */
- s->block_num = 0;
s->block_pos = 0;
for (;;) {
ret = wma_decode_block(s);