Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
cb5042d0
Commit
cb5042d0
authored
Jun 08, 2012
by
Justin Ruggles
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
float_dsp: Move vector_fmac_scalar() from libavcodec to libavutil
parent
4e4dd717
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
82 additions
and
75 deletions
+82
-75
dsputil_init_neon.c
libavcodec/arm/dsputil_init_neon.c
+0
-3
dsputil_neon.S
libavcodec/arm/dsputil_neon.S
+0
-48
dca.c
libavcodec/dca.c
+5
-4
dsputil.c
libavcodec/dsputil.c
+0
-9
dsputil.h
libavcodec/dsputil.h
+0
-11
float_dsp_init_neon.c
libavutil/arm/float_dsp_init_neon.c
+4
-0
float_dsp_neon.S
libavutil/arm/float_dsp_neon.S
+48
-0
float_dsp.c
libavutil/float_dsp.c
+9
-0
float_dsp.h
libavutil/float_dsp.h
+16
-0
No files found.
libavcodec/arm/dsputil_init_neon.c
View file @
cb5042d0
...
...
@@ -154,8 +154,6 @@ void ff_vector_fmul_window_neon(float *dst, const float *src0,
const
float
*
src1
,
const
float
*
win
,
int
len
);
void
ff_vector_fmul_scalar_neon
(
float
*
dst
,
const
float
*
src
,
float
mul
,
int
len
);
void
ff_vector_fmac_scalar_neon
(
float
*
dst
,
const
float
*
src
,
float
mul
,
int
len
);
void
ff_butterflies_float_neon
(
float
*
v1
,
float
*
v2
,
int
len
);
float
ff_scalarproduct_float_neon
(
const
float
*
v1
,
const
float
*
v2
,
int
len
);
void
ff_vector_fmul_reverse_neon
(
float
*
dst
,
const
float
*
src0
,
...
...
@@ -329,7 +327,6 @@ void ff_dsputil_init_neon(DSPContext *c, AVCodecContext *avctx)
c
->
vector_fmul_window
=
ff_vector_fmul_window_neon
;
c
->
vector_fmul_scalar
=
ff_vector_fmul_scalar_neon
;
c
->
vector_fmac_scalar
=
ff_vector_fmac_scalar_neon
;
c
->
butterflies_float
=
ff_butterflies_float_neon
;
c
->
scalarproduct_float
=
ff_scalarproduct_float_neon
;
c
->
vector_fmul_reverse
=
ff_vector_fmul_reverse_neon
;
...
...
libavcodec/arm/dsputil_neon.S
View file @
cb5042d0
...
...
@@ -682,54 +682,6 @@ NOVFP vdup.32 q8, r2
.unreq len
endfunc
function ff_vector_fmac_scalar_neon, export=1
VFP len .req r2
VFP acc .req r3
NOVFP len .req r3
NOVFP acc .req r2
VFP vdup.32 q15, d0[0]
NOVFP vdup.32 q15, r2
bics r12, len, #15
mov acc, r0
beq 3f
vld1.32 {q0}, [r1,:128]!
vld1.32 {q8}, [acc,:128]!
vld1.32 {q1}, [r1,:128]!
vld1.32 {q9}, [acc,:128]!
1: vmla.f32 q8, q0, q15
vld1.32 {q2}, [r1,:128]!
vld1.32 {q10}, [acc,:128]!
vmla.f32 q9, q1, q15
vld1.32 {q3}, [r1,:128]!
vld1.32 {q11}, [acc,:128]!
vmla.f32 q10, q2, q15
vst1.32 {q8}, [r0,:128]!
vmla.f32 q11, q3, q15
vst1.32 {q9}, [r0,:128]!
subs r12, r12, #16
beq 2f
vld1.32 {q0}, [r1,:128]!
vld1.32 {q8}, [acc,:128]!
vst1.32 {q10}, [r0,:128]!
vld1.32 {q1}, [r1,:128]!
vld1.32 {q9}, [acc,:128]!
vst1.32 {q11}, [r0,:128]!
b 1b
2: vst1.32 {q10}, [r0,:128]!
vst1.32 {q11}, [r0,:128]!
ands len, len, #15
it eq
bxeq lr
3: vld1.32 {q0}, [r1,:128]!
vld1.32 {q8}, [acc,:128]!
vmla.f32 q8, q0, q15
vst1.32 {q8}, [r0,:128]!
subs len, len, #4
bgt 3b
bx lr
.unreq len
endfunc
function ff_butterflies_float_neon, export=1
1: vld1.32 {q0},[r0,:128]
vld1.32 {q1},[r1,:128]
...
...
libavcodec/dca.c
View file @
cb5042d0
...
...
@@ -27,6 +27,7 @@
#include <stdio.h>
#include "libavutil/common.h"
#include "libavutil/float_dsp.h"
#include "libavutil/intmath.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/mathematics.h"
...
...
@@ -383,7 +384,7 @@ typedef struct {
int
profile
;
int
debug_flag
;
///< used for suppressing repeated error messages output
DSPContext
dsp
;
AVFloatDSPContext
f
dsp
;
FFTContext
imdct
;
SynthFilterContext
synth
;
DCADSPContext
dcadsp
;
...
...
@@ -1865,8 +1866,8 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
float
*
back_chan
=
s
->
samples
+
s
->
channel_order_tab
[
s
->
xch_base_channel
]
*
256
;
float
*
lt_chan
=
s
->
samples
+
s
->
channel_order_tab
[
s
->
xch_base_channel
-
2
]
*
256
;
float
*
rt_chan
=
s
->
samples
+
s
->
channel_order_tab
[
s
->
xch_base_channel
-
1
]
*
256
;
s
->
dsp
.
vector_fmac_scalar
(
lt_chan
,
back_chan
,
-
M_SQRT1_2
,
256
);
s
->
dsp
.
vector_fmac_scalar
(
rt_chan
,
back_chan
,
-
M_SQRT1_2
,
256
);
s
->
f
dsp
.
vector_fmac_scalar
(
lt_chan
,
back_chan
,
-
M_SQRT1_2
,
256
);
s
->
f
dsp
.
vector_fmac_scalar
(
rt_chan
,
back_chan
,
-
M_SQRT1_2
,
256
);
}
if
(
avctx
->
sample_fmt
==
AV_SAMPLE_FMT_FLT
)
{
...
...
@@ -1908,7 +1909,7 @@ static av_cold int dca_decode_init(AVCodecContext *avctx)
s
->
avctx
=
avctx
;
dca_init_vlcs
();
ff_dsputil_init
(
&
s
->
dsp
,
avctx
);
avpriv_float_dsp_init
(
&
s
->
fdsp
,
avctx
->
flags
&
CODEC_FLAG_BITEXACT
);
ff_mdct_init
(
&
s
->
imdct
,
6
,
1
,
1
.
0
);
ff_synth_filter_init
(
&
s
->
synth
);
ff_dcadsp_init
(
&
s
->
dcadsp
);
...
...
libavcodec/dsputil.c
View file @
cb5042d0
...
...
@@ -2401,14 +2401,6 @@ static void vector_fmul_scalar_c(float *dst, const float *src, float mul,
dst
[
i
]
=
src
[
i
]
*
mul
;
}
static
void
vector_fmac_scalar_c
(
float
*
dst
,
const
float
*
src
,
float
mul
,
int
len
)
{
int
i
;
for
(
i
=
0
;
i
<
len
;
i
++
)
dst
[
i
]
+=
src
[
i
]
*
mul
;
}
static
void
butterflies_float_c
(
float
*
restrict
v1
,
float
*
restrict
v2
,
int
len
)
{
...
...
@@ -2904,7 +2896,6 @@ av_cold void ff_dsputil_init(DSPContext* c, AVCodecContext *avctx)
c
->
butterflies_float
=
butterflies_float_c
;
c
->
butterflies_float_interleave
=
butterflies_float_interleave_c
;
c
->
vector_fmul_scalar
=
vector_fmul_scalar_c
;
c
->
vector_fmac_scalar
=
vector_fmac_scalar_c
;
c
->
shrink
[
0
]
=
av_image_copy_plane
;
c
->
shrink
[
1
]
=
ff_shrink22
;
...
...
libavcodec/dsputil.h
View file @
cb5042d0
...
...
@@ -416,17 +416,6 @@ typedef struct DSPContext {
*/
void
(
*
vector_fmul_scalar
)(
float
*
dst
,
const
float
*
src
,
float
mul
,
int
len
);
/**
* Multiply a vector of floats by a scalar float and add to
* destination vector. Source and destination vectors must
* overlap exactly or not at all.
* @param dst result vector, 16-byte aligned
* @param src input vector, 16-byte aligned
* @param mul scalar value
* @param len length of vector, multiple of 4
*/
void
(
*
vector_fmac_scalar
)(
float
*
dst
,
const
float
*
src
,
float
mul
,
int
len
);
/**
* Calculate the scalar product of two vectors of floats.
* @param v1 first vector, 16-byte aligned
...
...
libavutil/arm/float_dsp_init_neon.c
View file @
cb5042d0
...
...
@@ -26,7 +26,11 @@
void
ff_vector_fmul_neon
(
float
*
dst
,
const
float
*
src0
,
const
float
*
src1
,
int
len
);
void
ff_vector_fmac_scalar_neon
(
float
*
dst
,
const
float
*
src
,
float
mul
,
int
len
);
void
ff_float_dsp_init_neon
(
AVFloatDSPContext
*
fdsp
)
{
fdsp
->
vector_fmul
=
ff_vector_fmul_neon
;
fdsp
->
vector_fmac_scalar
=
ff_vector_fmac_scalar_neon
;
}
libavutil/arm/float_dsp_neon.S
View file @
cb5042d0
...
...
@@ -62,3 +62,51 @@ function ff_vector_fmul_neon, export=1
3: vst1.32 {d16-d19},[r0,:128]!
bx lr
endfunc
function ff_vector_fmac_scalar_neon, export=1
VFP len .req r2
VFP acc .req r3
NOVFP len .req r3
NOVFP acc .req r2
VFP vdup.32 q15, d0[0]
NOVFP vdup.32 q15, r2
bics r12, len, #15
mov acc, r0
beq 3f
vld1.32 {q0}, [r1,:128]!
vld1.32 {q8}, [acc,:128]!
vld1.32 {q1}, [r1,:128]!
vld1.32 {q9}, [acc,:128]!
1: vmla.f32 q8, q0, q15
vld1.32 {q2}, [r1,:128]!
vld1.32 {q10}, [acc,:128]!
vmla.f32 q9, q1, q15
vld1.32 {q3}, [r1,:128]!
vld1.32 {q11}, [acc,:128]!
vmla.f32 q10, q2, q15
vst1.32 {q8}, [r0,:128]!
vmla.f32 q11, q3, q15
vst1.32 {q9}, [r0,:128]!
subs r12, r12, #16
beq 2f
vld1.32 {q0}, [r1,:128]!
vld1.32 {q8}, [acc,:128]!
vst1.32 {q10}, [r0,:128]!
vld1.32 {q1}, [r1,:128]!
vld1.32 {q9}, [acc,:128]!
vst1.32 {q11}, [r0,:128]!
b 1b
2: vst1.32 {q10}, [r0,:128]!
vst1.32 {q11}, [r0,:128]!
ands len, len, #15
it eq
bxeq lr
3: vld1.32 {q0}, [r1,:128]!
vld1.32 {q8}, [acc,:128]!
vmla.f32 q8, q0, q15
vst1.32 {q8}, [r0,:128]!
subs len, len, #4
bgt 3b
bx lr
.unreq len
endfunc
libavutil/float_dsp.c
View file @
cb5042d0
...
...
@@ -28,9 +28,18 @@ static void vector_fmul_c(float *dst, const float *src0, const float *src1,
dst
[
i
]
=
src0
[
i
]
*
src1
[
i
];
}
static
void
vector_fmac_scalar_c
(
float
*
dst
,
const
float
*
src
,
float
mul
,
int
len
)
{
int
i
;
for
(
i
=
0
;
i
<
len
;
i
++
)
dst
[
i
]
+=
src
[
i
]
*
mul
;
}
void
avpriv_float_dsp_init
(
AVFloatDSPContext
*
fdsp
,
int
bit_exact
)
{
fdsp
->
vector_fmul
=
vector_fmul_c
;
fdsp
->
vector_fmac_scalar
=
vector_fmac_scalar_c
;
#if ARCH_ARM
ff_float_dsp_init_arm
(
fdsp
);
...
...
libavutil/float_dsp.h
View file @
cb5042d0
...
...
@@ -35,6 +35,22 @@ typedef struct AVFloatDSPContext {
*/
void
(
*
vector_fmul
)(
float
*
dst
,
const
float
*
src0
,
const
float
*
src1
,
int
len
);
/**
* Multiply a vector of floats by a scalar float and add to
* destination vector. Source and destination vectors must
* overlap exactly or not at all.
*
* @param dst result vector
* constraints: 16-byte aligned
* @param src input vector
* constraints: 16-byte aligned
* @param mul scalar value
* @param len length of vector
* constraints: multiple of 4
*/
void
(
*
vector_fmac_scalar
)(
float
*
dst
,
const
float
*
src
,
float
mul
,
int
len
);
}
AVFloatDSPContext
;
/**
...
...
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