Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
FFmpeg
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
libremedia
Tethys
FFmpeg
Commits
0131e70a
Commit
0131e70a
authored
13 years ago
by
Justin Ruggles
Browse files
Options
Downloads
Patches
Plain Diff
ra288: utilize DSPContext.vector_fmul()
parent
03e5d611
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
libavcodec/ra288.c
+18
-16
18 additions, 16 deletions
libavcodec/ra288.c
libavcodec/ra288.h
+5
-4
5 additions, 4 deletions
libavcodec/ra288.h
with
23 additions
and
20 deletions
libavcodec/ra288.c
+
18
−
16
View file @
0131e70a
...
@@ -26,6 +26,7 @@
...
@@ -26,6 +26,7 @@
#include
"lpc.h"
#include
"lpc.h"
#include
"celp_math.h"
#include
"celp_math.h"
#include
"celp_filters.h"
#include
"celp_filters.h"
#include
"dsputil.h"
#define MAX_BACKWARD_FILTER_ORDER 36
#define MAX_BACKWARD_FILTER_ORDER 36
#define MAX_BACKWARD_FILTER_LEN 40
#define MAX_BACKWARD_FILTER_LEN 40
...
@@ -35,8 +36,9 @@
...
@@ -35,8 +36,9 @@
#define RA288_BLOCKS_PER_FRAME 32
#define RA288_BLOCKS_PER_FRAME 32
typedef
struct
{
typedef
struct
{
float
sp_lpc
[
36
];
///< LPC coefficients for speech data (spec: A)
DSPContext
dsp
;
float
gain_lpc
[
10
];
///< LPC coefficients for gain (spec: GB)
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).
/** speech data history (spec: SB).
* Its first 70 coefficients are updated only at backward filtering.
* Its first 70 coefficients are updated only at backward filtering.
...
@@ -57,16 +59,12 @@ typedef struct {
...
@@ -57,16 +59,12 @@ typedef struct {
static
av_cold
int
ra288_decode_init
(
AVCodecContext
*
avctx
)
static
av_cold
int
ra288_decode_init
(
AVCodecContext
*
avctx
)
{
{
RA288Context
*
ractx
=
avctx
->
priv_data
;
avctx
->
sample_fmt
=
AV_SAMPLE_FMT_FLT
;
avctx
->
sample_fmt
=
AV_SAMPLE_FMT_FLT
;
dsputil_init
(
&
ractx
->
dsp
,
avctx
);
return
0
;
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
)
static
void
convolve
(
float
*
tgt
,
const
float
*
src
,
int
len
,
int
n
)
{
{
for
(;
n
>=
0
;
n
--
)
for
(;
n
>=
0
;
n
--
)
...
@@ -123,15 +121,18 @@ static void decode(RA288Context *ractx, float gain, int cb_coef)
...
@@ -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 out2 pointer to the recursive part of the output
* @param window pointer to the windowing function table
* @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
)
float
*
hist
,
float
*
out2
,
const
float
*
window
)
{
{
int
i
;
int
i
;
float
buffer1
[
MAX_BACKWARD_FILTER_ORDER
+
1
];
float
buffer1
[
MAX_BACKWARD_FILTER_ORDER
+
1
];
float
buffer2
[
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
(
buffer1
,
work
+
order
,
n
,
order
);
convolve
(
buffer2
,
work
+
order
+
n
,
non_rec
,
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,
...
@@ -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.
* 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
,
float
*
lpc
,
const
float
*
tab
,
int
order
,
int
n
,
int
non_rec
,
int
move_size
)
int
order
,
int
n
,
int
non_rec
,
int
move_size
)
{
{
float
temp
[
MAX_BACKWARD_FILTER_ORDER
+
1
];
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
))
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
));
memmove
(
hist
,
hist
+
n
,
move_size
*
sizeof
(
*
hist
));
}
}
...
@@ -198,10 +200,10 @@ static int ra288_decode_frame(AVCodecContext * avctx, void *data,
...
@@ -198,10 +200,10 @@ static int ra288_decode_frame(AVCodecContext * avctx, void *data,
out
+=
RA288_BLOCK_SIZE
;
out
+=
RA288_BLOCK_SIZE
;
if
((
i
&
7
)
==
3
)
{
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
);
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
);
ractx
->
gain_lpc
,
gain_bw_tab
,
10
,
8
,
20
,
28
);
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
libavcodec/ra288.h
+
5
−
4
View file @
0131e70a
...
@@ -23,6 +23,7 @@
...
@@ -23,6 +23,7 @@
#define AVCODEC_RA288_H
#define AVCODEC_RA288_H
#include
<stdint.h>
#include
<stdint.h>
#include
"dsputil.h"
static
const
float
amptable
[
8
]
=
{
static
const
float
amptable
[
8
]
=
{
0
.
515625
,
0
.
90234375
,
1
.
57910156
,
2
.
76342773
,
0
.
515625
,
0
.
90234375
,
1
.
57910156
,
2
.
76342773
,
...
@@ -96,7 +97,7 @@ static const int16_t codetable[128][5]={
...
@@ -96,7 +97,7 @@ static const int16_t codetable[128][5]={
{
3746
,
-
606
,
53
,
-
269
,
-
3301
},
{
606
,
2018
,
-
1316
,
4064
,
398
}
{
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
.
576690972
,
0
.
580838025
,
0
.
585013986
,
0
.
589219987
,
0
.
59345597
,
0
.
597723007
,
0
.
602020264
,
0
.
606384277
,
0
.
610748291
,
0
.
615142822
,
0
.
619598389
,
0
.
624084473
,
0
.
602020264
,
0
.
606384277
,
0
.
610748291
,
0
.
615142822
,
0
.
619598389
,
0
.
624084473
,
0
.
628570557
,
0
.
633117676
,
0
.
637695313
,
0
.
642272949
,
0
.
646911621
,
0
.
651580811
,
0
.
628570557
,
0
.
633117676
,
0
.
637695313
,
0
.
642272949
,
0
.
646911621
,
0
.
651580811
,
...
@@ -118,7 +119,7 @@ static const float syn_window[111]={
...
@@ -118,7 +119,7 @@ static const float syn_window[111]={
0
.
142852783
,
0
.
0954284668
,
0
.
04776000
98
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
.
505699992
,
0
.
524200022
,
0
.
54339999
,
0
.
563300014
,
0
.
583953857
,
0
.
60534668
,
0
.
627502441
,
0
.
650482178
,
0
.
674316406
,
0
.
699005127
,
0
.
724578857
,
0
.
75112915
,
0
.
627502441
,
0
.
650482178
,
0
.
674316406
,
0
.
699005127
,
0
.
724578857
,
0
.
75112915
,
0
.
778625488
,
0
.
807128906
,
0
.
836669922
,
0
.
86730957
,
0
.
899078369
,
0
.
932006836
,
0
.
778625488
,
0
.
807128906
,
0
.
836669922
,
0
.
86730957
,
0
.
899078369
,
0
.
932006836
,
...
@@ -129,7 +130,7 @@ static const float gain_window[38]={
...
@@ -129,7 +130,7 @@ static const float gain_window[38]={
};
};
/** synthesis bandwidth broadening table */
/** 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
.
98828125
,
0
.
976699829
,
0
.
965254128
,
0
.
953942537
,
0
.
942763507
,
0
.
931715488
,
0
.
920796931
,
0
.
910006344
,
0
.
899342179
,
0
.
888803005
,
0
.
878387332
,
0
.
868093729
,
0
.
920796931
,
0
.
910006344
,
0
.
899342179
,
0
.
888803005
,
0
.
878387332
,
0
.
868093729
,
0
.
857920766
,
0
.
847867012
,
0
.
837931097
,
0
.
828111589
,
0
.
818407178
,
0
.
808816493
,
0
.
857920766
,
0
.
847867012
,
0
.
837931097
,
0
.
828111589
,
0
.
818407178
,
0
.
808816493
,
...
@@ -139,7 +140,7 @@ static const float syn_bw_tab[36]={
...
@@ -139,7 +140,7 @@ static const float syn_bw_tab[36]={
};
};
/** gain bandwidth broadening table */
/** 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
.
90625
,
0
.
821289063
,
0
.
74432373
,
0
.
674499512
,
0
.
61126709
,
0
.
553955078
,
0
.
50201416
,
0
.
454956055
,
0
.
41229248
,
0
.
373657227
0
.
553955078
,
0
.
50201416
,
0
.
454956055
,
0
.
41229248
,
0
.
373657227
};
};
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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!
Save comment
Cancel
Please
register
or
sign in
to comment