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
b9dfee9f
Commit
b9dfee9f
authored
Feb 25, 2013
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vf_fade: switch to an AVOptions-based system.
parent
8ec464c6
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
53 additions
and
34 deletions
+53
-34
filters.texi
doc/filters.texi
+18
-14
vf_fade.c
libavfilter/vf_fade.c
+35
-20
No files found.
doc/filters.texi
View file @
b9dfee9f
...
...
@@ -1000,33 +1000,37 @@ For more information about libfreetype, check:
Apply fade-in/out effect to input video.
It accepts the parameters:
@var{type}:@var{start_frame}:@var{nb_frames}
This filter accepts the following options:
@table @option
@var{type} specifies if the effect type, can be either "in" for
fade-in, or "out" for a fade-out effect.
@item type
The effect type -- can be either "in" for fade-in, or "out" for a fade-out
effect.
@item start_frame
The number of the start frame for starting to apply the fade effect.
@var{start_frame} specifies the number of the start frame for starting
to apply the fade effect.
@item nb_frames
The number of frames for which the fade effect has to last. At the end of the
fade-in effect the output video will have the same intensity as the input video,
at the end of the fade-out transition the output video will be completely black.
@var{nb_frames} specifies the number of frames for which the fade
effect has to last. At the end of the fade-in effect the output video
will have the same intensity as the input video, at the end of the
fade-out transition the output video will be completely black.
@end table
A few usage examples follow, usable too as test scenarios.
@example
# fade in first 30 frames of video
fade=
in:0:
30
fade=
type=in:nb_frames=
30
# fade out last 45 frames of a 200-frame video
fade=
out:155:
45
fade=
type=out:start_frame=155:nb_frames=
45
# fade in first 25 frames and fade out last 25 frames of a 1000-frame video
fade=
in:0:25, fade=out:975:
25
fade=
type=in:start_frame=0:nb_frames=25, fade=type=out:start_frame=975:nb_frames=
25
# make first 5 frames black, then fade in from frame 5-24
fade=
in:5:
20
fade=
type=in:start_frame=5:nb_frames=
20
@end example
@section fieldorder
...
...
libavfilter/vf_fade.c
View file @
b9dfee9f
...
...
@@ -26,48 +26,42 @@
*/
#include "libavutil/common.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "avfilter.h"
#include "formats.h"
#include "internal.h"
#include "video.h"
#define FADE_IN 0
#define FADE_OUT 1
typedef
struct
{
const
AVClass
*
class
;
int
type
;
int
factor
,
fade_per_frame
;
unsigned
int
frame_index
,
start_frame
,
stop_frame
;
int
start_frame
,
nb_frames
;
unsigned
int
frame_index
,
stop_frame
;
int
hsub
,
vsub
,
bpp
;
}
FadeContext
;
static
av_cold
int
init
(
AVFilterContext
*
ctx
,
const
char
*
args
)
{
FadeContext
*
fade
=
ctx
->
priv
;
unsigned
int
nb_frames
;
char
in_out
[
4
];
if
(
!
args
||
sscanf
(
args
,
" %3[^:]:%u:%u"
,
in_out
,
&
fade
->
start_frame
,
&
nb_frames
)
!=
3
)
{
av_log
(
ctx
,
AV_LOG_ERROR
,
"Expected 3 arguments '(in|out):#:#':'%s'
\n
"
,
args
);
return
AVERROR
(
EINVAL
);
}
nb_frames
=
nb_frames
?
nb_frames
:
1
;
fade
->
fade_per_frame
=
(
1
<<
16
)
/
nb_frames
;
if
(
!
strcmp
(
in_out
,
"in"
))
fade
->
fade_per_frame
=
(
1
<<
16
)
/
fade
->
nb_frames
;
if
(
fade
->
type
==
FADE_IN
)
{
fade
->
factor
=
0
;
else
if
(
!
strcmp
(
in_out
,
"out"
)
)
{
}
else
if
(
fade
->
type
==
FADE_OUT
)
{
fade
->
fade_per_frame
=
-
fade
->
fade_per_frame
;
fade
->
factor
=
(
1
<<
16
);
}
else
{
av_log
(
ctx
,
AV_LOG_ERROR
,
"first argument must be 'in' or 'out':'%s'
\n
"
,
in_out
);
return
AVERROR
(
EINVAL
);
}
fade
->
stop_frame
=
fade
->
start_frame
+
nb_frames
;
fade
->
stop_frame
=
fade
->
start_frame
+
fade
->
nb_frames
;
av_log
(
ctx
,
AV_LOG_VERBOSE
,
"type:%s start_frame:%d nb_frames:%d
\n
"
,
in_out
,
fade
->
start_frame
,
nb_frames
);
fade
->
type
==
FADE_IN
?
"in"
:
"out"
,
fade
->
start_frame
,
fade
->
nb_frames
);
return
0
;
}
...
...
@@ -143,6 +137,26 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
return
ff_filter_frame
(
inlink
->
dst
->
outputs
[
0
],
frame
);
}
#define OFFSET(x) offsetof(FadeContext, x)
#define FLAGS AV_OPT_FLAG_VIDEO_PARAM
static
const
AVOption
options
[]
=
{
{
"type"
,
"'in' or 'out' for fade-in/fade-out"
,
OFFSET
(
type
),
AV_OPT_TYPE_INT
,
{
.
i64
=
FADE_IN
},
FADE_IN
,
FADE_OUT
,
FLAGS
,
"type"
},
{
"in"
,
"fade-in"
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
FADE_IN
},
.
unit
=
"type"
},
{
"out"
,
"fade-out"
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
FADE_OUT
},
.
unit
=
"type"
},
{
"start_frame"
,
"Number of the first frame to which to apply the effect."
,
OFFSET
(
start_frame
),
AV_OPT_TYPE_INT
,
{
.
i64
=
0
},
0
,
INT_MAX
,
FLAGS
},
{
"nb_frames"
,
"Number of frames to which the effect should be applied."
,
OFFSET
(
nb_frames
),
AV_OPT_TYPE_INT
,
{
.
i64
=
1
},
0
,
INT_MAX
,
FLAGS
},
{
NULL
},
};
static
const
AVClass
fade_class
=
{
.
class_name
=
"fade"
,
.
item_name
=
av_default_item_name
,
.
option
=
options
,
.
version
=
LIBAVUTIL_VERSION_INT
,
};
static
const
AVFilterPad
avfilter_vf_fade_inputs
[]
=
{
{
.
name
=
"default"
,
...
...
@@ -168,6 +182,7 @@ AVFilter avfilter_vf_fade = {
.
description
=
NULL_IF_CONFIG_SMALL
(
"Fade in/out input video"
),
.
init
=
init
,
.
priv_size
=
sizeof
(
FadeContext
),
.
priv_class
=
&
fade_class
,
.
query_formats
=
query_formats
,
.
inputs
=
avfilter_vf_fade_inputs
,
...
...
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