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
38c619c1
Commit
38c619c1
authored
Feb 14, 2015
by
zhaoxiu.zeng
Committed by
Michael Niedermayer
Feb 15, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avcodec/vc1: cleanup and simplification
Signed-off-by:
Michael Niedermayer
<
michaelni@gmx.at
>
parent
e4a6486c
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
97 additions
and
112 deletions
+97
-112
vc1.c
libavcodec/vc1.c
+97
-112
No files found.
libavcodec/vc1.c
View file @
38c619c1
...
...
@@ -234,15 +234,11 @@ static int vop_dquant_decoding(VC1Context *v)
int
pqdiff
;
//variable size
if
(
v
->
dquant
==
2
)
{
pqdiff
=
get_bits
(
gb
,
3
);
if
(
pqdiff
==
7
)
v
->
altpq
=
get_bits
(
gb
,
5
);
else
v
->
altpq
=
v
->
pq
+
pqdiff
+
1
;
}
else
{
if
(
v
->
dquant
!=
2
)
{
v
->
dquantfrm
=
get_bits1
(
gb
);
if
(
v
->
dquantfrm
)
{
if
(
!
v
->
dquantfrm
)
return
0
;
v
->
dqprofile
=
get_bits
(
gb
,
2
);
switch
(
v
->
dqprofile
)
{
case
DQPROFILE_SINGLE_EDGE
:
...
...
@@ -251,20 +247,21 @@ static int vop_dquant_decoding(VC1Context *v)
break
;
case
DQPROFILE_ALL_MBS
:
v
->
dqbilevel
=
get_bits1
(
gb
);
if
(
!
v
->
dqbilevel
)
if
(
!
v
->
dqbilevel
)
{
v
->
halfpq
=
0
;
return
0
;
}
default:
break
;
//Forbidden ?
}
if
(
v
->
dqbilevel
||
v
->
dqprofile
!=
DQPROFILE_ALL_MBS
)
{
}
pqdiff
=
get_bits
(
gb
,
3
);
if
(
pqdiff
==
7
)
v
->
altpq
=
get_bits
(
gb
,
5
);
else
v
->
altpq
=
v
->
pq
+
pqdiff
+
1
;
}
}
}
return
0
;
}
...
...
@@ -335,8 +332,7 @@ int ff_vc1_decode_sequence_header(AVCodecContext *avctx, VC1Context *v, GetBitCo
return
-
1
;
}
v
->
extended_mv
=
get_bits1
(
gb
);
//common
if
(
!
v
->
profile
&&
v
->
extended_mv
)
{
if
(
!
v
->
profile
&&
v
->
extended_mv
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Extended MVs unavailable in Simple Profile
\n
"
);
return
-
1
;
...
...
@@ -345,8 +341,7 @@ int ff_vc1_decode_sequence_header(AVCodecContext *avctx, VC1Context *v, GetBitCo
v
->
vstransform
=
get_bits1
(
gb
);
//common
v
->
res_transtab
=
get_bits1
(
gb
);
if
(
v
->
res_transtab
)
{
if
(
v
->
res_transtab
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"1 for reserved RES_TRANSTAB is forbidden
\n
"
);
return
-
1
;
...
...
@@ -649,17 +644,14 @@ int ff_vc1_parse_frame_header(VC1Context *v, GetBitContext* gb)
v
->
rangeredfrm
=
0
;
if
(
v
->
rangered
)
v
->
rangeredfrm
=
get_bits1
(
gb
);
v
->
s
.
pict_type
=
get_bits1
(
gb
);
if
(
v
->
s
.
avctx
->
max_b_frames
)
{
if
(
!
v
->
s
.
pict_type
)
{
if
(
get_bits1
(
gb
))
v
->
s
.
pict_type
=
AV_PICTURE_TYPE_I
;
else
v
->
s
.
pict_type
=
AV_PICTURE_TYPE_B
;
}
else
if
(
get_bits1
(
gb
))
{
v
->
s
.
pict_type
=
AV_PICTURE_TYPE_P
;
}
else
{
if
(
v
->
s
.
avctx
->
max_b_frames
&&
!
get_bits1
(
gb
))
{
v
->
s
.
pict_type
=
AV_PICTURE_TYPE_B
;
}
else
v
->
s
.
pict_type
=
v
->
s
.
pict_type
?
AV_PICTURE_TYPE_P
:
AV_PICTURE_TYPE_I
;
v
->
s
.
pict_type
=
AV_PICTURE_TYPE_I
;
}
v
->
bi_type
=
0
;
if
(
v
->
s
.
pict_type
==
AV_PICTURE_TYPE_B
)
{
...
...
@@ -689,19 +681,25 @@ int ff_vc1_parse_frame_header(VC1Context *v, GetBitContext* gb)
v
->
pq
=
ff_vc1_pquant_table
[
0
][
pqindex
];
else
v
->
pq
=
ff_vc1_pquant_table
[
1
][
pqindex
];
v
->
pquantizer
=
1
;
if
(
v
->
quantizer_mode
==
QUANT_FRAME_IMPLICIT
)
v
->
pquantizer
=
pqindex
<
9
;
if
(
v
->
quantizer_mode
==
QUANT_NON_UNIFORM
)
v
->
pquantizer
=
0
;
v
->
pqindex
=
pqindex
;
if
(
pqindex
<
9
)
v
->
halfpq
=
get_bits1
(
gb
);
else
v
->
halfpq
=
0
;
if
(
v
->
quantizer_mode
==
QUANT_FRAME_EXPLICIT
)
switch
(
v
->
quantizer_mode
)
{
case
QUANT_FRAME_IMPLICIT
:
v
->
pquantizer
=
pqindex
<
9
;
break
;
case
QUANT_NON_UNIFORM
:
v
->
pquantizer
=
0
;
break
;
case
QUANT_FRAME_EXPLICIT
:
v
->
pquantizer
=
get_bits1
(
gb
);
break
;
default:
v
->
pquantizer
=
1
;
break
;
}
v
->
dquantfrm
=
0
;
if
(
v
->
extended_mv
==
1
)
v
->
mvrange
=
get_unary
(
gb
,
0
,
3
);
...
...
@@ -725,9 +723,7 @@ int ff_vc1_parse_frame_header(VC1Context *v, GetBitContext* gb)
switch
(
v
->
s
.
pict_type
)
{
case
AV_PICTURE_TYPE_P
:
if
(
v
->
pq
<
5
)
v
->
tt_index
=
0
;
else
if
(
v
->
pq
<
13
)
v
->
tt_index
=
1
;
else
v
->
tt_index
=
2
;
v
->
tt_index
=
(
v
->
pq
>
4
)
+
(
v
->
pq
>
12
);
lowquant
=
(
v
->
pq
>
12
)
?
0
:
1
;
v
->
mv_mode
=
ff_vc1_mv_pmode_table
[
lowquant
][
get_unary
(
gb
,
1
,
4
)];
...
...
@@ -741,16 +737,15 @@ int ff_vc1_parse_frame_header(VC1Context *v, GetBitContext* gb)
INIT_LUT
(
v
->
lumscale
,
v
->
lumshift
,
v
->
last_luty
[
1
],
v
->
last_lutuv
[
1
],
1
);
}
v
->
qs_last
=
v
->
s
.
quarter_sample
;
if
(
v
->
mv_mode
==
MV_PMODE_1MV_HPEL
||
v
->
mv_mode
==
MV_PMODE_1MV_HPEL_BILIN
)
v
->
s
.
quarter_sample
=
0
;
else
if
(
v
->
mv_mode
==
MV_PMODE_INTENSITY_COMP
)
{
if
(
v
->
mv_mode2
==
MV_PMODE_1MV_HPEL
||
v
->
mv_mode2
==
MV_PMODE_1MV_HPEL_BILIN
)
v
->
s
.
quarter_sample
=
0
;
else
v
->
s
.
quarter_sample
=
1
;
}
else
v
->
s
.
quarter_sample
=
1
;
v
->
s
.
mspel
=
!
(
v
->
mv_mode
==
MV_PMODE_1MV_HPEL_BILIN
||
(
v
->
mv_mode
==
MV_PMODE_INTENSITY_COMP
&&
v
->
mv_mode2
==
MV_PMODE_1MV_HPEL_BILIN
));
if
(
v
->
mv_mode
==
MV_PMODE_INTENSITY_COMP
)
{
v
->
s
.
quarter_sample
=
(
v
->
mv_mode2
!=
MV_PMODE_1MV_HPEL
&&
v
->
mv_mode2
!=
MV_PMODE_1MV_HPEL_BILIN
);
v
->
s
.
mspel
=
(
v
->
mv_mode2
!=
MV_PMODE_1MV_HPEL_BILIN
);
}
else
{
v
->
s
.
quarter_sample
=
(
v
->
mv_mode
!=
MV_PMODE_1MV_HPEL
&&
v
->
mv_mode
!=
MV_PMODE_1MV_HPEL_BILIN
);
v
->
s
.
mspel
=
(
v
->
mv_mode
!=
MV_PMODE_1MV_HPEL_BILIN
);
}
if
((
v
->
mv_mode
==
MV_PMODE_INTENSITY_COMP
&&
v
->
mv_mode2
==
MV_PMODE_MIXED_MV
)
||
...
...
@@ -779,21 +774,19 @@ int ff_vc1_parse_frame_header(VC1Context *v, GetBitContext* gb)
vop_dquant_decoding
(
v
);
}
v
->
ttfrm
=
0
;
//FIXME Is that so ?
if
(
v
->
vstransform
)
{
v
->
ttmbf
=
get_bits1
(
gb
);
if
(
v
->
ttmbf
)
{
v
->
ttfrm
=
ff_vc1_ttfrm_to_tt
[
get_bits
(
gb
,
2
)];
}
}
else
v
->
ttfrm
=
0
;
//FIXME Is that so ?
}
else
{
v
->
ttmbf
=
1
;
v
->
ttfrm
=
TT_8X8
;
}
break
;
case
AV_PICTURE_TYPE_B
:
if
(
v
->
pq
<
5
)
v
->
tt_index
=
0
;
else
if
(
v
->
pq
<
13
)
v
->
tt_index
=
1
;
else
v
->
tt_index
=
2
;
v
->
tt_index
=
(
v
->
pq
>
4
)
+
(
v
->
pq
>
12
);
v
->
mv_mode
=
get_bits1
(
gb
)
?
MV_PMODE_1MV
:
MV_PMODE_1MV_HPEL_BILIN
;
v
->
qs_last
=
v
->
s
.
quarter_sample
;
...
...
@@ -819,12 +812,12 @@ int ff_vc1_parse_frame_header(VC1Context *v, GetBitContext* gb)
vop_dquant_decoding
(
v
);
}
v
->
ttfrm
=
0
;
if
(
v
->
vstransform
)
{
v
->
ttmbf
=
get_bits1
(
gb
);
if
(
v
->
ttmbf
)
{
v
->
ttfrm
=
ff_vc1_ttfrm_to_tt
[
get_bits
(
gb
,
2
)];
}
}
else
v
->
ttfrm
=
0
;
}
else
{
v
->
ttmbf
=
1
;
v
->
ttfrm
=
TT_8X8
;
...
...
@@ -859,11 +852,12 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
v
->
numref
=
0
;
v
->
p_frame_skipped
=
0
;
if
(
v
->
second_field
)
{
if
(
v
->
fcm
!=
2
||
v
->
field_mode
!=
1
)
if
(
v
->
fcm
!=
ILACE_FIELD
||
v
->
field_mode
!=
1
)
return
-
1
;
v
->
s
.
pict_type
=
(
v
->
fptype
&
1
)
?
AV_PICTURE_TYPE_P
:
AV_PICTURE_TYPE_I
;
if
(
v
->
fptype
&
4
)
v
->
s
.
pict_type
=
(
v
->
fptype
&
1
)
?
AV_PICTURE_TYPE_BI
:
AV_PICTURE_TYPE_B
;
else
v
->
s
.
pict_type
=
(
v
->
fptype
&
1
)
?
AV_PICTURE_TYPE_P
:
AV_PICTURE_TYPE_I
;
v
->
s
.
current_picture_ptr
->
f
->
pict_type
=
v
->
s
.
pict_type
;
if
(
!
v
->
pic_header_flag
)
goto
parse_common_info
;
...
...
@@ -889,10 +883,10 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
if
(
v
->
field_mode
)
{
v
->
s
.
mb_height
=
FFALIGN
(
v
->
s
.
height
+
15
>>
4
,
2
);
v
->
fptype
=
get_bits
(
gb
,
3
);
v
->
s
.
pict_type
=
(
v
->
fptype
&
2
)
?
AV_PICTURE_TYPE_P
:
AV_PICTURE_TYPE_I
;
if
(
v
->
fptype
&
4
)
// B-picture
v
->
s
.
pict_type
=
(
v
->
fptype
&
2
)
?
AV_PICTURE_TYPE_BI
:
AV_PICTURE_TYPE_B
;
else
v
->
s
.
pict_type
=
(
v
->
fptype
&
2
)
?
AV_PICTURE_TYPE_P
:
AV_PICTURE_TYPE_I
;
}
else
{
v
->
s
.
mb_height
=
v
->
s
.
height
+
15
>>
4
;
switch
(
get_unary
(
gb
,
0
,
4
))
{
...
...
@@ -974,24 +968,29 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
pqindex
=
get_bits
(
gb
,
5
);
if
(
!
pqindex
)
return
-
1
;
v
->
pqindex
=
pqindex
;
if
(
v
->
quantizer_mode
==
QUANT_FRAME_IMPLICIT
)
v
->
pq
=
ff_vc1_pquant_table
[
0
][
pqindex
];
else
v
->
pq
=
ff_vc1_pquant_table
[
1
][
pqindex
];
v
->
pquantizer
=
1
;
if
(
v
->
quantizer_mode
==
QUANT_FRAME_IMPLICIT
)
v
->
pquantizer
=
pqindex
<
9
;
if
(
v
->
quantizer_mode
==
QUANT_NON_UNIFORM
)
v
->
pquantizer
=
0
;
v
->
pqindex
=
pqindex
;
if
(
pqindex
<
9
)
v
->
halfpq
=
get_bits1
(
gb
);
else
v
->
halfpq
=
0
;
if
(
v
->
quantizer_mode
==
QUANT_FRAME_EXPLICIT
)
switch
(
v
->
quantizer_mode
)
{
case
QUANT_FRAME_IMPLICIT
:
v
->
pquantizer
=
pqindex
<
9
;
break
;
case
QUANT_NON_UNIFORM
:
v
->
pquantizer
=
0
;
break
;
case
QUANT_FRAME_EXPLICIT
:
v
->
pquantizer
=
get_bits1
(
gb
);
break
;
default:
v
->
pquantizer
=
1
;
break
;
}
if
(
v
->
postprocflag
)
v
->
postproc
=
get_bits
(
gb
,
2
);
...
...
@@ -1081,12 +1080,7 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
v
->
range_x
=
1
<<
(
v
->
k_x
-
1
);
v
->
range_y
=
1
<<
(
v
->
k_y
-
1
);
if
(
v
->
pq
<
5
)
v
->
tt_index
=
0
;
else
if
(
v
->
pq
<
13
)
v
->
tt_index
=
1
;
else
v
->
tt_index
=
2
;
v
->
tt_index
=
(
v
->
pq
>
4
)
+
(
v
->
pq
>
12
);
if
(
v
->
fcm
!=
ILACE_FRAME
)
{
int
mvmode
;
mvmode
=
get_unary
(
gb
,
1
,
4
);
...
...
@@ -1130,18 +1124,15 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
v
->
last_use_ic
=
1
;
}
v
->
qs_last
=
v
->
s
.
quarter_sample
;
if
(
v
->
mv_mode
==
MV_PMODE_1MV_HPEL
||
v
->
mv_mode
==
MV_PMODE_1MV_HPEL_BILIN
)
v
->
s
.
quarter_sample
=
0
;
else
if
(
v
->
mv_mode
==
MV_PMODE_INTENSITY_COMP
)
{
if
(
v
->
mv_mode2
==
MV_PMODE_1MV_HPEL
||
v
->
mv_mode2
==
MV_PMODE_1MV_HPEL_BILIN
)
v
->
s
.
quarter_sample
=
0
;
else
v
->
s
.
quarter_sample
=
1
;
}
else
v
->
s
.
quarter_sample
=
1
;
v
->
s
.
mspel
=
!
(
v
->
mv_mode
==
MV_PMODE_1MV_HPEL_BILIN
||
(
v
->
mv_mode
==
MV_PMODE_INTENSITY_COMP
&&
v
->
mv_mode2
==
MV_PMODE_1MV_HPEL_BILIN
));
if
(
v
->
mv_mode
==
MV_PMODE_INTENSITY_COMP
)
{
v
->
s
.
quarter_sample
=
(
v
->
mv_mode2
!=
MV_PMODE_1MV_HPEL
&&
v
->
mv_mode2
!=
MV_PMODE_1MV_HPEL_BILIN
);
v
->
s
.
mspel
=
(
v
->
mv_mode2
!=
MV_PMODE_1MV_HPEL_BILIN
);
}
else
{
v
->
s
.
quarter_sample
=
(
v
->
mv_mode
!=
MV_PMODE_1MV_HPEL
&&
v
->
mv_mode
!=
MV_PMODE_1MV_HPEL_BILIN
);
v
->
s
.
mspel
=
(
v
->
mv_mode
!=
MV_PMODE_1MV_HPEL_BILIN
);
}
}
if
(
v
->
fcm
==
PROGRESSIVE
)
{
// progressive
if
((
v
->
mv_mode
==
MV_PMODE_INTENSITY_COMP
&&
...
...
@@ -1192,12 +1183,12 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
vop_dquant_decoding
(
v
);
}
v
->
ttfrm
=
0
;
//FIXME Is that so ?
if
(
v
->
vstransform
)
{
v
->
ttmbf
=
get_bits1
(
gb
);
if
(
v
->
ttmbf
)
{
v
->
ttfrm
=
ff_vc1_ttfrm_to_tt
[
get_bits
(
gb
,
2
)];
}
}
else
v
->
ttfrm
=
0
;
//FIXME Is that so ?
}
else
{
v
->
ttmbf
=
1
;
v
->
ttfrm
=
TT_8X8
;
...
...
@@ -1220,12 +1211,7 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
v
->
range_x
=
1
<<
(
v
->
k_x
-
1
);
v
->
range_y
=
1
<<
(
v
->
k_y
-
1
);
if
(
v
->
pq
<
5
)
v
->
tt_index
=
0
;
else
if
(
v
->
pq
<
13
)
v
->
tt_index
=
1
;
else
v
->
tt_index
=
2
;
v
->
tt_index
=
(
v
->
pq
>
4
)
+
(
v
->
pq
>
12
);
if
(
v
->
field_mode
)
{
int
mvmode
;
...
...
@@ -1313,12 +1299,12 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
vop_dquant_decoding
(
v
);
}
v
->
ttfrm
=
0
;
if
(
v
->
vstransform
)
{
v
->
ttmbf
=
get_bits1
(
gb
);
if
(
v
->
ttmbf
)
{
v
->
ttfrm
=
ff_vc1_ttfrm_to_tt
[
get_bits
(
gb
,
2
)];
}
}
else
v
->
ttfrm
=
0
;
}
else
{
v
->
ttmbf
=
1
;
v
->
ttfrm
=
TT_8X8
;
...
...
@@ -1344,11 +1330,10 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
vop_dquant_decoding
(
v
);
}
v
->
bi_type
=
0
;
if
(
v
->
s
.
pict_type
==
AV_PICTURE_TYPE_BI
)
{
v
->
bi_type
=
(
v
->
s
.
pict_type
==
AV_PICTURE_TYPE_BI
)
;
if
(
v
->
bi_type
)
v
->
s
.
pict_type
=
AV_PICTURE_TYPE_B
;
v
->
bi_type
=
1
;
}
return
0
;
}
...
...
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