Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
50af2fd3
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,发现更多精彩内容 >>
提交
50af2fd3
编写于
7月 07, 2006
作者:
K
Kostya Shishkov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Enable coefficient scaling
Originally committed as revision 5651 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
928dc49d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
21 addition
and
22 deletion
+21
-22
libavcodec/vc1.c
libavcodec/vc1.c
+21
-22
未找到文件。
libavcodec/vc1.c
浏览文件 @
50af2fd3
...
...
@@ -1731,7 +1731,7 @@ static inline int vc1_pred_dc(MpegEncContext *s, int overlap, int pq, int n,
int
a
,
b
,
c
,
wrap
,
pred
,
scale
;
int16_t
*
dc_val
;
int
mb_pos
=
s
->
mb_x
+
s
->
mb_y
*
s
->
mb_stride
;
int
mb_pos2
,
q1
,
q2
;
int
q1
,
q2
=
0
;
/* find prediction - wmv3_dc_scale always used here in fact */
if
(
n
<
4
)
scale
=
s
->
y_dc_scale
;
...
...
@@ -1751,28 +1751,32 @@ static inline int vc1_pred_dc(MpegEncContext *s, int overlap, int pq, int n,
if
(
abs
(
a
-
b
)
<=
abs
(
b
-
c
))
{
pred
=
c
;
*
dir_ptr
=
1
;
//left
q2
=
s
->
current_picture
.
qscale_table
[
mb_pos
-
1
];
}
else
{
pred
=
a
;
*
dir_ptr
=
0
;
//top
q2
=
s
->
current_picture
.
qscale_table
[
mb_pos
-
s
->
mb_stride
];
}
}
else
if
(
a_avail
)
{
pred
=
a
;
*
dir_ptr
=
0
;
//top
q2
=
s
->
current_picture
.
qscale_table
[
mb_pos
-
s
->
mb_stride
];
}
else
if
(
c_avail
)
{
pred
=
c
;
*
dir_ptr
=
1
;
//left
q2
=
s
->
current_picture
.
qscale_table
[
mb_pos
-
1
];
}
else
{
pred
=
0
;
*
dir_ptr
=
1
;
//left
}
/* scale coeffs if needed
mb_pos2 = mb_pos - *dir_ptr - (1 - *dir_ptr) * s->mb_stride
;
q1 = s->y_dc_scale_table[s->current_picture.qscale_table[mb_pos]]
;
q2 = s->y_dc_scale_table[s->current_picture.qscale_table[mb_pos2]];
if(q2 && q1!=q2
&& ((*dir_ptr && c_avail) || (!*dir_ptr && a_avail))
) {
pred = (pred *
q2 * vc1_dqscale[q1
- 1] + 0x20000) >> 18;
}
*/
/* scale coeffs if needed
*/
q1
=
s
->
current_picture
.
qscale_table
[
mb_pos
]
;
if
(
n
&&
n
<
4
)
q2
=
q1
;
if
(
q2
&&
q1
!=
q2
)
{
pred
=
(
pred
*
s
->
y_dc_scale_table
[
q2
]
*
vc1_dqscale
[
s
->
y_dc_scale_table
[
q1
]
-
1
]
+
0x20000
)
>>
18
;
}
/* update predictor */
*
dc_val_ptr
=
&
dc_val
[
0
];
...
...
@@ -2064,6 +2068,7 @@ static int vc1_decode_intra_block(VC1Context *v, DCTELEM block[64], int n, int c
int
a_avail
=
v
->
a_avail
,
c_avail
=
v
->
c_avail
;
int
use_pred
=
s
->
ac_pred
;
int
scale
;
int
q1
,
q2
=
0
;
/* XXX: Guard against dumb values of mquant */
mquant
=
(
mquant
<
1
)
?
0
:
(
(
mquant
>
31
)
?
31
:
mquant
);
...
...
@@ -2134,6 +2139,11 @@ static int vc1_decode_intra_block(VC1Context *v, DCTELEM block[64], int n, int c
else
//top
ac_val
-=
16
*
s
->
block_wrap
[
n
];
q1
=
s
->
current_picture
.
qscale_table
[
mb_pos
];
if
(
dc_pred_dir
&&
c_avail
)
q2
=
s
->
current_picture
.
qscale_table
[
mb_pos
-
1
];
if
(
!
dc_pred_dir
&&
a_avail
)
q2
=
s
->
current_picture
.
qscale_table
[
mb_pos
-
s
->
mb_stride
];
if
(
n
&&
n
<
4
)
q2
=
q1
;
if
(
coded
)
{
int
last
=
0
,
skip
,
value
;
const
int8_t
*
zz_table
;
...
...
@@ -2152,13 +2162,7 @@ static int vc1_decode_intra_block(VC1Context *v, DCTELEM block[64], int n, int c
/* apply AC prediction if needed */
if
(
use_pred
)
{
/* scale predictors if needed*/
int
mb_pos2
,
q1
,
q2
;
mb_pos2
=
mb_pos
-
dc_pred_dir
-
(
1
-
dc_pred_dir
)
*
s
->
mb_stride
;
q1
=
s
->
current_picture
.
qscale_table
[
mb_pos
];
q2
=
s
->
current_picture
.
qscale_table
[
mb_pos2
];
if
(
0
&&
q2
&&
q1
!=
q2
&&
((
dc_pred_dir
&&
c_avail
)
||
(
!
dc_pred_dir
&&
a_avail
)))
{
if
(
q2
&&
q1
!=
q2
)
{
q1
=
q1
*
2
-
1
;
q2
=
q2
*
2
-
1
;
...
...
@@ -2196,17 +2200,12 @@ static int vc1_decode_intra_block(VC1Context *v, DCTELEM block[64], int n, int c
if
(
use_pred
)
i
=
63
;
}
else
{
// no AC coeffs
int
k
;
int
mb_pos2
,
q1
,
q2
;
mb_pos2
=
mb_pos
-
dc_pred_dir
-
(
1
-
dc_pred_dir
)
*
s
->
mb_stride
;
q1
=
s
->
current_picture
.
qscale_table
[
mb_pos
];
q2
=
s
->
current_picture
.
qscale_table
[
mb_pos2
];
memset
(
ac_val2
,
0
,
16
*
2
);
if
(
dc_pred_dir
)
{
//left
if
(
use_pred
)
{
memcpy
(
ac_val2
,
ac_val
,
8
*
2
);
if
(
0
&&
q2
&&
q1
!=
q2
&&
c_avail
)
{
if
(
q2
&&
q1
!=
q2
)
{
q1
=
q1
*
2
-
1
;
q2
=
q2
*
2
-
1
;
for
(
k
=
1
;
k
<
8
;
k
++
)
...
...
@@ -2216,7 +2215,7 @@ static int vc1_decode_intra_block(VC1Context *v, DCTELEM block[64], int n, int c
}
else
{
//top
if
(
use_pred
)
{
memcpy
(
ac_val2
+
8
,
ac_val
+
8
,
8
*
2
);
if
(
0
&&
q2
&&
q1
!=
q2
&&
a_avail
)
{
if
(
q2
&&
q1
!=
q2
)
{
q1
=
q1
*
2
-
1
;
q2
=
q2
*
2
-
1
;
for
(
k
=
1
;
k
<
8
;
k
++
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录