Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
49df339f
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,发现更多精彩内容 >>
提交
49df339f
编写于
8月 26, 2012
作者:
K
Kostya Shishkov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
mss1: merge decode_intra() and decode_inter()
They have most of their code in common.
上级
b42be2d5
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
14 addition
and
50 deletion
+14
-50
libavcodec/mss1.c
libavcodec/mss1.c
+14
-50
未找到文件。
libavcodec/mss1.c
浏览文件 @
49df339f
...
...
@@ -80,6 +80,7 @@ typedef struct MSS1Context {
int
mask_linesize
;
uint32_t
pal
[
256
];
int
free_colours
;
int
keyframe
;
Model
intra_region
,
inter_region
;
Model
pivot
,
edge_mode
,
split_mode
;
PixContext
intra_pix_ctx
,
inter_pix_ctx
;
...
...
@@ -607,44 +608,6 @@ static int decode_region_intra(MSS1Context *ctx, ArithCoder *acoder,
return
0
;
}
static
int
decode_intra
(
MSS1Context
*
ctx
,
ArithCoder
*
acoder
,
int
x
,
int
y
,
int
width
,
int
height
)
{
int
mode
,
pivot
;
if
(
ctx
->
corrupted
)
return
-
1
;
mode
=
arith_get_model_sym
(
acoder
,
&
ctx
->
split_mode
);
switch
(
mode
)
{
case
SPLIT_VERT
:
pivot
=
decode_pivot
(
ctx
,
acoder
,
height
);
if
(
ctx
->
corrupted
)
return
-
1
;
if
(
decode_intra
(
ctx
,
acoder
,
x
,
y
,
width
,
pivot
))
return
-
1
;
if
(
decode_intra
(
ctx
,
acoder
,
x
,
y
+
pivot
,
width
,
height
-
pivot
))
return
-
1
;
break
;
case
SPLIT_HOR
:
pivot
=
decode_pivot
(
ctx
,
acoder
,
width
);
if
(
ctx
->
corrupted
)
return
-
1
;
if
(
decode_intra
(
ctx
,
acoder
,
x
,
y
,
pivot
,
height
))
return
-
1
;
if
(
decode_intra
(
ctx
,
acoder
,
x
+
pivot
,
y
,
width
-
pivot
,
height
))
return
-
1
;
break
;
case
SPLIT_NONE
:
return
decode_region_intra
(
ctx
,
acoder
,
x
,
y
,
width
,
height
);
default:
return
-
1
;
}
return
0
;
}
static
int
decode_region_inter
(
MSS1Context
*
ctx
,
ArithCoder
*
acoder
,
int
x
,
int
y
,
int
width
,
int
height
)
{
...
...
@@ -674,8 +637,8 @@ static int decode_region_inter(MSS1Context *ctx, ArithCoder *acoder,
return
0
;
}
static
int
decode_
inter
(
MSS1Context
*
ctx
,
ArithCoder
*
acoder
,
int
x
,
int
y
,
int
width
,
int
height
)
static
int
decode_
rect
(
MSS1Context
*
ctx
,
ArithCoder
*
acoder
,
int
x
,
int
y
,
int
width
,
int
height
)
{
int
mode
,
pivot
;
...
...
@@ -687,20 +650,23 @@ static int decode_inter(MSS1Context *ctx, ArithCoder *acoder,
switch
(
mode
)
{
case
SPLIT_VERT
:
pivot
=
decode_pivot
(
ctx
,
acoder
,
height
);
if
(
decode_
inter
(
ctx
,
acoder
,
x
,
y
,
width
,
pivot
))
if
(
decode_
rect
(
ctx
,
acoder
,
x
,
y
,
width
,
pivot
))
return
-
1
;
if
(
decode_
inter
(
ctx
,
acoder
,
x
,
y
+
pivot
,
width
,
height
-
pivot
))
if
(
decode_
rect
(
ctx
,
acoder
,
x
,
y
+
pivot
,
width
,
height
-
pivot
))
return
-
1
;
break
;
case
SPLIT_HOR
:
pivot
=
decode_pivot
(
ctx
,
acoder
,
width
);
if
(
decode_
inter
(
ctx
,
acoder
,
x
,
y
,
pivot
,
height
))
if
(
decode_
rect
(
ctx
,
acoder
,
x
,
y
,
pivot
,
height
))
return
-
1
;
if
(
decode_
inter
(
ctx
,
acoder
,
x
+
pivot
,
y
,
width
-
pivot
,
height
))
if
(
decode_
rect
(
ctx
,
acoder
,
x
+
pivot
,
y
,
width
-
pivot
,
height
))
return
-
1
;
break
;
case
SPLIT_NONE
:
return
decode_region_inter
(
ctx
,
acoder
,
x
,
y
,
width
,
height
);
if
(
ctx
->
keyframe
)
return
decode_region_intra
(
ctx
,
acoder
,
x
,
y
,
width
,
height
);
else
return
decode_region_inter
(
ctx
,
acoder
,
x
,
y
,
width
,
height
);
default:
return
-
1
;
}
...
...
@@ -732,21 +698,19 @@ static int mss1_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
c
->
pic_start
=
c
->
pic
.
data
[
0
]
+
c
->
pic
.
linesize
[
0
]
*
(
avctx
->
height
-
1
);
c
->
pic_stride
=
-
c
->
pic
.
linesize
[
0
];
if
(
!
arith_get_bit
(
&
acoder
))
{
c
->
keyframe
=
!
arith_get_bit
(
&
acoder
);
if
(
c
->
keyframe
)
{
codec_reset
(
c
);
pal_changed
=
decode_pal
(
c
,
&
acoder
);
c
->
corrupted
=
decode_intra
(
c
,
&
acoder
,
0
,
0
,
avctx
->
width
,
avctx
->
height
);
c
->
pic
.
key_frame
=
1
;
c
->
pic
.
pict_type
=
AV_PICTURE_TYPE_I
;
}
else
{
if
(
c
->
corrupted
)
return
AVERROR_INVALIDDATA
;
c
->
corrupted
=
decode_inter
(
c
,
&
acoder
,
0
,
0
,
avctx
->
width
,
avctx
->
height
);
c
->
pic
.
key_frame
=
0
;
c
->
pic
.
pict_type
=
AV_PICTURE_TYPE_P
;
}
c
->
corrupted
=
decode_rect
(
c
,
&
acoder
,
0
,
0
,
avctx
->
width
,
avctx
->
height
);
if
(
c
->
corrupted
)
return
AVERROR_INVALIDDATA
;
memcpy
(
c
->
pic
.
data
[
1
],
c
->
pal
,
AVPALETTE_SIZE
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录