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
090621d7
Commit
090621d7
authored
Feb 29, 2016
by
Clément Bœsch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavfi: add bench and abench filters
parent
1c7e2cf9
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
192 additions
and
1 deletion
+192
-1
Changelog
Changelog
+1
-0
filters.texi
doc/filters.texi
+35
-0
Makefile
libavfilter/Makefile
+2
-0
allfilters.c
libavfilter/allfilters.c
+2
-0
f_bench.c
libavfilter/f_bench.c
+151
-0
version.h
libavfilter/version.h
+1
-1
No files found.
Changelog
View file @
090621d7
...
@@ -8,6 +8,7 @@ version <next>:
...
@@ -8,6 +8,7 @@ version <next>:
- Bob Weaver deinterlacing filter
- Bob Weaver deinterlacing filter
- firequalizer filter
- firequalizer filter
- datascope filter
- datascope filter
- bench and abench filters
version 3.0:
version 3.0:
...
...
doc/filters.texi
View file @
090621d7
...
@@ -10874,6 +10874,7 @@ Scale a subtitle stream to match the main video in size before overlaying
...
@@ -10874,6 +10874,7 @@ Scale a subtitle stream to match the main video in size before overlaying
@end example
@end example
@end itemize
@end itemize
@anchor{selectivecolor}
@section selectivecolor
@section selectivecolor
Adjust cyan, magenta, yellow and black (CMYK) to certain ranges of colors (such
Adjust cyan, magenta, yellow and black (CMYK) to certain ranges of colors (such
...
@@ -14289,6 +14290,40 @@ ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
...
@@ -14289,6 +14290,40 @@ ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
@end example
@end example
@end itemize
@end itemize
@section bench, abench
Benchmark part of a filtergraph.
The filter accepts the following options:
@table @option
@item action
Start or stop a timer.
Available values are:
@table @samp
@item start
Get the current time, set it as frame metadata (using the key
@code{lavfi.bench.start_time}), and forward the frame to the next filter.
@item stop
Get the current time and fetch the @code{lavfi.bench.start_time} metadata from
the input frame metadata to get the time difference. Time difference, average,
maximum and minimum time (respectively @code{t}, @code{avg}, @code{max} and
@code{min}) are then printed. The timestamps are expressed in seconds.
@end table
@end table
@subsection Examples
@itemize
@item
Benchmark @ref{selectivecolor} filter:
@example
bench=start,selectivecolor=reds=-.2 .12 -.49,bench=stop
@end example
@end itemize
@section concat
@section concat
Concatenate audio and video streams, joining them together one after the
Concatenate audio and video streams, joining them together one after the
...
...
libavfilter/Makefile
View file @
090621d7
...
@@ -24,6 +24,7 @@ OBJS = allfilters.o \
...
@@ -24,6 +24,7 @@ OBJS = allfilters.o \
transform.o
\
transform.o
\
video.o
\
video.o
\
OBJS-$(CONFIG_ABENCH_FILTER)
+=
f_bench.o
OBJS-$(CONFIG_ACOMPRESSOR_FILTER)
+=
af_sidechaincompress.o
OBJS-$(CONFIG_ACOMPRESSOR_FILTER)
+=
af_sidechaincompress.o
OBJS-$(CONFIG_ACROSSFADE_FILTER)
+=
af_afade.o
OBJS-$(CONFIG_ACROSSFADE_FILTER)
+=
af_afade.o
OBJS-$(CONFIG_ADELAY_FILTER)
+=
af_adelay.o
OBJS-$(CONFIG_ADELAY_FILTER)
+=
af_adelay.o
...
@@ -116,6 +117,7 @@ OBJS-$(CONFIG_ALPHAEXTRACT_FILTER) += vf_extractplanes.o
...
@@ -116,6 +117,7 @@ OBJS-$(CONFIG_ALPHAEXTRACT_FILTER) += vf_extractplanes.o
OBJS-$(CONFIG_ALPHAMERGE_FILTER)
+=
vf_alphamerge.o
OBJS-$(CONFIG_ALPHAMERGE_FILTER)
+=
vf_alphamerge.o
OBJS-$(CONFIG_ATADENOISE_FILTER)
+=
vf_atadenoise.o
OBJS-$(CONFIG_ATADENOISE_FILTER)
+=
vf_atadenoise.o
OBJS-$(CONFIG_BBOX_FILTER)
+=
bbox.o
vf_bbox.o
OBJS-$(CONFIG_BBOX_FILTER)
+=
bbox.o
vf_bbox.o
OBJS-$(CONFIG_BENCH_FILTER)
+=
f_bench.o
OBJS-$(CONFIG_BLACKDETECT_FILTER)
+=
vf_blackdetect.o
OBJS-$(CONFIG_BLACKDETECT_FILTER)
+=
vf_blackdetect.o
OBJS-$(CONFIG_BLACKFRAME_FILTER)
+=
vf_blackframe.o
OBJS-$(CONFIG_BLACKFRAME_FILTER)
+=
vf_blackframe.o
OBJS-$(CONFIG_BLEND_FILTER)
+=
vf_blend.o
dualinput.o
framesync.o
OBJS-$(CONFIG_BLEND_FILTER)
+=
vf_blend.o
dualinput.o
framesync.o
...
...
libavfilter/allfilters.c
View file @
090621d7
...
@@ -45,6 +45,7 @@ void avfilter_register_all(void)
...
@@ -45,6 +45,7 @@ void avfilter_register_all(void)
return
;
return
;
initialized
=
1
;
initialized
=
1
;
REGISTER_FILTER
(
ABENCH
,
abench
,
af
);
REGISTER_FILTER
(
ACOMPRESSOR
,
acompressor
,
af
);
REGISTER_FILTER
(
ACOMPRESSOR
,
acompressor
,
af
);
REGISTER_FILTER
(
ACROSSFADE
,
acrossfade
,
af
);
REGISTER_FILTER
(
ACROSSFADE
,
acrossfade
,
af
);
REGISTER_FILTER
(
ADELAY
,
adelay
,
af
);
REGISTER_FILTER
(
ADELAY
,
adelay
,
af
);
...
@@ -136,6 +137,7 @@ void avfilter_register_all(void)
...
@@ -136,6 +137,7 @@ void avfilter_register_all(void)
REGISTER_FILTER
(
ALPHAMERGE
,
alphamerge
,
vf
);
REGISTER_FILTER
(
ALPHAMERGE
,
alphamerge
,
vf
);
REGISTER_FILTER
(
ATADENOISE
,
atadenoise
,
vf
);
REGISTER_FILTER
(
ATADENOISE
,
atadenoise
,
vf
);
REGISTER_FILTER
(
ASS
,
ass
,
vf
);
REGISTER_FILTER
(
ASS
,
ass
,
vf
);
REGISTER_FILTER
(
BENCH
,
bench
,
vf
);
REGISTER_FILTER
(
BBOX
,
bbox
,
vf
);
REGISTER_FILTER
(
BBOX
,
bbox
,
vf
);
REGISTER_FILTER
(
BLACKDETECT
,
blackdetect
,
vf
);
REGISTER_FILTER
(
BLACKDETECT
,
blackdetect
,
vf
);
REGISTER_FILTER
(
BLACKFRAME
,
blackframe
,
vf
);
REGISTER_FILTER
(
BLACKFRAME
,
blackframe
,
vf
);
...
...
libavfilter/f_bench.c
0 → 100644
View file @
090621d7
/*
* 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/opt.h"
#include "libavutil/time.h"
#include "avfilter.h"
#include "formats.h"
#include "internal.h"
enum
BenchAction
{
ACTION_START
,
ACTION_STOP
,
NB_ACTION
};
typedef
struct
{
const
AVClass
*
class
;
int
action
;
int64_t
max
,
min
;
int64_t
sum
;
int
n
;
}
BenchContext
;
#define OFFSET(x) offsetof(BenchContext, x)
#define DEFINE_OPTIONS(filt_name, FLAGS) \
static const AVOption filt_name##_options[] = { \
{ "action", "set action", OFFSET(action), AV_OPT_TYPE_INT, {.i64=ACTION_START}, 0, NB_ACTION-1, FLAGS, "action" }, \
{ "start", "start timer", 0, AV_OPT_TYPE_CONST, {.i64=ACTION_START}, INT_MIN, INT_MAX, FLAGS, "action" }, \
{ "stop", "stop timer", 0, AV_OPT_TYPE_CONST, {.i64=ACTION_STOP}, INT_MIN, INT_MAX, FLAGS, "action" }, \
{ NULL } \
}
#define START_TIME_KEY "lavfi.bench.start_time"
#define T2F(v) ((v) / 1000000.)
static
av_cold
int
init
(
AVFilterContext
*
ctx
)
{
BenchContext
*
s
=
ctx
->
priv
;
s
->
min
=
INT64_MAX
;
s
->
max
=
INT64_MIN
;
return
0
;
}
static
int
filter_frame
(
AVFilterLink
*
inlink
,
AVFrame
*
in
)
{
AVFilterContext
*
ctx
=
inlink
->
dst
;
BenchContext
*
s
=
ctx
->
priv
;
AVFilterLink
*
outlink
=
ctx
->
outputs
[
0
];
const
int64_t
t
=
av_gettime
();
if
(
t
<
0
)
return
ff_filter_frame
(
outlink
,
in
);
if
(
s
->
action
==
ACTION_START
)
{
av_dict_set_int
(
&
in
->
metadata
,
START_TIME_KEY
,
t
,
0
);
}
else
if
(
s
->
action
=
ACTION_STOP
)
{
AVDictionaryEntry
*
e
=
av_dict_get
(
in
->
metadata
,
START_TIME_KEY
,
NULL
,
0
);
if
(
e
)
{
const
int64_t
start
=
strtoll
(
e
->
value
,
NULL
,
0
);
const
int64_t
diff
=
t
-
start
;
s
->
sum
+=
diff
;
s
->
n
++
;
s
->
min
=
FFMIN
(
s
->
min
,
diff
);
s
->
max
=
FFMAX
(
s
->
max
,
diff
);
av_log
(
s
,
AV_LOG_INFO
,
"t:%f avg:%f max:%f min:%f
\n
"
,
T2F
(
diff
),
T2F
(
s
->
sum
/
s
->
n
),
T2F
(
s
->
max
),
T2F
(
s
->
min
));
}
av_dict_set
(
&
in
->
metadata
,
START_TIME_KEY
,
NULL
,
0
);
}
return
ff_filter_frame
(
outlink
,
in
);
}
#if CONFIG_BENCH_FILTER
DEFINE_OPTIONS
(
bench
,
AV_OPT_FLAG_FILTERING_PARAM
|
AV_OPT_FLAG_VIDEO_PARAM
);
AVFILTER_DEFINE_CLASS
(
bench
);
static
const
AVFilterPad
bench_inputs
[]
=
{
{
.
name
=
"default"
,
.
type
=
AVMEDIA_TYPE_VIDEO
,
.
filter_frame
=
filter_frame
,
},
{
NULL
}
};
static
const
AVFilterPad
bench_outputs
[]
=
{
{
.
name
=
"default"
,
.
type
=
AVMEDIA_TYPE_VIDEO
,
},
{
NULL
}
};
AVFilter
ff_vf_bench
=
{
.
name
=
"bench"
,
.
description
=
NULL_IF_CONFIG_SMALL
(
"Benchmark part of a filtergraph."
),
.
priv_size
=
sizeof
(
BenchContext
),
.
init
=
init
,
.
inputs
=
bench_inputs
,
.
outputs
=
bench_outputs
,
.
priv_class
=
&
bench_class
,
};
#endif
/* CONFIG_BENCH_FILTER */
#if CONFIG_ABENCH_FILTER
DEFINE_OPTIONS
(
abench
,
AV_OPT_FLAG_FILTERING_PARAM
|
AV_OPT_FLAG_AUDIO_PARAM
);
AVFILTER_DEFINE_CLASS
(
abench
);
static
const
AVFilterPad
abench_inputs
[]
=
{
{
.
name
=
"default"
,
.
type
=
AVMEDIA_TYPE_AUDIO
,
.
filter_frame
=
filter_frame
,
},
{
NULL
}
};
static
const
AVFilterPad
abench_outputs
[]
=
{
{
.
name
=
"default"
,
.
type
=
AVMEDIA_TYPE_AUDIO
,
},
{
NULL
}
};
AVFilter
ff_af_abench
=
{
.
name
=
"abench"
,
.
description
=
NULL_IF_CONFIG_SMALL
(
"Benchmark part of a filtergraph."
),
.
priv_size
=
sizeof
(
BenchContext
),
.
init
=
init
,
.
inputs
=
abench_inputs
,
.
outputs
=
abench_outputs
,
.
priv_class
=
&
abench_class
,
};
#endif
/* CONFIG_ABENCH_FILTER */
libavfilter/version.h
View file @
090621d7
...
@@ -30,7 +30,7 @@
...
@@ -30,7 +30,7 @@
#include "libavutil/version.h"
#include "libavutil/version.h"
#define LIBAVFILTER_VERSION_MAJOR 6
#define LIBAVFILTER_VERSION_MAJOR 6
#define LIBAVFILTER_VERSION_MINOR 3
7
#define LIBAVFILTER_VERSION_MINOR 3
8
#define LIBAVFILTER_VERSION_MICRO 100
#define LIBAVFILTER_VERSION_MICRO 100
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
#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