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
22307f17
Commit
22307f17
authored
Feb 26, 2014
by
Michael Niedermayer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avfilter/af_compand: whitespace changes from af_compand_fork
Signed-off-by:
Michael Niedermayer
<
michaelni@gmx.at
>
parent
5d166de2
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
44 additions
and
36 deletions
+44
-36
af_compand.c
libavfilter/af_compand.c
+44
-36
No files found.
libavfilter/af_compand.c
View file @
22307f17
...
...
@@ -66,13 +66,13 @@ typedef struct CompandContext {
#define A AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
static
const
AVOption
compand_options
[]
=
{
{
"attacks"
,
"set time over which increase of volume is determined"
,
OFFSET
(
attacks
),
AV_OPT_TYPE_STRING
,
{.
str
=
NULL
},
0
,
0
,
A
},
{
"decays"
,
"set time over which decrease of volume is determined"
,
OFFSET
(
decays
),
AV_OPT_TYPE_STRING
,
{.
str
=
NULL
},
0
,
0
,
A
},
{
"points"
,
"set points of transfer function"
,
OFFSET
(
points
),
AV_OPT_TYPE_STRING
,
{.
str
=
NULL
},
0
,
0
,
A
},
{
"soft-knee"
,
"set soft-knee"
,
OFFSET
(
curve_dB
),
AV_OPT_TYPE_DOUBLE
,
{
.
dbl
=
0
.
01
},
0
.
01
,
900
,
A
},
{
"gain"
,
"set output gain"
,
OFFSET
(
gain_dB
),
AV_OPT_TYPE_DOUBLE
,
{
.
dbl
=
0
},
-
900
,
900
,
A
},
{
"volume"
,
"set initial volume"
,
OFFSET
(
initial_volume
),
AV_OPT_TYPE_DOUBLE
,
{
.
dbl
=
0
},
-
900
,
0
,
A
},
{
"delay"
,
"set delay for samples before sending them to volume adjuster"
,
OFFSET
(
delay
),
AV_OPT_TYPE_DOUBLE
,
{
.
dbl
=
0
},
0
,
20
,
A
},
{
"attacks"
,
"set time over which increase of volume is determined"
,
OFFSET
(
attacks
),
AV_OPT_TYPE_STRING
,
{
.
str
=
NULL
},
0
,
0
,
A
},
{
"decays"
,
"set time over which decrease of volume is determined"
,
OFFSET
(
decays
),
AV_OPT_TYPE_STRING
,
{
.
str
=
NULL
},
0
,
0
,
A
},
{
"points"
,
"set points of transfer function"
,
OFFSET
(
points
),
AV_OPT_TYPE_STRING
,
{
.
str
=
NULL
},
0
,
0
,
A
},
{
"soft-knee"
,
"set soft-knee"
,
OFFSET
(
curve_dB
),
AV_OPT_TYPE_DOUBLE
,
{
.
dbl
=
0
.
01
},
0
.
01
,
900
,
A
},
{
"gain"
,
"set output gain"
,
OFFSET
(
gain_dB
),
AV_OPT_TYPE_DOUBLE
,
{
.
dbl
=
0
},
-
900
,
900
,
A
},
{
"volume"
,
"set initial volume"
,
OFFSET
(
initial_volume
),
AV_OPT_TYPE_DOUBLE
,
{
.
dbl
=
0
},
-
900
,
0
,
A
},
{
"delay"
,
"set delay for samples before sending them to volume adjuster"
,
OFFSET
(
delay
),
AV_OPT_TYPE_DOUBLE
,
{
.
dbl
=
0
},
0
,
20
,
A
},
{
NULL
}
};
...
...
@@ -137,7 +137,6 @@ static void count_items(char *item_str, int *nb_items)
if
(
*
p
==
' '
)
(
*
nb_items
)
++
;
}
}
static
void
update_volume
(
ChanParam
*
cp
,
double
in
)
...
...
@@ -164,7 +163,6 @@ static double get_volume(CompandContext *s, double in_lin)
for
(
i
=
1
;
i
<
s
->
nb_segments
;
i
++
)
if
(
in_log
<=
s
->
segments
[
i
].
x
)
break
;
cs
=
&
s
->
segments
[
i
-
1
];
in_log
-=
cs
->
x
;
out_log
=
cs
->
y
+
in_log
*
(
cs
->
a
*
in_log
+
cs
->
b
);
...
...
@@ -244,11 +242,14 @@ static int compand_delay(AVFilterContext *ctx, AVFrame *frame)
}
av_frame_copy_props
(
out_frame
,
frame
);
out_frame
->
pts
=
s
->
pts
;
s
->
pts
+=
av_rescale_q
(
nb_samples
-
i
,
(
AVRational
){
1
,
inlink
->
sample_rate
},
inlink
->
time_base
);
s
->
pts
+=
av_rescale_q
(
nb_samples
-
i
,
(
AVRational
){
1
,
inlink
->
sample_rate
},
inlink
->
time_base
);
}
dst
=
(
double
*
)
out_frame
->
extended_data
[
chan
];
dst
[
oindex
++
]
=
av_clipd
(
dbuf
[
dindex
]
*
get_volume
(
s
,
cp
->
volume
),
-
1
,
1
);
dst
[
oindex
++
]
=
av_clipd
(
dbuf
[
dindex
]
*
get_volume
(
s
,
cp
->
volume
),
-
1
,
1
);
}
else
{
count
++
;
}
...
...
@@ -277,7 +278,8 @@ static int compand_drain(AVFilterLink *outlink)
if
(
!
frame
)
return
AVERROR
(
ENOMEM
);
frame
->
pts
=
s
->
pts
;
s
->
pts
+=
av_rescale_q
(
frame
->
nb_samples
,
(
AVRational
){
1
,
outlink
->
sample_rate
},
outlink
->
time_base
);
s
->
pts
+=
av_rescale_q
(
frame
->
nb_samples
,
(
AVRational
){
1
,
outlink
->
sample_rate
},
outlink
->
time_base
);
for
(
chan
=
0
;
chan
<
channels
;
chan
++
)
{
double
*
dbuf
=
(
double
*
)
s
->
delayptrs
[
chan
];
...
...
@@ -346,7 +348,9 @@ static int config_output(AVFilterLink *outlink)
nb_decays
=
new_nb_items
;
if
(
nb_attacks
!=
nb_decays
)
{
av_log
(
ctx
,
AV_LOG_ERROR
,
"Number of attacks %d differs from number of decays %d.
\n
"
,
nb_attacks
,
nb_decays
);
av_log
(
ctx
,
AV_LOG_ERROR
,
"Number of attacks %d differs from number of decays %d.
\n
"
,
nb_attacks
,
nb_decays
);
return
AVERROR
(
EINVAL
);
}
...
...
@@ -356,11 +360,13 @@ static int config_output(AVFilterLink *outlink)
char
*
tstr
=
av_strtok
(
p
,
" "
,
&
saveptr
);
p
=
NULL
;
if
(
sscanf
(
tstr
,
"%lf/%lf"
,
&
S
(
i
).
x
,
&
S
(
i
).
y
)
!=
2
)
{
av_log
(
ctx
,
AV_LOG_ERROR
,
"Invalid and/or missing input/output value.
\n
"
);
av_log
(
ctx
,
AV_LOG_ERROR
,
"Invalid and/or missing input/output value.
\n
"
);
return
AVERROR
(
EINVAL
);
}
if
(
i
&&
S
(
i
-
1
).
x
>
S
(
i
).
x
)
{
av_log
(
ctx
,
AV_LOG_ERROR
,
"Transfer function input values must be increasing.
\n
"
);
av_log
(
ctx
,
AV_LOG_ERROR
,
"Transfer function input values must be increasing.
\n
"
);
return
AVERROR
(
EINVAL
);
}
S
(
i
).
y
-=
S
(
i
).
x
;
...
...
@@ -431,7 +437,7 @@ static int config_output(AVFilterLink *outlink)
out1
=
cy
-
L
(
3
).
y
;
in2
=
L
(
2
).
x
-
L
(
3
).
x
;
out2
=
L
(
2
).
y
-
L
(
3
).
y
;
L
(
3
).
a
=
(
out2
/
in2
-
out1
/
in1
)
/
(
in2
-
in1
);
L
(
3
).
a
=
(
out2
/
in2
-
out1
/
in1
)
/
(
in2
-
in1
);
L
(
3
).
b
=
out1
/
in1
-
L
(
3
).
a
*
in1
;
}
L
(
3
).
x
=
0
;
...
...
@@ -511,9 +517,11 @@ static const AVFilterPad compand_outputs[] = {
{
NULL
}
};
AVFilter
ff_af_compand
=
{
.
name
=
"compand"
,
.
description
=
NULL_IF_CONFIG_SMALL
(
"Compress or expand audio dynamic range."
),
.
description
=
NULL_IF_CONFIG_SMALL
(
"Compress or expand audio dynamic range."
),
.
query_formats
=
query_formats
,
.
priv_size
=
sizeof
(
CompandContext
),
.
priv_class
=
&
compand_class
,
...
...
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