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
3deb17f9
Commit
3deb17f9
authored
Feb 19, 2018
by
Nicolas Gaullier
Committed by
Paul B Mahol
Mar 29, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavfi/silencedetect: Fix when silence_start=0
0 is a valid value for silence_start
parent
95e47654
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
9 additions
and
5 deletions
+9
-5
af_silencedetect.c
libavfilter/af_silencedetect.c
+9
-5
No files found.
libavfilter/af_silencedetect.c
View file @
3deb17f9
...
...
@@ -39,7 +39,7 @@ typedef struct SilenceDetectContext {
int
mono
;
///< mono mode : check each channel separately (default = check when ALL channels are silent)
int
independant_channels
;
///< number of entries in following arrays (always 1 in mono mode)
int64_t
*
nb_null_samples
;
///< (array) current number of continuous zero samples
int64_t
*
start
;
///< (array) if silence is detected, this value contains the time of the first zero sample
int64_t
*
start
;
///< (array) if silence is detected, this value contains the time of the first zero sample
(default/unset = INT64_MIN)
int
last_sample_rate
;
///< last sample rate to check for sample rate changes
void
(
*
silencedetect
)(
struct
SilenceDetectContext
*
s
,
AVFrame
*
insamples
,
...
...
@@ -76,7 +76,7 @@ static av_always_inline void update(SilenceDetectContext *s, AVFrame *insamples,
{
int
channel
=
current_sample
%
s
->
independant_channels
;
if
(
is_silence
)
{
if
(
!
s
->
start
[
channel
]
)
{
if
(
s
->
start
[
channel
]
==
INT64_MIN
)
{
s
->
nb_null_samples
[
channel
]
++
;
if
(
s
->
nb_null_samples
[
channel
]
>=
nb_samples_notify
)
{
s
->
start
[
channel
]
=
insamples
->
pts
-
(
int64_t
)(
s
->
duration
/
av_q2d
(
time_base
)
+
.
5
);
...
...
@@ -89,7 +89,7 @@ static av_always_inline void update(SilenceDetectContext *s, AVFrame *insamples,
}
}
}
else
{
if
(
s
->
start
[
channel
])
{
if
(
s
->
start
[
channel
]
>
INT64_MIN
)
{
int64_t
end_pts
=
insamples
->
pts
;
int64_t
duration_ts
=
end_pts
-
s
->
start
[
channel
];
set_meta
(
insamples
,
s
->
mono
?
channel
+
1
:
0
,
"silence_end"
,
...
...
@@ -102,7 +102,8 @@ static av_always_inline void update(SilenceDetectContext *s, AVFrame *insamples,
av_ts2timestr
(
end_pts
,
&
time_base
),
av_ts2timestr
(
duration_ts
,
&
time_base
));
}
s
->
nb_null_samples
[
channel
]
=
s
->
start
[
channel
]
=
0
;
s
->
nb_null_samples
[
channel
]
=
0
;
s
->
start
[
channel
]
=
INT64_MIN
;
}
}
...
...
@@ -129,14 +130,17 @@ static int config_input(AVFilterLink *inlink)
{
AVFilterContext
*
ctx
=
inlink
->
dst
;
SilenceDetectContext
*
s
=
ctx
->
priv
;
int
c
;
s
->
independant_channels
=
s
->
mono
?
inlink
->
channels
:
1
;
s
->
nb_null_samples
=
av_mallocz_array
(
sizeof
(
*
s
->
nb_null_samples
),
s
->
independant_channels
);
if
(
!
s
->
nb_null_samples
)
return
AVERROR
(
ENOMEM
);
s
->
start
=
av_malloc
z
_array
(
sizeof
(
*
s
->
start
),
s
->
independant_channels
);
s
->
start
=
av_malloc_array
(
sizeof
(
*
s
->
start
),
s
->
independant_channels
);
if
(
!
s
->
start
)
return
AVERROR
(
ENOMEM
);
for
(
c
=
0
;
c
<
s
->
independant_channels
;
c
++
)
s
->
start
[
c
]
=
INT64_MIN
;
switch
(
inlink
->
format
)
{
case
AV_SAMPLE_FMT_DBL
:
s
->
silencedetect
=
silencedetect_dbl
;
break
;
...
...
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