Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
66d0ad26
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,发现更多精彩内容 >>
提交
66d0ad26
编写于
7月 04, 2006
作者:
K
Kostya Shishkov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Implement intensity compensation
Originally committed as revision 5609 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
8a66a390
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
42 addition
and
2 deletion
+42
-2
libavcodec/vc1.c
libavcodec/vc1.c
+42
-2
未找到文件。
libavcodec/vc1.c
浏览文件 @
66d0ad26
...
...
@@ -319,6 +319,7 @@ typedef struct VC1Context{
// BitPlane direct_mb_plane; ///< bitplane for "direct" MBs
int
mv_type_is_raw
;
///< mv type mb plane is not coded
int
skip_is_raw
;
///< skip mb plane is not coded
uint8_t
luty
[
256
],
lutuv
[
256
];
// lookup tables used for intensity compensation
/** Frame decoding info for S/M profiles only */
//@{
...
...
@@ -946,7 +947,8 @@ static void vc1_mc_1mv(VC1Context *v)
srcU
+=
uvsrc_y
*
s
->
uvlinesize
+
uvsrc_x
;
srcV
+=
uvsrc_y
*
s
->
uvlinesize
+
uvsrc_x
;
if
((
unsigned
)
src_x
>
s
->
h_edge_pos
-
(
mx
&
3
)
-
16
if
((
v
->
mv_mode
==
MV_PMODE_INTENSITY_COMP
)
||
(
unsigned
)
src_x
>
s
->
h_edge_pos
-
(
mx
&
3
)
-
16
||
(
unsigned
)
src_y
>
s
->
v_edge_pos
-
(
my
&
3
)
-
16
){
uint8_t
*
uvbuf
=
s
->
edge_emu_buffer
+
18
*
s
->
linesize
;
...
...
@@ -959,6 +961,26 @@ static void vc1_mc_1mv(VC1Context *v)
uvsrc_x
,
uvsrc_y
,
s
->
h_edge_pos
>>
1
,
s
->
v_edge_pos
>>
1
);
srcU
=
uvbuf
;
srcV
=
uvbuf
+
16
;
/* if we deal with intensity compensation we need to scale source blocks */
if
(
v
->
mv_mode
==
MV_PMODE_INTENSITY_COMP
)
{
int
i
,
j
;
uint8_t
*
src
,
*
src2
;
src
=
srcY
;
for
(
j
=
0
;
j
<
17
;
j
++
)
{
for
(
i
=
0
;
i
<
17
;
i
++
)
src
[
i
]
=
v
->
luty
[
src
[
i
]];
src
+=
s
->
linesize
;
}
src
=
srcU
;
src2
=
srcV
;
for
(
j
=
0
;
j
<
9
;
j
++
)
{
for
(
i
=
0
;
i
<
9
;
i
++
)
{
src
[
i
]
=
v
->
lutuv
[
src
[
i
]];
src2
[
i
]
=
v
->
lutuv
[
src2
[
i
]];
}
src
+=
s
->
uvlinesize
;
src2
+=
s
->
uvlinesize
;
}
}
}
if
(
!
s
->
quarter_sample
)
{
// hpel mc
...
...
@@ -1325,9 +1347,27 @@ static int vc1_parse_frame_header(VC1Context *v, GetBitContext* gb)
v
->
mv_mode
=
mv_pmode_table
[
lowquant
][
get_prefix
(
gb
,
1
,
4
)];
if
(
v
->
mv_mode
==
MV_PMODE_INTENSITY_COMP
)
{
v
->
mv_mode2
=
mv_pmode_table
[
lowquant
][
get_prefix
(
gb
,
1
,
3
)];
int
scale
,
shift
,
i
;
v
->
mv_mode2
=
mv_pmode_table2
[
lowquant
][
get_prefix
(
gb
,
1
,
3
)];
v
->
lumscale
=
get_bits
(
gb
,
6
);
v
->
lumshift
=
get_bits
(
gb
,
6
);
/* fill lookup tables for intensity compensation */
if
(
!
v
->
lumscale
)
{
scale
=
-
64
;
shift
=
(
255
-
v
->
lumshift
*
2
)
<<
6
;
if
(
v
->
lumshift
>
31
)
shift
+=
128
<<
6
;
}
else
{
scale
=
v
->
lumscale
+
32
;
if
(
v
->
lumshift
>
31
)
shift
=
(
v
->
lumshift
-
64
)
<<
6
;
else
shift
=
v
->
lumshift
<<
6
;
}
for
(
i
=
0
;
i
<
256
;
i
++
)
{
v
->
luty
[
i
]
=
clip_uint8
((
scale
*
i
+
shift
+
32
)
>>
6
);
v
->
lutuv
[
i
]
=
clip_uint8
((
scale
*
(
i
-
128
)
+
128
*
64
+
32
)
>>
6
);
}
}
if
(
v
->
mv_mode
==
MV_PMODE_1MV_HPEL
||
v
->
mv_mode
==
MV_PMODE_1MV_HPEL_BILIN
)
v
->
s
.
quarter_sample
=
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录