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
23ccf3c7
Commit
23ccf3c7
authored
Jul 17, 2010
by
Stefano Sabatini
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add color source.
Originally committed as revision 24282 to
svn://svn.ffmpeg.org/ffmpeg/trunk
parent
bbfb2c80
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
168 additions
and
2 deletions
+168
-2
filters.texi
doc/filters.texi
+39
-0
Makefile
libavfilter/Makefile
+1
-0
allfilters.c
libavfilter/allfilters.c
+1
-0
avfilter.h
libavfilter/avfilter.h
+1
-1
vf_pad.c
libavfilter/vf_pad.c
+126
-1
No files found.
doc/filters.texi
View file @
23ccf3c7
...
...
@@ -229,6 +229,45 @@ Flip the input video vertically.
Below is a description of the currently available video sources.
@section color
Provide an uniformly colored input.
It accepts the following parameters:
@var{color}:@var{frame_size}:@var{frame_width}
Follows the description of the accepted parameters.
@table @option
@item color
Specify the color of the source. It can be the name of a color (case
insensitive match) or a 0xRRGGBB[AA] sequence, possibly followed by an
alpha specifier. The default value is "black".
@item frame_size
Specify the size of the sourced video, it may be a string of the form
@var{width}x@var{heigth}, or the name of a size abbreviation. The
default value is "320x240".
@item frame_rate
Specify the frame rate of the sourced video, as the number of frames
generated per second. It has to be a string in the format
@var{frame_rate_num}/@var{frame_rate_den}, an integer number, a float
number or a valid video frame rate abbreviation. The default value is
"25".
@end table
For example the following graph description will generate a red source
with an opacity of 0.2, with size "qcif" and a frame rate of 10
frames per second, which will be overlayed over the source connected
to the pad with identifier "in".
@example
"color=red@@0.2:qcif:10 [color]; [in][color] overlay [out]"
@end example
@section nullsrc
Null video source, never return images. It is mainly useful as a
...
...
libavfilter/Makefile
View file @
23ccf3c7
...
...
@@ -28,6 +28,7 @@ OBJS-$(CONFIG_UNSHARP_FILTER) += vf_unsharp.o
OBJS-$(CONFIG_VFLIP_FILTER)
+=
vf_vflip.o
OBJS-$(CONFIG_BUFFER_FILTER)
+=
vsrc_buffer.o
OBJS-$(CONFIG_COLOR_FILTER)
+=
vf_pad.o
OBJS-$(CONFIG_NULLSRC_FILTER)
+=
vsrc_nullsrc.o
OBJS-$(CONFIG_NULLSINK_FILTER)
+=
vsink_nullsink.o
...
...
libavfilter/allfilters.c
View file @
23ccf3c7
...
...
@@ -48,6 +48,7 @@ void avfilter_register_all(void)
REGISTER_FILTER
(
VFLIP
,
vflip
,
vf
);
REGISTER_FILTER
(
BUFFER
,
buffer
,
vsrc
);
REGISTER_FILTER
(
COLOR
,
color
,
vsrc
);
REGISTER_FILTER
(
NULLSRC
,
nullsrc
,
vsrc
);
REGISTER_FILTER
(
NULLSINK
,
nullsink
,
vsink
);
...
...
libavfilter/avfilter.h
View file @
23ccf3c7
...
...
@@ -25,7 +25,7 @@
#include "libavutil/avutil.h"
#define LIBAVFILTER_VERSION_MAJOR 1
#define LIBAVFILTER_VERSION_MINOR 2
2
#define LIBAVFILTER_VERSION_MINOR 2
3
#define LIBAVFILTER_VERSION_MICRO 0
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
...
...
libavfilter/vf_pad.c
View file @
23ccf3c7
...
...
@@ -21,13 +21,14 @@
/**
* @file
* video padding filter
* video padding filter
and color source
*/
#include "avfilter.h"
#include "parseutils.h"
#include "libavutil/pixdesc.h"
#include "libavutil/colorspace.h"
#include "libavcodec/avcodec.h"
enum
{
RED
=
0
,
GREEN
,
BLUE
,
ALPHA
};
...
...
@@ -337,3 +338,127 @@ AVFilter avfilter_vf_pad = {
};
#endif
/* CONFIG_PAD_FILTER */
#if CONFIG_COLOR_FILTER
typedef
struct
{
int
w
,
h
;
uint8_t
color
[
4
];
AVRational
time_base
;
uint8_t
*
line
[
4
];
int
line_step
[
4
];
int
hsub
,
vsub
;
///< chroma subsampling values
uint64_t
pts
;
}
ColorContext
;
static
av_cold
int
color_init
(
AVFilterContext
*
ctx
,
const
char
*
args
,
void
*
opaque
)
{
ColorContext
*
color
=
ctx
->
priv
;
char
color_string
[
128
]
=
"black"
;
char
frame_size
[
128
]
=
"320x240"
;
char
frame_rate
[
128
]
=
"25"
;
AVRational
frame_rate_q
;
int
ret
;
if
(
args
)
sscanf
(
args
,
"%127[^:]:%127[^:]:%127s"
,
color_string
,
frame_size
,
frame_rate
);
if
(
av_parse_video_frame_size
(
&
color
->
w
,
&
color
->
h
,
frame_size
)
<
0
)
{
av_log
(
ctx
,
AV_LOG_ERROR
,
"Invalid frame size: %s
\n
"
,
frame_size
);
return
AVERROR
(
EINVAL
);
}
if
(
av_parse_video_frame_rate
(
&
frame_rate_q
,
frame_rate
)
<
0
||
frame_rate_q
.
den
<=
0
||
frame_rate_q
.
num
<=
0
)
{
av_log
(
ctx
,
AV_LOG_ERROR
,
"Invalid frame rate: %s
\n
"
,
frame_rate
);
return
AVERROR
(
EINVAL
);
}
color
->
time_base
.
num
=
frame_rate_q
.
den
;
color
->
time_base
.
den
=
frame_rate_q
.
num
;
if
((
ret
=
av_parse_color
(
color
->
color
,
color_string
,
ctx
))
<
0
)
return
ret
;
return
0
;
}
static
av_cold
void
color_uninit
(
AVFilterContext
*
ctx
)
{
ColorContext
*
color
=
ctx
->
priv
;
int
i
;
for
(
i
=
0
;
i
<
4
;
i
++
)
{
av_freep
(
&
color
->
line
[
i
]);
color
->
line_step
[
i
]
=
0
;
}
}
static
int
color_config_props
(
AVFilterLink
*
inlink
)
{
AVFilterContext
*
ctx
=
inlink
->
src
;
ColorContext
*
color
=
ctx
->
priv
;
uint8_t
rgba_color
[
4
];
int
is_packed_rgba
;
const
AVPixFmtDescriptor
*
pix_desc
=
&
av_pix_fmt_descriptors
[
inlink
->
format
];
color
->
hsub
=
pix_desc
->
log2_chroma_w
;
color
->
vsub
=
pix_desc
->
log2_chroma_h
;
color
->
w
&=
~
((
1
<<
color
->
hsub
)
-
1
);
color
->
h
&=
~
((
1
<<
color
->
vsub
)
-
1
);
if
(
avcodec_check_dimensions
(
ctx
,
color
->
w
,
color
->
h
)
<
0
)
return
AVERROR
(
EINVAL
);
memcpy
(
rgba_color
,
color
->
color
,
sizeof
(
rgba_color
));
fill_line_with_color
(
color
->
line
,
color
->
line_step
,
color
->
w
,
color
->
color
,
inlink
->
format
,
rgba_color
,
&
is_packed_rgba
);
av_log
(
ctx
,
AV_LOG_INFO
,
"w:%d h:%d r:%d/%d color:0x%02x%02x%02x%02x[%s]
\n
"
,
color
->
w
,
color
->
h
,
color
->
time_base
.
den
,
color
->
time_base
.
num
,
color
->
color
[
0
],
color
->
color
[
1
],
color
->
color
[
2
],
color
->
color
[
3
],
is_packed_rgba
?
"rgba"
:
"yuva"
);
inlink
->
w
=
color
->
w
;
inlink
->
h
=
color
->
h
;
return
0
;
}
static
int
color_request_frame
(
AVFilterLink
*
link
)
{
ColorContext
*
color
=
link
->
src
->
priv
;
AVFilterPicRef
*
picref
=
avfilter_get_video_buffer
(
link
,
AV_PERM_WRITE
,
color
->
w
,
color
->
h
);
picref
->
pixel_aspect
=
(
AVRational
)
{
1
,
1
};
picref
->
pts
=
av_rescale_q
(
color
->
pts
++
,
color
->
time_base
,
AV_TIME_BASE_Q
);
picref
->
pos
=
0
;
avfilter_start_frame
(
link
,
avfilter_ref_pic
(
picref
,
~
0
));
draw_rectangle
(
picref
,
color
->
line
,
color
->
line_step
,
color
->
hsub
,
color
->
vsub
,
0
,
0
,
color
->
w
,
color
->
h
);
avfilter_draw_slice
(
link
,
0
,
color
->
h
,
1
);
avfilter_end_frame
(
link
);
avfilter_unref_pic
(
picref
);
return
0
;
}
AVFilter
avfilter_vsrc_color
=
{
.
name
=
"color"
,
.
description
=
NULL_IF_CONFIG_SMALL
(
"Provide an uniformly colored input, syntax is: [color[:size[:rate]]]"
),
.
priv_size
=
sizeof
(
ColorContext
),
.
init
=
color_init
,
.
uninit
=
color_uninit
,
.
query_formats
=
query_formats
,
.
inputs
=
(
AVFilterPad
[])
{{
.
name
=
NULL
}},
.
outputs
=
(
AVFilterPad
[])
{{
.
name
=
"default"
,
.
type
=
CODEC_TYPE_VIDEO
,
.
request_frame
=
color_request_frame
,
.
config_props
=
color_config_props
},
{
.
name
=
NULL
}},
};
#endif
/* CONFIG_COLOR_FILTER */
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