wavpack: read_bytes() should not return after partial reads
libwavpack expects the read_bytes() stream method to fill the whole buffer, and fails badly when we return a partial read (i.e. not enough data available yet). This caused wavpack streams to break. Re-implement the buffer filling loop.
This commit is contained in:
parent
010a27cd95
commit
eedbd28ec9
@ -348,7 +348,22 @@ static int32_t read_bytes(void *id, void *data, int32_t bcount)
|
|||||||
--bcount;
|
--bcount;
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
return i + decoder_read(isp->decoder, isp->is, buf, bcount);
|
|
||||||
|
/* wavpack fails if we return a partial read, so we just wait
|
||||||
|
until the buffer is full */
|
||||||
|
while (bcount > 0) {
|
||||||
|
size_t nbytes = decoder_read(isp->decoder, isp->is,
|
||||||
|
buf, bcount);
|
||||||
|
if (nbytes == 0)
|
||||||
|
/* EOF, error or a decoder command */
|
||||||
|
break;
|
||||||
|
|
||||||
|
i += nbytes;
|
||||||
|
bcount -= nbytes;
|
||||||
|
buf += nbytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t get_pos(void *id)
|
static uint32_t get_pos(void *id)
|
||||||
|
Loading…
Reference in New Issue
Block a user