Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Mark Harris
Opus
Commits
4fbd18d1
Commit
4fbd18d1
authored
Jan 17, 2008
by
Jean-Marc Valin
Browse files
Close to getting CBR working
parent
f51ca493
Changes
5
Hide whitespace changes
Inline
Side-by-side
libcelt/bands.c
View file @
4fbd18d1
...
...
@@ -229,21 +229,33 @@ void pitch_quant_bands(const CELTMode *m, float *X, float *P, float *gains)
/* Quantisation of the residual */
void
quant_bands
(
const
CELTMode
*
m
,
float
*
X
,
float
*
P
,
float
*
W
,
ec_enc
*
enc
)
void
quant_bands
(
const
CELTMode
*
m
,
float
*
X
,
float
*
P
,
float
*
W
,
struct
alloc_data
*
alloc
,
int
total_bits
,
ec_enc
*
enc
)
{
int
i
,
j
,
B
;
int
i
,
j
,
B
,
bits
;
const
int
*
eBands
=
m
->
eBands
;
B
=
m
->
nbMdctBlocks
*
m
->
nbChannels
;
float
norm
[
B
*
eBands
[
m
->
nbEBands
+
1
]];
int
pulses
[
m
->
nbEBands
];
int
offsets
[
m
->
nbEBands
];
for
(
i
=
0
;
i
<
m
->
nbEBands
;
i
++
)
offsets
[
i
]
=
0
;
bits
=
total_bits
-
ec_enc_tell
(
enc
,
0
)
-
1
;
compute_allocation
(
alloc
,
offsets
,
bits
,
pulses
);
/*printf("bits left: %d\n", bits);
for (i=0;i<m->nbEBands;i++)
printf ("%d ", pulses[i]);
printf ("\n");*/
/*printf ("%d %d\n", ec_enc_tell(enc, 0), compute_allocation(m, m->nbPulses));*/
for
(
i
=
0
;
i
<
m
->
nbEBands
;
i
++
)
{
int
q
;
float
theta
,
n
;
//q = pulses[i];
q
=
m
->
nbPulses
[
i
];
n
=
sqrt
(
B
*
(
eBands
[
i
+
1
]
-
eBands
[
i
]));
theta
=
.
007
*
(
B
*
(
eBands
[
i
+
1
]
-
eBands
[
i
]))
/
(.
1
f
+
abs
(
m
->
nbPulses
[
i
]
));
theta
=
.
007
*
(
B
*
(
eBands
[
i
+
1
]
-
eBands
[
i
]))
/
(.
1
f
+
abs
(
q
));
if
(
q
<=
0
)
{
q
=
-
q
;
...
...
@@ -268,20 +280,28 @@ void quant_bands(const CELTMode *m, float *X, float *P, float *W, ec_enc *enc)
}
/* Decoding of the residual */
void
unquant_bands
(
const
CELTMode
*
m
,
float
*
X
,
float
*
P
,
ec_dec
*
dec
)
void
unquant_bands
(
const
CELTMode
*
m
,
float
*
X
,
float
*
P
,
struct
alloc_data
*
alloc
,
int
total_bits
,
ec_dec
*
dec
)
{
int
i
,
j
,
B
;
int
i
,
j
,
B
,
bits
;
const
int
*
eBands
=
m
->
eBands
;
B
=
m
->
nbMdctBlocks
*
m
->
nbChannels
;
float
norm
[
B
*
eBands
[
m
->
nbEBands
+
1
]];
int
pulses
[
m
->
nbEBands
];
int
offsets
[
m
->
nbEBands
];
for
(
i
=
0
;
i
<
m
->
nbEBands
;
i
++
)
offsets
[
i
]
=
0
;
bits
=
total_bits
-
ec_dec_tell
(
dec
,
0
)
-
1
;
compute_allocation
(
alloc
,
offsets
,
bits
,
pulses
);
for
(
i
=
0
;
i
<
m
->
nbEBands
;
i
++
)
{
int
q
;
float
theta
,
n
;
//q = pulses[i];
q
=
m
->
nbPulses
[
i
];
n
=
sqrt
(
B
*
(
eBands
[
i
+
1
]
-
eBands
[
i
]));
theta
=
.
007
*
(
B
*
(
eBands
[
i
+
1
]
-
eBands
[
i
]))
/
(.
1
f
+
abs
(
m
->
nbPulses
[
i
]
));
theta
=
.
007
*
(
B
*
(
eBands
[
i
+
1
]
-
eBands
[
i
]))
/
(.
1
f
+
abs
(
q
));
if
(
q
<=
0
)
{
q
=
-
q
;
...
...
libcelt/bands.h
View file @
4fbd18d1
...
...
@@ -36,6 +36,7 @@
#include
"modes.h"
#include
"entenc.h"
#include
"entdec.h"
#include
"rate.h"
/** Compute the amplitude (sqrt energy) in each of the bands
* @param m Mode data
...
...
@@ -79,7 +80,7 @@ void pitch_quant_bands(const CELTMode *m, float *X, float *P, float *gains);
* @param W Perceptual weighting
* @param enc Entropy encoder
*/
void
quant_bands
(
const
CELTMode
*
m
,
float
*
X
,
float
*
P
,
float
*
W
,
ec_enc
*
enc
);
void
quant_bands
(
const
CELTMode
*
m
,
float
*
X
,
float
*
P
,
float
*
W
,
struct
alloc_data
*
alloc
,
int
total_bits
,
ec_enc
*
enc
);
/** Decoding of the residual spectrum
* @param m Mode data
...
...
@@ -87,7 +88,7 @@ void quant_bands(const CELTMode *m, float *X, float *P, float *W, ec_enc *enc);
* @param P Pitch vector (normalised)
* @param dec Entropy decoder
*/
void
unquant_bands
(
const
CELTMode
*
m
,
float
*
X
,
float
*
P
,
ec_dec
*
dec
);
void
unquant_bands
(
const
CELTMode
*
m
,
float
*
X
,
float
*
P
,
struct
alloc_data
*
alloc
,
int
total_bits
,
ec_dec
*
dec
);
void
stereo_mix
(
const
CELTMode
*
m
,
float
*
X
,
float
*
bank
,
int
dir
);
...
...
libcelt/celt.c
View file @
4fbd18d1
...
...
@@ -41,6 +41,7 @@
#include
"quant_pitch.h"
#include
"quant_bands.h"
#include
"psy.h"
#include
"rate.h"
#define MAX_PERIOD 1024
...
...
@@ -70,6 +71,8 @@ struct CELTEncoder {
float
*
out_mem
;
float
*
oldBandE
;
struct
alloc_data
alloc
;
};
...
...
@@ -113,6 +116,7 @@ CELTEncoder *celt_encoder_new(const CELTMode *mode)
st
->
preemph_memE
=
celt_alloc
(
C
*
sizeof
(
float
));;
st
->
preemph_memD
=
celt_alloc
(
C
*
sizeof
(
float
));;
alloc_init
(
&
st
->
alloc
,
st
->
mode
);
return
st
;
}
...
...
@@ -134,6 +138,8 @@ void celt_encoder_destroy(CELTEncoder *st)
celt_free
(
st
->
out_mem
);
celt_free
(
st
->
oldBandE
);
alloc_clear
(
&
st
->
alloc
);
celt_free
(
st
);
}
...
...
@@ -341,7 +347,7 @@ int celt_encode(CELTEncoder *st, short *pcm)
sum += X[i]*X[i];
printf ("%f\n", sum);*/
/* Residual quantisation */
quant_bands
(
st
->
mode
,
X
,
P
,
mask
,
&
st
->
enc
);
quant_bands
(
st
->
mode
,
X
,
P
,
mask
,
&
st
->
alloc
,
770
,
&
st
->
enc
);
time_idct
(
X
,
N
,
B
,
C
);
if
(
C
==
2
)
...
...
@@ -421,6 +427,8 @@ struct CELTDecoder {
float
*
oldBandE
;
int
last_pitch_index
;
struct
alloc_data
alloc
;
};
CELTDecoder
*
celt_decoder_new
(
const
CELTMode
*
mode
)
...
...
@@ -459,6 +467,8 @@ CELTDecoder *celt_decoder_new(const CELTMode *mode)
st
->
preemph_memD
=
celt_alloc
(
C
*
sizeof
(
float
));;
st
->
last_pitch_index
=
0
;
alloc_init
(
&
st
->
alloc
,
st
->
mode
);
return
st
;
}
...
...
@@ -477,6 +487,8 @@ void celt_decoder_destroy(CELTDecoder *st)
celt_free
(
st
->
out_mem
);
celt_free
(
st
->
oldBandE
);
alloc_clear
(
&
st
->
alloc
);
celt_free
(
st
);
}
...
...
@@ -567,7 +579,7 @@ int celt_decode(CELTDecoder *st, char *data, int len, short *pcm)
pitch_quant_bands
(
st
->
mode
,
X
,
P
,
gains
);
/* Decode fixed codebook and merge with pitch */
unquant_bands
(
st
->
mode
,
X
,
P
,
&
dec
);
unquant_bands
(
st
->
mode
,
X
,
P
,
&
st
->
alloc
,
770
,
&
dec
);
time_idct
(
X
,
N
,
B
,
C
);
if
(
C
==
2
)
...
...
libcelt/modes.c
View file @
4fbd18d1
...
...
@@ -78,13 +78,18 @@ const int qpulses4s[NBANDS] ={38,31,25,21,18,16, 14, 12, 14, 12,14,15, 14, 15, 1
const
int
pbank1
[
PBANDS128
+
2
]
=
{
0
,
2
,
4
,
6
,
8
,
12
,
20
,
28
,
PITCH_END128
,
128
};
//const int pbank1[PBANDS128+2] = {0, 4, 8, 12, 20, PITCH_END128, 128};
int
bitalloc0
[
NBANDS
*
5
]
=
{
5
,
4
,
4
,
4
,
3
,
3
,
2
,
2
,
2
,
2
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
8
,
7
,
7
,
6
,
6
,
6
,
5
,
4
,
5
,
5
,
5
,
5
,
5
,
5
,
5
,
5
,
5
,
5
,
11
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
16
,
15
,
14
,
14
,
14
,
15
,
15
,
15
,
15
,
15
,
15
,
15
,
15
,
15
,
15
,
15
,
15
,
15
,
26
,
25
,
24
,
24
,
24
,
25
,
25
,
25
,
25
,
25
,
25
,
25
,
25
,
25
,
25
,
25
,
25
,
25
,
#define NALLOCS 7
int
bitalloc0
[
NBANDS
*
NALLOCS
]
=
{
5
,
4
,
4
,
4
,
3
,
3
,
2
,
2
,
2
,
2
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
8
,
7
,
7
,
6
,
6
,
6
,
5
,
4
,
5
,
5
,
5
,
5
,
5
,
5
,
5
,
5
,
5
,
5
,
10
,
9
,
9
,
8
,
8
,
8
,
8
,
8
,
8
,
8
,
9
,
10
,
11
,
12
,
17
,
15
,
6
,
7
,
16
,
15
,
14
,
14
,
14
,
13
,
13
,
13
,
13
,
13
,
15
,
16
,
17
,
18
,
20
,
18
,
11
,
12
,
26
,
25
,
24
,
22
,
20
,
18
,
19
,
19
,
25
,
22
,
25
,
30
,
30
,
35
,
35
,
35
,
35
,
25
,
32
,
30
,
28
,
27
,
25
,
24
,
23
,
21
,
29
,
27
,
35
,
40
,
42
,
50
,
59
,
54
,
51
,
36
,
42
,
40
,
38
,
37
,
35
,
34
,
33
,
31
,
39
,
37
,
45
,
50
,
52
,
60
,
60
,
60
,
60
,
46
,
};
#define NBANDS256 15
#define PBANDS256 8
#define PITCH_END256 88
...
...
@@ -110,7 +115,7 @@ const CELTMode mode0 = {
means18
,
/**< eMeans */
decay18
,
/**< eDecay */
5
,
/**< nbAllocVectors */
7
,
/**< nbAllocVectors */
bitalloc0
,
/**< allocVectors */
};
...
...
@@ -134,7 +139,7 @@ const CELTMode mode1 = {
means
,
/**< eMeans */
decay
,
/**< eDecay */
5
,
/**< nbAllocVectors */
7
,
/**< nbAllocVectors */
bitalloc0
,
/**< allocVectors */
};
...
...
@@ -157,7 +162,7 @@ const CELTMode mode2 = {
means18
,
/**< eMeans */
decay18
,
/**< eDecay */
5
,
/**< nbAllocVectors */
7
,
/**< nbAllocVectors */
bitalloc0
,
/**< allocVectors */
};
...
...
@@ -179,7 +184,7 @@ const CELTMode mode3 = {
means
,
/**< eMeans */
decay
,
/**< eDecay */
5
,
/**< nbAllocVectors */
7
,
/**< nbAllocVectors */
bitalloc0
,
/**< allocVectors */
};
...
...
@@ -202,7 +207,7 @@ const CELTMode mode4 = {
means18
,
/**< eMeans */
decay18
,
/**< eDecay */
5
,
/**< nbAllocVectors */
7
,
/**< nbAllocVectors */
bitalloc0
,
/**< allocVectors */
};
...
...
libcelt/rate.c
View file @
4fbd18d1
...
...
@@ -185,7 +185,6 @@ int interp_bits2pulses(const struct alloc_data *alloc, int *bits1, int *bits2, i
int
lo
,
hi
,
out
;
int
j
;
int
bits
[
len
];
int
used_bits
[
len
];
const
int
*
bands
=
alloc
->
bands
;
lo
=
0
;
hi
=
1
<<
BITRES
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment