Fixes buffering issues with CELT-only mode at 2.5 ms
This commit is contained in:
parent
f919dd7445
commit
c172f57d52
1 changed files with 14 additions and 4 deletions
|
@ -211,7 +211,7 @@ int opus_encode(OpusEncoder *st, const short *pcm, int frame_size,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0;i<ENCODER_DELAY_COMPENSATION*st->channels;i++)
|
for (i=0;i<IMIN(frame_size, ENCODER_DELAY_COMPENSATION)*st->channels;i++)
|
||||||
pcm_buf[i] = st->delay_buffer[i];
|
pcm_buf[i] = st->delay_buffer[i];
|
||||||
for (;i<frame_size*st->channels;i++)
|
for (;i<frame_size*st->channels;i++)
|
||||||
pcm_buf[i] = pcm[i-ENCODER_DELAY_COMPENSATION*st->channels];
|
pcm_buf[i] = pcm[i-ENCODER_DELAY_COMPENSATION*st->channels];
|
||||||
|
@ -220,8 +220,18 @@ int opus_encode(OpusEncoder *st, const short *pcm, int frame_size,
|
||||||
|
|
||||||
/* Encode high band with CELT */
|
/* Encode high band with CELT */
|
||||||
ret = celt_encode_with_ec(st->celt_enc, pcm_buf, frame_size, NULL, nb_compr_bytes, &enc);
|
ret = celt_encode_with_ec(st->celt_enc, pcm_buf, frame_size, NULL, nb_compr_bytes, &enc);
|
||||||
|
|
||||||
|
if (frame_size>ENCODER_DELAY_COMPENSATION)
|
||||||
|
{
|
||||||
for (i=0;i<ENCODER_DELAY_COMPENSATION*st->channels;i++)
|
for (i=0;i<ENCODER_DELAY_COMPENSATION*st->channels;i++)
|
||||||
st->delay_buffer[i] = pcm[frame_size*st->channels-ENCODER_DELAY_COMPENSATION*st->channels+i];
|
st->delay_buffer[i] = pcm[(frame_size-ENCODER_DELAY_COMPENSATION)*st->channels+i];
|
||||||
|
} else {
|
||||||
|
int tmp = ENCODER_DELAY_COMPENSATION-frame_size;
|
||||||
|
for (i=0;i<tmp*st->channels;i++)
|
||||||
|
st->delay_buffer[i] = st->delay_buffer[i+frame_size*st->channels];
|
||||||
|
for (i=0;i<frame_size*st->channels;i++)
|
||||||
|
st->delay_buffer[tmp*st->channels+i] = pcm[i];
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ret = (ec_tell(&enc)+7)>>3;
|
ret = (ec_tell(&enc)+7)>>3;
|
||||||
ec_enc_done(&enc);
|
ec_enc_done(&enc);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue