Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
138712fe
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,发现更多精彩内容 >>
提交
138712fe
编写于
7月 29, 2006
作者:
K
Kostya Shishkov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Support grayscale decoding.
Originally committed as revision 5843 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
dd15f9bf
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
34 addition
and
10 deletion
+34
-10
libavcodec/vc1.c
libavcodec/vc1.c
+34
-10
未找到文件。
libavcodec/vc1.c
浏览文件 @
138712fe
...
...
@@ -891,8 +891,10 @@ static void vc1_put_block(VC1Context *v, DCTELEM block[6][64])
dsp
->
put_pixels_clamped
(
block
[
2
],
Y
,
ys
);
dsp
->
put_pixels_clamped
(
block
[
3
],
Y
+
8
,
ys
);
dsp
->
put_pixels_clamped
(
block
[
4
],
v
->
s
.
dest
[
1
],
us
);
dsp
->
put_pixels_clamped
(
block
[
5
],
v
->
s
.
dest
[
2
],
vs
);
if
(
!
(
v
->
s
.
flags
&
CODEC_FLAG_GRAY
))
{
dsp
->
put_pixels_clamped
(
block
[
4
],
v
->
s
.
dest
[
1
],
us
);
dsp
->
put_pixels_clamped
(
block
[
5
],
v
->
s
.
dest
[
2
],
vs
);
}
}
/** Do motion compensation over 1 macroblock
...
...
@@ -935,6 +937,12 @@ static void vc1_mc_1mv(VC1Context *v, int dir)
srcU
+=
uvsrc_y
*
s
->
uvlinesize
+
uvsrc_x
;
srcV
+=
uvsrc_y
*
s
->
uvlinesize
+
uvsrc_x
;
/* for grayscale we should not try to read from unknown area */
if
(
s
->
flags
&
CODEC_FLAG_GRAY
)
{
srcU
=
s
->
edge_emu_buffer
+
18
*
s
->
linesize
;
srcV
=
s
->
edge_emu_buffer
+
18
*
s
->
linesize
;
}
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
){
...
...
@@ -993,6 +1001,8 @@ static void vc1_mc_1mv(VC1Context *v, int dir)
else
dsp
->
put_no_rnd_qpel_pixels_tab
[
0
][
dxy
](
s
->
dest
[
0
],
srcY
,
s
->
linesize
);
}
if
(
s
->
flags
&
CODEC_FLAG_GRAY
)
return
;
/* Chroma MC always uses qpel blilinear */
uvdxy
=
((
uvmy
&
3
)
<<
2
)
|
(
uvmx
&
3
);
if
(
!
v
->
rnd
){
...
...
@@ -1080,6 +1090,7 @@ static void vc1_mc_4mv_chroma(VC1Context *v)
static
const
int
count
[
16
]
=
{
0
,
1
,
1
,
2
,
1
,
2
,
2
,
3
,
1
,
2
,
2
,
3
,
2
,
3
,
3
,
4
};
if
(
!
v
->
s
.
last_picture
.
data
[
0
])
return
;
if
(
s
->
flags
&
CODEC_FLAG_GRAY
)
return
;
for
(
i
=
0
;
i
<
4
;
i
++
)
{
mvx
[
i
]
=
s
->
mv
[
0
][
i
][
0
];
...
...
@@ -2565,6 +2576,7 @@ static int vc1_decode_p_mb(VC1Context *v)
v
->
c_avail
=
v
->
mb_type
[
0
][
s
->
block_index
[
i
]
-
1
];
vc1_decode_intra_block
(
v
,
s
->
block
[
i
],
i
,
val
,
mquant
,
(
i
&
4
)
?
v
->
codingset2
:
v
->
codingset
);
if
((
i
>
3
)
&&
(
s
->
flags
&
CODEC_FLAG_GRAY
))
continue
;
vc1_inv_trans
(
s
->
block
[
i
],
8
,
8
);
for
(
j
=
0
;
j
<
64
;
j
++
)
s
->
block
[
i
][
j
]
+=
128
;
s
->
dsp
.
put_pixels_clamped
(
s
->
block
[
i
],
s
->
dest
[
dst_idx
]
+
off
,
s
->
linesize
>>
((
i
&
4
)
>>
2
));
...
...
@@ -2579,7 +2591,8 @@ static int vc1_decode_p_mb(VC1Context *v)
vc1_decode_p_block
(
v
,
s
->
block
[
i
],
i
,
mquant
,
ttmb
,
first_block
);
if
(
!
v
->
ttmbf
&&
ttmb
<
8
)
ttmb
=
-
1
;
first_block
=
0
;
s
->
dsp
.
add_pixels_clamped
(
s
->
block
[
i
],
s
->
dest
[
dst_idx
]
+
off
,
(
i
&
4
)
?
s
->
uvlinesize
:
s
->
linesize
);
if
((
i
<
4
)
||
!
(
s
->
flags
&
CODEC_FLAG_GRAY
))
s
->
dsp
.
add_pixels_clamped
(
s
->
block
[
i
],
s
->
dest
[
dst_idx
]
+
off
,
(
i
&
4
)
?
s
->
uvlinesize
:
s
->
linesize
);
}
}
}
...
...
@@ -2666,6 +2679,7 @@ static int vc1_decode_p_mb(VC1Context *v)
v
->
c_avail
=
v
->
mb_type
[
0
][
s
->
block_index
[
i
]
-
1
];
vc1_decode_intra_block
(
v
,
s
->
block
[
i
],
i
,
is_coded
[
i
],
mquant
,
(
i
&
4
)
?
v
->
codingset2
:
v
->
codingset
);
if
((
i
>
3
)
&&
(
s
->
flags
&
CODEC_FLAG_GRAY
))
continue
;
vc1_inv_trans
(
s
->
block
[
i
],
8
,
8
);
for
(
j
=
0
;
j
<
64
;
j
++
)
s
->
block
[
i
][
j
]
+=
128
;
s
->
dsp
.
put_pixels_clamped
(
s
->
block
[
i
],
s
->
dest
[
dst_idx
]
+
off
,
(
i
&
4
)
?
s
->
uvlinesize
:
s
->
linesize
);
...
...
@@ -2680,7 +2694,8 @@ static int vc1_decode_p_mb(VC1Context *v)
status
=
vc1_decode_p_block
(
v
,
s
->
block
[
i
],
i
,
mquant
,
ttmb
,
first_block
);
if
(
!
v
->
ttmbf
&&
ttmb
<
8
)
ttmb
=
-
1
;
first_block
=
0
;
s
->
dsp
.
add_pixels_clamped
(
s
->
block
[
i
],
s
->
dest
[
dst_idx
]
+
off
,
(
i
&
4
)
?
s
->
uvlinesize
:
s
->
linesize
);
if
((
i
<
4
)
||
!
(
s
->
flags
&
CODEC_FLAG_GRAY
))
s
->
dsp
.
add_pixels_clamped
(
s
->
block
[
i
],
s
->
dest
[
dst_idx
]
+
off
,
(
i
&
4
)
?
s
->
uvlinesize
:
s
->
linesize
);
}
}
return
status
;
...
...
@@ -2829,6 +2844,7 @@ static void vc1_decode_b_mb(VC1Context *v)
v
->
c_avail
=
v
->
mb_type
[
0
][
s
->
block_index
[
i
]
-
1
];
vc1_decode_intra_block
(
v
,
s
->
block
[
i
],
i
,
val
,
mquant
,
(
i
&
4
)
?
v
->
codingset2
:
v
->
codingset
);
if
((
i
>
3
)
&&
(
s
->
flags
&
CODEC_FLAG_GRAY
))
continue
;
vc1_inv_trans
(
s
->
block
[
i
],
8
,
8
);
for
(
j
=
0
;
j
<
64
;
j
++
)
s
->
block
[
i
][
j
]
+=
128
;
s
->
dsp
.
put_pixels_clamped
(
s
->
block
[
i
],
s
->
dest
[
dst_idx
]
+
off
,
s
->
linesize
>>
((
i
&
4
)
>>
2
));
...
...
@@ -2843,7 +2859,8 @@ static void vc1_decode_b_mb(VC1Context *v)
vc1_decode_p_block
(
v
,
s
->
block
[
i
],
i
,
mquant
,
ttmb
,
first_block
);
if
(
!
v
->
ttmbf
&&
ttmb
<
8
)
ttmb
=
-
1
;
first_block
=
0
;
s
->
dsp
.
add_pixels_clamped
(
s
->
block
[
i
],
s
->
dest
[
dst_idx
]
+
off
,
(
i
&
4
)
?
s
->
uvlinesize
:
s
->
linesize
);
if
((
i
<
4
)
||
!
(
s
->
flags
&
CODEC_FLAG_GRAY
))
s
->
dsp
.
add_pixels_clamped
(
s
->
block
[
i
],
s
->
dest
[
dst_idx
]
+
off
,
(
i
&
4
)
?
s
->
uvlinesize
:
s
->
linesize
);
}
}
}
...
...
@@ -2928,16 +2945,20 @@ static void vc1_decode_i_blocks(VC1Context *v)
if
(
!
s
->
first_slice_line
)
{
vc1_v_overlap
(
s
->
dest
[
0
],
s
->
linesize
,
0
);
vc1_v_overlap
(
s
->
dest
[
0
]
+
8
,
s
->
linesize
,
0
);
vc1_v_overlap
(
s
->
dest
[
1
],
s
->
uvlinesize
,
s
->
mb_y
&
1
);
vc1_v_overlap
(
s
->
dest
[
2
],
s
->
uvlinesize
,
s
->
mb_y
&
1
);
if
(
!
(
s
->
flags
&
CODEC_FLAG_GRAY
))
{
vc1_v_overlap
(
s
->
dest
[
1
],
s
->
uvlinesize
,
s
->
mb_y
&
1
);
vc1_v_overlap
(
s
->
dest
[
2
],
s
->
uvlinesize
,
s
->
mb_y
&
1
);
}
}
vc1_v_overlap
(
s
->
dest
[
0
]
+
8
*
s
->
linesize
,
s
->
linesize
,
1
);
vc1_v_overlap
(
s
->
dest
[
0
]
+
8
*
s
->
linesize
+
8
,
s
->
linesize
,
1
);
if
(
s
->
mb_x
)
{
vc1_h_overlap
(
s
->
dest
[
0
],
s
->
linesize
,
0
);
vc1_h_overlap
(
s
->
dest
[
0
]
+
8
*
s
->
linesize
,
s
->
linesize
,
0
);
vc1_h_overlap
(
s
->
dest
[
1
],
s
->
uvlinesize
,
s
->
mb_x
&
1
);
vc1_h_overlap
(
s
->
dest
[
2
],
s
->
uvlinesize
,
s
->
mb_x
&
1
);
if
(
!
(
s
->
flags
&
CODEC_FLAG_GRAY
))
{
vc1_h_overlap
(
s
->
dest
[
1
],
s
->
uvlinesize
,
s
->
mb_x
&
1
);
vc1_h_overlap
(
s
->
dest
[
2
],
s
->
uvlinesize
,
s
->
mb_x
&
1
);
}
}
vc1_h_overlap
(
s
->
dest
[
0
]
+
8
,
s
->
linesize
,
1
);
vc1_h_overlap
(
s
->
dest
[
0
]
+
8
*
s
->
linesize
+
8
,
s
->
linesize
,
1
);
...
...
@@ -3079,7 +3100,10 @@ static int vc1_decode_init(AVCodecContext *avctx)
GetBitContext
gb
;
if
(
!
avctx
->
extradata_size
||
!
avctx
->
extradata
)
return
-
1
;
avctx
->
pix_fmt
=
PIX_FMT_YUV420P
;
if
(
!
(
avctx
->
flags
&
CODEC_FLAG_GRAY
))
avctx
->
pix_fmt
=
PIX_FMT_YUV420P
;
else
avctx
->
pix_fmt
=
PIX_FMT_GRAY8
;
v
->
s
.
avctx
=
avctx
;
avctx
->
flags
|=
CODEC_FLAG_EMU_EDGE
;
v
->
s
.
flags
|=
CODEC_FLAG_EMU_EDGE
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录