if (fh->pre_buffer) {
switch_size_t rlen, blen;
+ switch_size_t datalen_adj = fh->pre_buffer_datalen;
switch_status_t status = SWITCH_STATUS_SUCCESS;
int asis = switch_test_flag(fh, SWITCH_FILE_NATIVE);
rlen = switch_buffer_inuse(fh->pre_buffer);
- if (rlen >= fh->pre_buffer_datalen) {
- if ((blen = switch_buffer_read(fh->pre_buffer, fh->pre_buffer_data, fh->pre_buffer_datalen))) {
+ if (fh->pre_buffer_datalen % fh->channels) {
+ datalen_adj = fh->pre_buffer_datalen - (fh->pre_buffer_datalen % fh->channels);
+ }
+
+ if (rlen >= datalen_adj) {
+ if ((blen = switch_buffer_read(fh->pre_buffer, fh->pre_buffer_data, datalen_adj))) {
if (!asis)
blen /= 2;
if (fh->channels > 1)