Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
265dadbe
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,发现更多精彩内容 >>
提交
265dadbe
编写于
7月 21, 2014
作者:
M
Michael Niedermayer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
avutil/opt: Support general expressions involving AVOption constants in set_string_number()
Signed-off-by:
N
Michael Niedermayer
<
michaelni@gmx.at
>
上级
88efc013
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
25 deletion
+36
-25
libavutil/opt.c
libavutil/opt.c
+36
-25
未找到文件。
libavutil/opt.c
浏览文件 @
265dadbe
...
...
@@ -129,18 +129,6 @@ static int write_number(void *obj, const AVOption *o, void *dst, double num, int
return
0
;
}
static
const
double
const_values
[]
=
{
M_PI
,
M_E
,
0
};
static
const
char
*
const
const_names
[]
=
{
"PI"
,
"E"
,
0
};
static
int
hexchar2int
(
char
c
)
{
if
(
c
>=
'0'
&&
c
<=
'9'
)
return
c
-
'0'
;
if
(
c
>=
'a'
&&
c
<=
'f'
)
return
c
-
'a'
+
10
;
...
...
@@ -220,21 +208,44 @@ static int set_string_number(void *obj, void *target_obj, const AVOption *o, con
buf
[
i
]
=
0
;
{
const
AVOption
*
o_named
=
av_opt_find
(
target_obj
,
buf
,
o
->
unit
,
0
,
0
);
if
(
o_named
&&
o_named
->
type
==
AV_OPT_TYPE_CONST
)
d
=
DEFAULT_NUMVAL
(
o_named
);
else
if
(
!
strcmp
(
buf
,
"default"
))
d
=
DEFAULT_NUMVAL
(
o
);
else
if
(
!
strcmp
(
buf
,
"max"
))
d
=
o
->
max
;
else
if
(
!
strcmp
(
buf
,
"min"
))
d
=
o
->
min
;
else
if
(
!
strcmp
(
buf
,
"none"
))
d
=
0
;
else
if
(
!
strcmp
(
buf
,
"all"
))
d
=
~
0
;
else
{
int
res
=
av_expr_parse_and_eval
(
&
d
,
buf
,
const_names
,
const_values
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
0
,
obj
);
if
(
res
<
0
)
{
av_log
(
obj
,
AV_LOG_ERROR
,
"Unable to parse option value
\"
%s
\"\n
"
,
val
);
return
res
;
const
AVOption
*
o_named
;
int
res
;
int
ci
=
0
;
double
const_values
[
64
];
const
char
*
const_names
[
64
];
if
(
o
->
unit
)
{
for
(
o_named
=
NULL
;
o_named
=
av_opt_next
(
target_obj
,
o_named
);
)
{
if
(
o_named
->
type
==
AV_OPT_TYPE_CONST
&&
o_named
->
unit
&&
!
strcmp
(
o_named
->
unit
,
o
->
unit
))
{
if
(
ci
+
6
>=
FF_ARRAY_ELEMS
(
const_values
))
{
av_log
(
obj
,
AV_LOG_ERROR
,
"const_values array too small for %s
\n
"
,
o
->
unit
);
return
AVERROR_PATCHWELCOME
;
}
const_names
[
ci
]
=
o_named
->
name
;
const_values
[
ci
++
]
=
DEFAULT_NUMVAL
(
o_named
);
}
}
}
const_names
[
ci
]
=
"default"
;
const_values
[
ci
++
]
=
DEFAULT_NUMVAL
(
o
);
const_names
[
ci
]
=
"max"
;
const_values
[
ci
++
]
=
o
->
max
;
const_names
[
ci
]
=
"min"
;
const_values
[
ci
++
]
=
o
->
min
;
const_names
[
ci
]
=
"none"
;
const_values
[
ci
++
]
=
0
;
const_names
[
ci
]
=
"all"
;
const_values
[
ci
++
]
=
~
0
;
const_names
[
ci
]
=
NULL
;
const_values
[
ci
]
=
0
;
res
=
av_expr_parse_and_eval
(
&
d
,
buf
,
const_names
,
const_values
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
0
,
obj
);
if
(
res
<
0
)
{
av_log
(
obj
,
AV_LOG_ERROR
,
"Unable to parse option value
\"
%s
\"\n
"
,
val
);
return
res
;
}
}
if
(
o
->
type
==
AV_OPT_TYPE_FLAGS
)
{
read_number
(
o
,
dst
,
NULL
,
NULL
,
&
intnum
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录