Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
f5edfc9e
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,发现更多精彩内容 >>
提交
f5edfc9e
编写于
12月 05, 2011
作者:
L
Luca Barbato
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drawtext: introduce rand(min, max)
Signed-off-by:
N
Luca Barbato
<
lu_zero@gentoo.org
>
上级
73585620
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
27 addition
and
7 deletion
+27
-7
libavfilter/vf_drawtext.c
libavfilter/vf_drawtext.c
+27
-7
未找到文件。
libavfilter/vf_drawtext.c
浏览文件 @
f5edfc9e
...
...
@@ -34,9 +34,11 @@
#include "libavutil/eval.h"
#include "libavutil/opt.h"
#include "libavutil/mathematics.h"
#include "libavutil/random_seed.h"
#include "libavutil/parseutils.h"
#include "libavutil/pixdesc.h"
#include "libavutil/tree.h"
#include "libavutil/lfg.h"
#include "avfilter.h"
#include "drawutils.h"
...
...
@@ -62,6 +64,22 @@ static const char *var_names[] = {
NULL
};
static
const
char
*
fun2_names
[]
=
{
"rand"
,
};
static
double
drand
(
void
*
opaque
,
double
min
,
double
max
)
{
return
val
=
min
+
(
max
-
min
)
/
UINT_MAX
*
av_lfg_get
(
opaque
);
}
typedef
double
(
*
eval_func2
)(
void
*
,
double
a
,
double
b
);
static
const
eval_func2
fun2
[]
=
{
drand
,
NULL
};
enum
var_name
{
VAR_E
,
VAR_PHI
,
...
...
@@ -119,6 +137,7 @@ typedef struct {
char
*
d_expr
;
AVExpr
*
d_pexpr
;
int
draw
;
///< set to zero to prevent drawing
AVLFG
prng
;
///< random
}
DrawTextContext
;
#define OFFSET(x) offsetof(DrawTextContext, x)
...
...
@@ -559,13 +578,14 @@ static int config_input(AVFilterLink *inlink)
dtext
->
var_values
[
VAR_N
]
=
0
;
dtext
->
var_values
[
VAR_T
]
=
NAN
;
av_lfg_init
(
&
dtext
->
prng
,
av_get_random_seed
());
if
((
ret
=
av_expr_parse
(
&
dtext
->
x_pexpr
,
dtext
->
x_expr
,
var_names
,
NULL
,
NULL
,
NULL
,
NULL
,
0
,
ctx
))
<
0
||
NULL
,
NULL
,
fun2_names
,
fun2
,
0
,
ctx
))
<
0
||
(
ret
=
av_expr_parse
(
&
dtext
->
y_pexpr
,
dtext
->
y_expr
,
var_names
,
NULL
,
NULL
,
NULL
,
NULL
,
0
,
ctx
))
<
0
||
NULL
,
NULL
,
fun2_names
,
fun2
,
0
,
ctx
))
<
0
||
(
ret
=
av_expr_parse
(
&
dtext
->
d_pexpr
,
dtext
->
d_expr
,
var_names
,
NULL
,
NULL
,
NULL
,
NULL
,
0
,
ctx
))
<
0
)
NULL
,
NULL
,
fun2_names
,
fun2
,
0
,
ctx
))
<
0
)
return
AVERROR
(
EINVAL
);
if
((
ret
=
...
...
@@ -792,14 +812,14 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
dtext
->
var_values
[
VAR_T
]
=
inpicref
->
pts
==
AV_NOPTS_VALUE
?
NAN
:
inpicref
->
pts
*
av_q2d
(
inlink
->
time_base
);
dtext
->
var_values
[
VAR_X
]
=
av_expr_eval
(
dtext
->
x_pexpr
,
dtext
->
var_values
,
NULL
);
av_expr_eval
(
dtext
->
x_pexpr
,
dtext
->
var_values
,
&
dtext
->
prng
);
dtext
->
var_values
[
VAR_Y
]
=
av_expr_eval
(
dtext
->
y_pexpr
,
dtext
->
var_values
,
NULL
);
av_expr_eval
(
dtext
->
y_pexpr
,
dtext
->
var_values
,
&
dtext
->
prng
);
dtext
->
var_values
[
VAR_X
]
=
av_expr_eval
(
dtext
->
x_pexpr
,
dtext
->
var_values
,
NULL
);
av_expr_eval
(
dtext
->
x_pexpr
,
dtext
->
var_values
,
&
dtext
->
prng
);
dtext
->
draw
=
fail
?
0
:
av_expr_eval
(
dtext
->
d_pexpr
,
dtext
->
var_values
,
NULL
);
av_expr_eval
(
dtext
->
d_pexpr
,
dtext
->
var_values
,
&
dtext
->
prng
);
normalize_double
(
&
dtext
->
x
,
dtext
->
var_values
[
VAR_X
]);
normalize_double
(
&
dtext
->
y
,
dtext
->
var_values
[
VAR_Y
]);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录