Stop adjusting the VBR drift during silent frames, this prevents overshoot after silent spans. This also results in undershoot on files with lots of silence, but this is desirable in terms of increasing quality consistency. It will be even better if we later include some open-loop correction of the targets.
This commit is contained in:
parent
d25dd2bff9
commit
fdd867534a
1 changed files with 12 additions and 6 deletions
|
@ -1425,17 +1425,23 @@ int celt_encode_with_ec_float(CELTEncoder * restrict st, const celt_sig * pcm, i
|
|||
nbAvailableBytes = IMAX(min_allowed,nbAvailableBytes);
|
||||
nbAvailableBytes = IMIN(nbCompressedBytes,nbAvailableBytes+nbFilledBytes) - nbFilledBytes;
|
||||
|
||||
if(silence)
|
||||
{
|
||||
nbAvailableBytes = 2;
|
||||
target = 2*8<<BITRES;
|
||||
}
|
||||
|
||||
/* By how much did we "miss" the target on that frame */
|
||||
delta = target - vbr_rate;
|
||||
|
||||
target=nbAvailableBytes<<(BITRES+3);
|
||||
|
||||
/*If the frame is silent we don't adjust our drift, otherwise
|
||||
the encoder will shoot to very high rates after hitting a
|
||||
span of silence, but we do allow the bitres to refill.
|
||||
This means that we'll undershoot our target in CVBR/VBR modes
|
||||
on files with lots of silence. */
|
||||
if(silence)
|
||||
{
|
||||
nbAvailableBytes = 2;
|
||||
target = 2*8<<BITRES;
|
||||
delta = 0;
|
||||
}
|
||||
|
||||
if (st->vbr_count < 970)
|
||||
{
|
||||
st->vbr_count++;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue