mirror of
https://github.com/xiph/opus.git
synced 2025-06-06 23:40:50 +00:00
controlling rounding
This commit is contained in:
parent
3934fac7e2
commit
886dc594f0
1 changed files with 10 additions and 2 deletions
12
celt/bands.c
12
celt/bands.c
|
@ -658,6 +658,7 @@ struct band_ctx {
|
||||||
const celt_ener *bandE;
|
const celt_ener *bandE;
|
||||||
opus_uint32 seed;
|
opus_uint32 seed;
|
||||||
int arch;
|
int arch;
|
||||||
|
int theta_round;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct split_ctx {
|
struct split_ctx {
|
||||||
|
@ -715,8 +716,14 @@ static void compute_theta(struct band_ctx *ctx, struct split_ctx *sctx,
|
||||||
if (qn!=1)
|
if (qn!=1)
|
||||||
{
|
{
|
||||||
if (encode)
|
if (encode)
|
||||||
itheta = (itheta*(opus_int32)qn+8192)>>14;
|
{
|
||||||
|
if (!stereo || ctx->theta_round == 0)
|
||||||
|
itheta = (itheta*(opus_int32)qn+8192)>>14;
|
||||||
|
else if (ctx->theta_round < 0)
|
||||||
|
itheta = (itheta*(opus_int32)qn)>>14;
|
||||||
|
else
|
||||||
|
itheta = (itheta*(opus_int32)qn+16383)>>14;
|
||||||
|
}
|
||||||
/* Entropy coding of the angle. We use a uniform pdf for the
|
/* Entropy coding of the angle. We use a uniform pdf for the
|
||||||
time split, a step for stereo, and a triangular one for the rest. */
|
time split, a step for stereo, and a triangular one for the rest. */
|
||||||
if (stereo && N>2)
|
if (stereo && N>2)
|
||||||
|
@ -1482,6 +1489,7 @@ void quant_all_bands(int encode, const CELTMode *m, int start, int end,
|
||||||
} else {
|
} else {
|
||||||
if (Y!=NULL)
|
if (Y!=NULL)
|
||||||
{
|
{
|
||||||
|
ctx.theta_round = 0;
|
||||||
x_cm = quant_band_stereo(&ctx, X, Y, N, b, B,
|
x_cm = quant_band_stereo(&ctx, X, Y, N, b, B,
|
||||||
effective_lowband != -1 ? norm+effective_lowband : NULL, LM,
|
effective_lowband != -1 ? norm+effective_lowband : NULL, LM,
|
||||||
last?NULL:norm+M*eBands[i]-norm_offset, lowband_scratch, x_cm|y_cm);
|
last?NULL:norm+M*eBands[i]-norm_offset, lowband_scratch, x_cm|y_cm);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue