Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
1f018225
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,发现更多精彩内容 >>
提交
1f018225
编写于
9月 19, 2004
作者:
M
Michael Niedermayer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
av_rescale with user specified rounding
Originally committed as revision 3481 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
aa25a462
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
30 addition
and
9 deletion
+30
-9
libavcodec/avcodec.h
libavcodec/avcodec.h
+14
-1
libavcodec/utils.c
libavcodec/utils.c
+16
-8
未找到文件。
libavcodec/avcodec.h
浏览文件 @
1f018225
...
...
@@ -230,6 +230,14 @@ enum Motion_Est_ID {
ME_X1
};
enum
AVRounding
{
AV_ROUND_ZERO
=
0
,
///< round toward zero
AV_ROUND_INF
=
1
,
///< round away from zero
AV_ROUND_DOWN
=
2
,
///< round toward -infinity
AV_ROUND_UP
=
3
,
///< round toward +infinity
AV_ROUND_NEAR_INF
=
5
,
///< round to nearest and halfway cases away from zero
};
typedef
struct
RcOverride
{
int
start_frame
;
int
end_frame
;
...
...
@@ -2061,11 +2069,16 @@ char av_get_pict_type_char(int pict_type);
int
av_reduce
(
int
*
dst_nom
,
int
*
dst_den
,
int64_t
nom
,
int64_t
den
,
int64_t
max
);
/**
* rescale a 64bit integer.
* rescale a 64bit integer
with rounding to nearest
.
* a simple a*b/c isnt possible as it can overflow
*/
int64_t
av_rescale
(
int64_t
a
,
int64_t
b
,
int64_t
c
);
/**
* rescale a 64bit integer with specified rounding.
* a simple a*b/c isnt possible as it can overflow
*/
int64_t
av_rescale_rnd
(
int64_t
a
,
int64_t
b
,
int64_t
c
,
enum
AVRounding
);
/**
* Interface for 0.5.0 version
...
...
libavcodec/utils.c
浏览文件 @
1f018225
...
...
@@ -822,25 +822,33 @@ int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max)
return
den
==
0
;
}
int64_t
av_rescale
(
int64_t
a
,
int64_t
b
,
int64_t
c
){
AVInteger
ai
,
ci
;
int64_t
av_rescale_rnd
(
int64_t
a
,
int64_t
b
,
int64_t
c
,
enum
AVRounding
rnd
){
AVInteger
ai
;
int64_t
r
=
0
;
assert
(
c
>
0
);
assert
(
b
>=
0
);
assert
(
rnd
>=
0
&&
rnd
<=
5
&&
rnd
!=
4
);
if
(
a
<
0
)
return
-
av_rescale
(
-
a
,
b
,
c
);
if
(
a
<
0
)
return
-
av_rescale
_rnd
(
-
a
,
b
,
c
,
rnd
^
((
rnd
>>
1
)
&
1
));
if
(
rnd
==
AV_ROUND_NEAR_INF
)
r
=
c
/
2
;
else
if
(
rnd
&
1
)
r
=
c
-
1
;
if
(
b
<=
INT_MAX
&&
c
<=
INT_MAX
){
if
(
a
<=
INT_MAX
)
return
(
a
*
b
+
c
/
2
)
/
c
;
return
(
a
*
b
+
r
)
/
c
;
else
return
a
/
c
*
b
+
(
a
%
c
*
b
+
c
/
2
)
/
c
;
return
a
/
c
*
b
+
(
a
%
c
*
b
+
r
)
/
c
;
}
ai
=
av_mul_i
(
av_int2i
(
a
),
av_int2i
(
b
));
ci
=
av_int2i
(
c
);
ai
=
av_add_i
(
ai
,
av_shr_i
(
ci
,
1
));
ai
=
av_add_i
(
ai
,
av_int2i
(
r
));
return
av_i2int
(
av_div_i
(
ai
,
ci
));
return
av_i2int
(
av_div_i
(
ai
,
av_int2i
(
c
)));
}
int64_t
av_rescale
(
int64_t
a
,
int64_t
b
,
int64_t
c
){
return
av_rescale_rnd
(
a
,
b
,
c
,
AV_ROUND_NEAR_INF
);
}
/* av_log API */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录