Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
ffmpeg
Project
Project
Details
Activity
Releases
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
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Stefan Westerfeld
ffmpeg
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
Changes
2
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