Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
23ccf3c7
F
Ffmpeg
项目概览
小白菜888
/
Ffmpeg
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Ffmpeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
23ccf3c7
编写于
7月 17, 2010
作者:
S
Stefano Sabatini
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add color source.
Originally committed as revision 24282 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
bbfb2c80
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
168 addition
and
2 deletion
+168
-2
doc/filters.texi
doc/filters.texi
+39
-0
libavfilter/Makefile
libavfilter/Makefile
+1
-0
libavfilter/allfilters.c
libavfilter/allfilters.c
+1
-0
libavfilter/avfilter.h
libavfilter/avfilter.h
+1
-1
libavfilter/vf_pad.c
libavfilter/vf_pad.c
+126
-1
未找到文件。
doc/filters.texi
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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 */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录