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
7e8c1f0c
Commit
7e8c1f0c
authored
Jun 26, 2014
by
Paul B Mahol
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avfilter/af_aphaser: move wave table generation code into separate file
Signed-off-by:
Paul B Mahol
<
onemda@gmail.com
>
parent
12652472
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
122 additions
and
69 deletions
+122
-69
Makefile
libavfilter/Makefile
+1
-1
af_aphaser.c
libavfilter/af_aphaser.c
+4
-68
generate_wave_table.c
libavfilter/generate_wave_table.c
+84
-0
generate_wave_table.h
libavfilter/generate_wave_table.h
+33
-0
No files found.
libavfilter/Makefile
View file @
7e8c1f0c
...
...
@@ -42,7 +42,7 @@ OBJS-$(CONFIG_AMIX_FILTER) += af_amix.o
OBJS-$(CONFIG_ANULL_FILTER)
+=
af_anull.o
OBJS-$(CONFIG_APAD_FILTER)
+=
af_apad.o
OBJS-$(CONFIG_APERMS_FILTER)
+=
f_perms.o
OBJS-$(CONFIG_APHASER_FILTER)
+=
af_aphaser.o
OBJS-$(CONFIG_APHASER_FILTER)
+=
af_aphaser.o
generate_wave_table.o
OBJS-$(CONFIG_ARESAMPLE_FILTER)
+=
af_aresample.o
OBJS-$(CONFIG_ASELECT_FILTER)
+=
f_select.o
OBJS-$(CONFIG_ASENDCMD_FILTER)
+=
f_sendcmd.o
...
...
libavfilter/af_aphaser.c
View file @
7e8c1f0c
...
...
@@ -28,12 +28,7 @@
#include "audio.h"
#include "avfilter.h"
#include "internal.h"
enum
WaveType
{
WAVE_SIN
,
WAVE_TRI
,
WAVE_NB
,
};
#include "generate_wave_table.h"
typedef
struct
AudioPhaserContext
{
const
AVClass
*
class
;
...
...
@@ -118,65 +113,6 @@ static int query_formats(AVFilterContext *ctx)
return
0
;
}
static
void
generate_wave_table
(
enum
WaveType
wave_type
,
enum
AVSampleFormat
sample_fmt
,
void
*
table
,
int
table_size
,
double
min
,
double
max
,
double
phase
)
{
uint32_t
i
,
phase_offset
=
phase
/
M_PI
/
2
*
table_size
+
0
.
5
;
for
(
i
=
0
;
i
<
table_size
;
i
++
)
{
uint32_t
point
=
(
i
+
phase_offset
)
%
table_size
;
double
d
;
switch
(
wave_type
)
{
case
WAVE_SIN
:
d
=
(
sin
((
double
)
point
/
table_size
*
2
*
M_PI
)
+
1
)
/
2
;
break
;
case
WAVE_TRI
:
d
=
(
double
)
point
*
2
/
table_size
;
switch
(
4
*
point
/
table_size
)
{
case
0
:
d
=
d
+
0
.
5
;
break
;
case
1
:
case
2
:
d
=
1
.
5
-
d
;
break
;
case
3
:
d
=
d
-
1
.
5
;
break
;
}
break
;
default:
av_assert0
(
0
);
}
d
=
d
*
(
max
-
min
)
+
min
;
switch
(
sample_fmt
)
{
case
AV_SAMPLE_FMT_FLT
:
{
float
*
fp
=
(
float
*
)
table
;
*
fp
++
=
(
float
)
d
;
table
=
fp
;
continue
;
}
case
AV_SAMPLE_FMT_DBL
:
{
double
*
dp
=
(
double
*
)
table
;
*
dp
++
=
d
;
table
=
dp
;
continue
;
}
}
d
+=
d
<
0
?
-
0
.
5
:
0
.
5
;
switch
(
sample_fmt
)
{
case
AV_SAMPLE_FMT_S16
:
{
int16_t
*
sp
=
table
;
*
sp
++
=
(
int16_t
)
d
;
table
=
sp
;
continue
;
}
case
AV_SAMPLE_FMT_S32
:
{
int32_t
*
ip
=
table
;
*
ip
++
=
(
int32_t
)
d
;
table
=
ip
;
continue
;
}
default:
av_assert0
(
0
);
}
}
}
#define MOD(a, b) (((a) >= (b)) ? (a) - (b) : (a))
#define PHASER_PLANAR(name, type) \
...
...
@@ -274,9 +210,9 @@ static int config_output(AVFilterLink *outlink)
if
(
!
p
->
modulation_buffer
||
!
p
->
delay_buffer
)
return
AVERROR
(
ENOMEM
);
generate_wave_table
(
p
->
type
,
AV_SAMPLE_FMT_S32
,
p
->
modulation_buffer
,
p
->
modulation_buffer_length
,
1
.,
p
->
delay_buffer_length
,
M_PI
/
2
.
0
);
ff_
generate_wave_table
(
p
->
type
,
AV_SAMPLE_FMT_S32
,
p
->
modulation_buffer
,
p
->
modulation_buffer_length
,
1
.,
p
->
delay_buffer_length
,
M_PI
/
2
.
0
);
p
->
delay_pos
=
p
->
modulation_pos
=
0
;
...
...
libavfilter/generate_wave_table.c
0 → 100644
View file @
7e8c1f0c
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdint.h>
#include "libavutil/avassert.h"
#include "avfilter.h"
#include "generate_wave_table.h"
void
ff_generate_wave_table
(
enum
WaveType
wave_type
,
enum
AVSampleFormat
sample_fmt
,
void
*
table
,
int
table_size
,
double
min
,
double
max
,
double
phase
)
{
uint32_t
i
,
phase_offset
=
phase
/
M_PI
/
2
*
table_size
+
0
.
5
;
for
(
i
=
0
;
i
<
table_size
;
i
++
)
{
uint32_t
point
=
(
i
+
phase_offset
)
%
table_size
;
double
d
;
switch
(
wave_type
)
{
case
WAVE_SIN
:
d
=
(
sin
((
double
)
point
/
table_size
*
2
*
M_PI
)
+
1
)
/
2
;
break
;
case
WAVE_TRI
:
d
=
(
double
)
point
*
2
/
table_size
;
switch
(
4
*
point
/
table_size
)
{
case
0
:
d
=
d
+
0
.
5
;
break
;
case
1
:
case
2
:
d
=
1
.
5
-
d
;
break
;
case
3
:
d
=
d
-
1
.
5
;
break
;
}
break
;
default:
av_assert0
(
0
);
}
d
=
d
*
(
max
-
min
)
+
min
;
switch
(
sample_fmt
)
{
case
AV_SAMPLE_FMT_FLT
:
{
float
*
fp
=
(
float
*
)
table
;
*
fp
++
=
(
float
)
d
;
table
=
fp
;
continue
;
}
case
AV_SAMPLE_FMT_DBL
:
{
double
*
dp
=
(
double
*
)
table
;
*
dp
++
=
d
;
table
=
dp
;
continue
;
}
}
d
+=
d
<
0
?
-
0
.
5
:
0
.
5
;
switch
(
sample_fmt
)
{
case
AV_SAMPLE_FMT_S16
:
{
int16_t
*
sp
=
table
;
*
sp
++
=
(
int16_t
)
d
;
table
=
sp
;
continue
;
}
case
AV_SAMPLE_FMT_S32
:
{
int32_t
*
ip
=
table
;
*
ip
++
=
(
int32_t
)
d
;
table
=
ip
;
continue
;
}
default:
av_assert0
(
0
);
}
}
}
libavfilter/generate_wave_table.h
0 → 100644
View file @
7e8c1f0c
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVFILTER_GENERATE_WAVE_TABLE_H
#define AVFILTER_GENERATE_WAVE_TABLE_H
enum
WaveType
{
WAVE_SIN
,
WAVE_TRI
,
WAVE_NB
,
};
void
ff_generate_wave_table
(
enum
WaveType
wave_type
,
enum
AVSampleFormat
sample_fmt
,
void
*
table
,
int
table_size
,
double
min
,
double
max
,
double
phase
);
#endif
/* AVFILTER_GENERATE_WAVE_TABLE_H */
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