Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
0131e70a
Commit
0131e70a
authored
Oct 29, 2011
by
Justin Ruggles
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ra288: utilize DSPContext.vector_fmul()
parent
03e5d611
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
23 additions
and
20 deletions
+23
-20
ra288.c
libavcodec/ra288.c
+18
-16
ra288.h
libavcodec/ra288.h
+5
-4
No files found.
libavcodec/ra288.c
View file @
0131e70a
...
...
@@ -26,6 +26,7 @@
#include "lpc.h"
#include "celp_math.h"
#include "celp_filters.h"
#include "dsputil.h"
#define MAX_BACKWARD_FILTER_ORDER 36
#define MAX_BACKWARD_FILTER_LEN 40
...
...
@@ -35,8 +36,9 @@
#define RA288_BLOCKS_PER_FRAME 32
typedef
struct
{
float
sp_lpc
[
36
];
///< LPC coefficients for speech data (spec: A)
float
gain_lpc
[
10
];
///< LPC coefficients for gain (spec: GB)
DSPContext
dsp
;
DECLARE_ALIGNED
(
16
,
float
,
sp_lpc
)[
FFALIGN
(
36
,
8
)];
///< LPC coefficients for speech data (spec: A)
DECLARE_ALIGNED
(
16
,
float
,
gain_lpc
)[
FFALIGN
(
10
,
8
)];
///< LPC coefficients for gain (spec: GB)
/** speech data history (spec: SB).
* Its first 70 coefficients are updated only at backward filtering.
...
...
@@ -57,16 +59,12 @@ typedef struct {
static
av_cold
int
ra288_decode_init
(
AVCodecContext
*
avctx
)
{
RA288Context
*
ractx
=
avctx
->
priv_data
;
avctx
->
sample_fmt
=
AV_SAMPLE_FMT_FLT
;
dsputil_init
(
&
ractx
->
dsp
,
avctx
);
return
0
;
}
static
void
apply_window
(
float
*
tgt
,
const
float
*
m1
,
const
float
*
m2
,
int
n
)
{
while
(
n
--
)
*
tgt
++
=
*
m1
++
*
*
m2
++
;
}
static
void
convolve
(
float
*
tgt
,
const
float
*
src
,
int
len
,
int
n
)
{
for
(;
n
>=
0
;
n
--
)
...
...
@@ -123,15 +121,18 @@ static void decode(RA288Context *ractx, float gain, int cb_coef)
* @param out2 pointer to the recursive part of the output
* @param window pointer to the windowing function table
*/
static
void
do_hybrid_window
(
int
order
,
int
n
,
int
non_rec
,
float
*
out
,
static
void
do_hybrid_window
(
RA288Context
*
ractx
,
int
order
,
int
n
,
int
non_rec
,
float
*
out
,
float
*
hist
,
float
*
out2
,
const
float
*
window
)
{
int
i
;
float
buffer1
[
MAX_BACKWARD_FILTER_ORDER
+
1
];
float
buffer2
[
MAX_BACKWARD_FILTER_ORDER
+
1
];
float
work
[
MAX_BACKWARD_FILTER_ORDER
+
MAX_BACKWARD_FILTER_LEN
+
MAX_BACKWARD_FILTER_NONREC
];
LOCAL_ALIGNED_16
(
float
,
work
)[
FFALIGN
(
MAX_BACKWARD_FILTER_ORDER
+
MAX_BACKWARD_FILTER_LEN
+
MAX_BACKWARD_FILTER_NONREC
,
8
)];
apply_window
(
work
,
window
,
hist
,
order
+
n
+
non_rec
);
ractx
->
dsp
.
vector_fmul
(
work
,
window
,
hist
,
FFALIGN
(
order
+
n
+
non_rec
,
8
)
);
convolve
(
buffer1
,
work
+
order
,
n
,
order
);
convolve
(
buffer2
,
work
+
order
+
n
,
non_rec
,
order
);
...
...
@@ -148,16 +149,17 @@ static void do_hybrid_window(int order, int n, int non_rec, float *out,
/**
* Backward synthesis filter, find the LPC coefficients from past speech data.
*/
static
void
backward_filter
(
float
*
hist
,
float
*
rec
,
const
float
*
window
,
static
void
backward_filter
(
RA288Context
*
ractx
,
float
*
hist
,
float
*
rec
,
const
float
*
window
,
float
*
lpc
,
const
float
*
tab
,
int
order
,
int
n
,
int
non_rec
,
int
move_size
)
{
float
temp
[
MAX_BACKWARD_FILTER_ORDER
+
1
];
do_hybrid_window
(
order
,
n
,
non_rec
,
temp
,
hist
,
rec
,
window
);
do_hybrid_window
(
ractx
,
order
,
n
,
non_rec
,
temp
,
hist
,
rec
,
window
);
if
(
!
compute_lpc_coefs
(
temp
,
order
,
lpc
,
0
,
1
,
1
))
apply_window
(
lpc
,
lpc
,
tab
,
order
);
ractx
->
dsp
.
vector_fmul
(
lpc
,
lpc
,
tab
,
FFALIGN
(
order
,
8
)
);
memmove
(
hist
,
hist
+
n
,
move_size
*
sizeof
(
*
hist
));
}
...
...
@@ -198,10 +200,10 @@ static int ra288_decode_frame(AVCodecContext * avctx, void *data,
out
+=
RA288_BLOCK_SIZE
;
if
((
i
&
7
)
==
3
)
{
backward_filter
(
ractx
->
sp_hist
,
ractx
->
sp_rec
,
syn_window
,
backward_filter
(
ractx
,
ractx
->
sp_hist
,
ractx
->
sp_rec
,
syn_window
,
ractx
->
sp_lpc
,
syn_bw_tab
,
36
,
40
,
35
,
70
);
backward_filter
(
ractx
->
gain_hist
,
ractx
->
gain_rec
,
gain_window
,
backward_filter
(
ractx
,
ractx
->
gain_hist
,
ractx
->
gain_rec
,
gain_window
,
ractx
->
gain_lpc
,
gain_bw_tab
,
10
,
8
,
20
,
28
);
}
}
...
...
libavcodec/ra288.h
View file @
0131e70a
...
...
@@ -23,6 +23,7 @@
#define AVCODEC_RA288_H
#include <stdint.h>
#include "dsputil.h"
static
const
float
amptable
[
8
]
=
{
0
.
515625
,
0
.
90234375
,
1
.
57910156
,
2
.
76342773
,
...
...
@@ -96,7 +97,7 @@ static const int16_t codetable[128][5]={
{
3746
,
-
606
,
53
,
-
269
,
-
3301
},
{
606
,
2018
,
-
1316
,
4064
,
398
}
};
static
const
float
syn_window
[
111
]
=
{
DECLARE_ALIGNED
(
16
,
static
const
float
,
syn_window
)[
FFALIGN
(
111
,
8
)
]
=
{
0
.
576690972
,
0
.
580838025
,
0
.
585013986
,
0
.
589219987
,
0
.
59345597
,
0
.
597723007
,
0
.
602020264
,
0
.
606384277
,
0
.
610748291
,
0
.
615142822
,
0
.
619598389
,
0
.
624084473
,
0
.
628570557
,
0
.
633117676
,
0
.
637695313
,
0
.
642272949
,
0
.
646911621
,
0
.
651580811
,
...
...
@@ -118,7 +119,7 @@ static const float syn_window[111]={
0
.
142852783
,
0
.
0954284668
,
0
.
04776000
98
};
static
const
float
gain_window
[
38
]
=
{
DECLARE_ALIGNED
(
16
,
static
const
float
,
gain_window
)[
FFALIGN
(
38
,
8
)
]
=
{
0
.
505699992
,
0
.
524200022
,
0
.
54339999
,
0
.
563300014
,
0
.
583953857
,
0
.
60534668
,
0
.
627502441
,
0
.
650482178
,
0
.
674316406
,
0
.
699005127
,
0
.
724578857
,
0
.
75112915
,
0
.
778625488
,
0
.
807128906
,
0
.
836669922
,
0
.
86730957
,
0
.
899078369
,
0
.
932006836
,
...
...
@@ -129,7 +130,7 @@ static const float gain_window[38]={
};
/** synthesis bandwidth broadening table */
static
const
float
syn_bw_tab
[
36
]
=
{
DECLARE_ALIGNED
(
16
,
static
const
float
,
syn_bw_tab
)[
FFALIGN
(
36
,
8
)]
=
{
0
.
98828125
,
0
.
976699829
,
0
.
965254128
,
0
.
953942537
,
0
.
942763507
,
0
.
931715488
,
0
.
920796931
,
0
.
910006344
,
0
.
899342179
,
0
.
888803005
,
0
.
878387332
,
0
.
868093729
,
0
.
857920766
,
0
.
847867012
,
0
.
837931097
,
0
.
828111589
,
0
.
818407178
,
0
.
808816493
,
...
...
@@ -139,7 +140,7 @@ static const float syn_bw_tab[36]={
};
/** gain bandwidth broadening table */
static
const
float
gain_bw_tab
[
10
]
=
{
DECLARE_ALIGNED
(
16
,
static
const
float
,
gain_bw_tab
)[
FFALIGN
(
10
,
8
)]
=
{
0
.
90625
,
0
.
821289063
,
0
.
74432373
,
0
.
674499512
,
0
.
61126709
,
0
.
553955078
,
0
.
50201416
,
0
.
454956055
,
0
.
41229248
,
0
.
373657227
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a 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