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
b0f98566
Commit
b0f98566
authored
Sep 12, 2015
by
Paul B Mahol
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avfilter: add stereowiden filter
Signed-off-by:
Paul B Mahol
<
onemda@gmail.com
>
parent
f2b1df73
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
198 additions
and
1 deletion
+198
-1
Changelog
Changelog
+1
-0
filters.texi
doc/filters.texi
+27
-0
Makefile
libavfilter/Makefile
+1
-0
af_stereowiden.c
libavfilter/af_stereowiden.c
+167
-0
allfilters.c
libavfilter/allfilters.c
+1
-0
version.h
libavfilter/version.h
+1
-1
No files found.
Changelog
View file @
b0f98566
...
...
@@ -6,6 +6,7 @@ version <next>:
- extrastereo filter
- ocr filter
- alimiter filter
- stereowiden filter
version 2.8:
...
...
doc/filters.texi
View file @
b0f98566
...
...
@@ -2394,6 +2394,33 @@ silenceremove=1:5:0.02
@end example
@end itemize
@section stereowiden
This filter enhance the stereo effect by suppressing signal common to both
channels and by delaying the signal of left into right and vice versa,
thereby widening the stereo effect.
The filter accepts the following options:
@table @option
@item delay
Time in milliseconds of the delay of left signal into right and vice versa.
Default is 20 milliseconds.
@item feedback
Amount of gain in delayed signal into right and vice versa. Gives a delay
effect of left signal in right output and vice versa which gives widening
effect. Default is 0.3.
@item crossfeed
Cross feed of left into right with inverted phase. This helps in suppressing
the mono. If the value is 1 it will cancel all the signal common to both
channels. Default is 0.3.
@item drymix
Set level of input signal of original channel. Default is 0.8.
@end table
@section treble
Boost or cut treble (upper) frequencies of the audio using a two-pole
...
...
libavfilter/Makefile
View file @
b0f98566
...
...
@@ -80,6 +80,7 @@ OBJS-$(CONFIG_RESAMPLE_FILTER) += af_resample.o
OBJS-$(CONFIG_SIDECHAINCOMPRESS_FILTER)
+=
af_sidechaincompress.o
OBJS-$(CONFIG_SILENCEDETECT_FILTER)
+=
af_silencedetect.o
OBJS-$(CONFIG_SILENCEREMOVE_FILTER)
+=
af_silenceremove.o
OBJS-$(CONFIG_STEREOWIDEN_FILTER)
+=
af_stereowiden.o
OBJS-$(CONFIG_TREBLE_FILTER)
+=
af_biquads.o
OBJS-$(CONFIG_VOLUME_FILTER)
+=
af_volume.o
OBJS-$(CONFIG_VOLUMEDETECT_FILTER)
+=
af_volumedetect.o
...
...
libavfilter/af_stereowiden.c
0 → 100644
View file @
b0f98566
/*
* Copyright (C) 2012 VLC authors and VideoLAN
* Author : Sukrit Sangwan < sukritsangwan at gmail dot com >
*
* 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 "libavutil/channel_layout.h"
#include "libavutil/opt.h"
#include "avfilter.h"
#include "audio.h"
#include "formats.h"
typedef
struct
StereoWidenContext
{
const
AVClass
*
class
;
float
delay
;
float
feedback
;
float
crossfeed
;
float
drymix
;
float
*
buffer
;
float
*
write
;
int
length
;
}
StereoWidenContext
;
#define OFFSET(x) offsetof(StereoWidenContext, x)
#define A AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
static
const
AVOption
stereowiden_options
[]
=
{
{
"delay"
,
"set delay time"
,
OFFSET
(
delay
),
AV_OPT_TYPE_FLOAT
,
{.
dbl
=
20
},
1
,
100
,
A
},
{
"feedback"
,
"set feedback gain"
,
OFFSET
(
feedback
),
AV_OPT_TYPE_FLOAT
,
{.
dbl
=
.
3
},
0
,
0
.
9
,
A
},
{
"crossfeed"
,
"set cross feed"
,
OFFSET
(
crossfeed
),
AV_OPT_TYPE_FLOAT
,
{.
dbl
=
.
3
},
0
,
0
.
8
,
A
},
{
"drymix"
,
"set dry-mix"
,
OFFSET
(
drymix
),
AV_OPT_TYPE_FLOAT
,
{.
dbl
=
.
8
},
0
,
1
.
0
,
A
},
{
NULL
}
};
AVFILTER_DEFINE_CLASS
(
stereowiden
);
static
int
query_formats
(
AVFilterContext
*
ctx
)
{
AVFilterFormats
*
formats
=
NULL
;
AVFilterChannelLayouts
*
layout
=
NULL
;
ff_add_format
(
&
formats
,
AV_SAMPLE_FMT_FLT
);
ff_set_common_formats
(
ctx
,
formats
);
ff_add_channel_layout
(
&
layout
,
AV_CH_LAYOUT_STEREO
);
ff_set_common_channel_layouts
(
ctx
,
layout
);
formats
=
ff_all_samplerates
();
if
(
!
formats
)
return
AVERROR
(
ENOMEM
);
return
ff_set_common_samplerates
(
ctx
,
formats
);
}
static
int
config_input
(
AVFilterLink
*
inlink
)
{
AVFilterContext
*
ctx
=
inlink
->
dst
;
StereoWidenContext
*
s
=
ctx
->
priv
;
s
->
length
=
2
*
s
->
delay
*
inlink
->
sample_rate
/
1000
;
s
->
buffer
=
av_calloc
(
s
->
length
,
sizeof
(
s
->
buffer
));
if
(
!
s
->
buffer
)
return
AVERROR
(
ENOMEM
);
s
->
write
=
s
->
buffer
;
return
0
;
}
static
int
filter_frame
(
AVFilterLink
*
inlink
,
AVFrame
*
in
)
{
AVFilterContext
*
ctx
=
inlink
->
dst
;
AVFilterLink
*
outlink
=
ctx
->
outputs
[
0
];
StereoWidenContext
*
s
=
ctx
->
priv
;
const
float
*
src
=
(
const
float
*
)
in
->
data
[
0
];
const
float
drymix
=
s
->
drymix
;
const
float
crossfeed
=
s
->
crossfeed
;
const
float
feedback
=
s
->
feedback
;
AVFrame
*
out
=
NULL
;
float
*
dst
;
int
n
;
if
(
av_frame_is_writable
(
in
))
{
out
=
in
;
}
else
{
AVFrame
*
out
=
ff_get_audio_buffer
(
inlink
,
in
->
nb_samples
);
if
(
!
out
)
{
av_frame_free
(
&
in
);
return
AVERROR
(
ENOMEM
);
}
av_frame_copy_props
(
out
,
in
);
}
dst
=
(
float
*
)
out
->
data
[
0
];
for
(
n
=
0
;
n
<
in
->
nb_samples
;
n
++
,
src
+=
2
,
dst
+=
2
)
{
const
float
left
=
src
[
0
],
right
=
src
[
1
];
float
*
read
=
s
->
write
+
2
;
if
(
read
>
s
->
buffer
+
s
->
length
)
read
=
s
->
buffer
;
dst
[
0
]
=
drymix
*
left
-
crossfeed
*
right
-
feedback
*
read
[
1
];
dst
[
1
]
=
drymix
*
right
-
crossfeed
*
left
-
feedback
*
read
[
0
];
s
->
write
[
0
]
=
left
;
s
->
write
[
1
]
=
right
;
if
(
s
->
write
==
s
->
buffer
+
s
->
length
)
s
->
write
=
s
->
buffer
;
else
s
->
write
+=
2
;
}
if
(
out
!=
in
)
av_frame_free
(
&
in
);
return
ff_filter_frame
(
outlink
,
out
);
}
static
av_cold
void
uninit
(
AVFilterContext
*
ctx
)
{
StereoWidenContext
*
s
=
ctx
->
priv
;
av_freep
(
&
s
->
buffer
);
}
static
const
AVFilterPad
inputs
[]
=
{
{
.
name
=
"default"
,
.
type
=
AVMEDIA_TYPE_AUDIO
,
.
filter_frame
=
filter_frame
,
.
config_props
=
config_input
,
},
{
NULL
}
};
static
const
AVFilterPad
outputs
[]
=
{
{
.
name
=
"default"
,
.
type
=
AVMEDIA_TYPE_AUDIO
,
},
{
NULL
}
};
AVFilter
ff_af_stereowiden
=
{
.
name
=
"stereowiden"
,
.
description
=
NULL_IF_CONFIG_SMALL
(
"Apply stereo widening effect."
),
.
query_formats
=
query_formats
,
.
priv_size
=
sizeof
(
StereoWidenContext
),
.
priv_class
=
&
stereowiden_class
,
.
uninit
=
uninit
,
.
inputs
=
inputs
,
.
outputs
=
outputs
,
};
libavfilter/allfilters.c
View file @
b0f98566
...
...
@@ -102,6 +102,7 @@ void avfilter_register_all(void)
REGISTER_FILTER
(
SIDECHAINCOMPRESS
,
sidechaincompress
,
af
);
REGISTER_FILTER
(
SILENCEDETECT
,
silencedetect
,
af
);
REGISTER_FILTER
(
SILENCEREMOVE
,
silenceremove
,
af
);
REGISTER_FILTER
(
STEREOWIDEN
,
stereowiden
,
af
);
REGISTER_FILTER
(
TREBLE
,
treble
,
af
);
REGISTER_FILTER
(
VOLUME
,
volume
,
af
);
REGISTER_FILTER
(
VOLUMEDETECT
,
volumedetect
,
af
);
...
...
libavfilter/version.h
View file @
b0f98566
...
...
@@ -30,7 +30,7 @@
#include "libavutil/version.h"
#define LIBAVFILTER_VERSION_MAJOR 6
#define LIBAVFILTER_VERSION_MINOR
3
#define LIBAVFILTER_VERSION_MINOR
4
#define LIBAVFILTER_VERSION_MICRO 100
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
...
...
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