Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
45b8e9e5
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,发现更多精彩内容 >>
提交
45b8e9e5
编写于
10月 09, 2007
作者:
B
Baptiste Coudurier
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
better lambda search method
Originally committed as revision 10697 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
d6c52130
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
25 addition
and
14 deletion
+25
-14
libavcodec/dnxhdenc.c
libavcodec/dnxhdenc.c
+25
-14
未找到文件。
libavcodec/dnxhdenc.c
浏览文件 @
45b8e9e5
...
...
@@ -573,27 +573,23 @@ static int dnxhd_mb_var_thread(AVCodecContext *avctx, void *arg)
static
int
dnxhd_encode_rdo
(
AVCodecContext
*
avctx
,
DNXHDEncContext
*
ctx
)
{
unsigned
lambda
,
up_lambda
,
down_lambda
;
int
lambda
,
up_step
,
down_step
;
int
last_lower
=
INT_MAX
,
last_higher
=
0
;
int
x
,
y
,
q
;
for
(
q
=
1
;
q
<
avctx
->
qmax
;
q
++
)
{
ctx
->
qscale
=
q
;
avctx
->
execute
(
avctx
,
dnxhd_calc_bits_thread
,
(
void
**
)
&
ctx
->
thread
[
0
],
NULL
,
avctx
->
thread_count
);
}
up_lambda
=
avctx
->
qmax
<<
LAMBDA_FRAC_BITS
;
down_lambda
=
1
;
// higher ?
up_step
=
down_step
=
2
<<
LAMBDA_FRAC_BITS
;
lambda
=
ctx
->
lambda
;
for
(;;)
{
int
bits
=
0
;
int
end
=
0
;
if
(
lambda
==
up_lambda
)
{
lambda
--
;
end
=
1
;
// need to set final qscales/bits
}
if
(
lambda
==
down_lambda
)
{
if
(
lambda
==
last_higher
)
{
lambda
++
;
end
=
1
;
end
=
1
;
// need to set final qscales/bits
}
for
(
y
=
0
;
y
<
ctx
->
m
.
mb_height
;
y
++
)
{
for
(
x
=
0
;
x
<
ctx
->
m
.
mb_width
;
x
++
)
{
...
...
@@ -615,20 +611,35 @@ static int dnxhd_encode_rdo(AVCodecContext *avctx, DNXHDEncContext *ctx)
if
(
bits
>
ctx
->
frame_bits
)
break
;
}
//dprintf(ctx->m.avctx, "lambda %d, up %d, down %d, bits %d, frame %d\n", lambda, up_lambda, down_lambda, bits, ctx->frame_bits);
//dprintf(ctx->m.avctx, "lambda %d, up %u, down %u, bits %d, frame %d\n",
// lambda, last_higher, last_lower, bits, ctx->frame_bits);
if
(
end
)
{
if
(
bits
>
ctx
->
frame_bits
)
return
-
1
;
break
;
}
if
(
bits
<
ctx
->
frame_bits
)
{
up_lambda
=
lambda
;
lambda
=
(
down_lambda
+
lambda
)
>>
1
;
last_lower
=
FFMIN
(
lambda
,
last_lower
);
if
(
last_higher
!=
0
)
lambda
=
(
lambda
+
last_higher
)
>>
1
;
else
lambda
-=
down_step
;
down_step
*=
5
;
// XXX tune ?
up_step
=
1
<<
LAMBDA_FRAC_BITS
;
lambda
=
FFMAX
(
1
,
lambda
);
if
(
lambda
==
last_lower
)
break
;
}
else
{
down_lambda
=
lambda
;
lambda
=
(
up_lambda
+
lambda
)
>>
1
;
last_higher
=
FFMAX
(
lambda
,
last_higher
);
if
(
last_lower
!=
INT_MAX
)
lambda
=
(
lambda
+
last_lower
)
>>
1
;
else
lambda
+=
up_step
;
up_step
*=
5
;
down_step
=
1
<<
LAMBDA_FRAC_BITS
;
}
}
//dprintf(ctx->m.avctx, "out lambda %d\n", lambda);
ctx
->
lambda
=
lambda
;
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录