Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
49df339f
Commit
49df339f
authored
Aug 26, 2012
by
Kostya Shishkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mss1: merge decode_intra() and decode_inter()
They have most of their code in common.
parent
b42be2d5
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
14 additions
and
50 deletions
+14
-50
mss1.c
libavcodec/mss1.c
+14
-50
No files found.
libavcodec/mss1.c
View file @
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
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment