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
21581182
Commit
21581182
authored
Feb 24, 2015
by
zhaoxiu.zeng
Committed by
Michael Niedermayer
Feb 28, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avcodec/vc1_block: Optimize vc1_decode_i_block()
Signed-off-by:
Michael Niedermayer
<
michaelni@gmx.at
>
parent
80a0daa0
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
38 additions
and
57 deletions
+38
-57
vc1_block.c
libavcodec/vc1_block.c
+38
-57
No files found.
libavcodec/vc1_block.c
View file @
21581182
...
@@ -555,7 +555,7 @@ static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n,
...
@@ -555,7 +555,7 @@ static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n,
int
i
;
int
i
;
int16_t
*
dc_val
;
int16_t
*
dc_val
;
int16_t
*
ac_val
,
*
ac_val2
;
int16_t
*
ac_val
,
*
ac_val2
;
int
dcdiff
;
int
dcdiff
,
scale
;
/* Get DC differential */
/* Get DC differential */
if
(
n
<
4
)
{
if
(
n
<
4
)
{
...
@@ -584,27 +584,29 @@ static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n,
...
@@ -584,27 +584,29 @@ static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n,
*
dc_val
=
dcdiff
;
*
dc_val
=
dcdiff
;
/* Store the quantized DC coeff, used for prediction */
/* Store the quantized DC coeff, used for prediction */
if
(
n
<
4
)
{
if
(
n
<
4
)
block
[
0
]
=
dcdiff
*
s
->
y_dc_scale
;
scale
=
s
->
y_dc_scale
;
}
else
{
else
block
[
0
]
=
dcdiff
*
s
->
c_dc_scale
;
scale
=
s
->
c_dc_scale
;
}
block
[
0
]
=
dcdiff
*
scale
;
/* Skip ? */
if
(
!
coded
)
{
goto
not_coded
;
}
// AC Decoding
ac_val
=
s
->
ac_val
[
0
][
0
]
+
s
->
block_index
[
n
]
*
16
;
i
=
1
;
ac_val2
=
ac_val
;
if
(
dc_pred_dir
)
// left
ac_val
-=
16
;
else
// top
ac_val
-=
16
*
s
->
block_wrap
[
n
];
{
scale
=
v
->
pq
*
2
+
v
->
halfpq
;
//AC Decoding
i
=
!!
coded
;
if
(
coded
)
{
int
last
=
0
,
skip
,
value
;
int
last
=
0
,
skip
,
value
;
const
uint8_t
*
zz_table
;
const
uint8_t
*
zz_table
;
int
scale
;
int
k
;
int
k
;
scale
=
v
->
pq
*
2
+
v
->
halfpq
;
if
(
v
->
s
.
ac_pred
)
{
if
(
v
->
s
.
ac_pred
)
{
if
(
!
dc_pred_dir
)
if
(
!
dc_pred_dir
)
zz_table
=
v
->
zz_8x8
[
2
];
zz_table
=
v
->
zz_8x8
[
2
];
...
@@ -613,13 +615,6 @@ static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n,
...
@@ -613,13 +615,6 @@ static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n,
}
else
}
else
zz_table
=
v
->
zz_8x8
[
1
];
zz_table
=
v
->
zz_8x8
[
1
];
ac_val
=
s
->
ac_val
[
0
][
0
]
+
s
->
block_index
[
n
]
*
16
;
ac_val2
=
ac_val
;
if
(
dc_pred_dir
)
// left
ac_val
-=
16
;
else
// top
ac_val
-=
16
*
s
->
block_wrap
[
n
];
while
(
!
last
)
{
while
(
!
last
)
{
vc1_decode_ac_coeff
(
v
,
&
last
,
&
skip
,
&
value
,
codingset
);
vc1_decode_ac_coeff
(
v
,
&
last
,
&
skip
,
&
value
,
codingset
);
i
+=
skip
;
i
+=
skip
;
...
@@ -630,13 +625,15 @@ static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n,
...
@@ -630,13 +625,15 @@ static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n,
/* apply AC prediction if needed */
/* apply AC prediction if needed */
if
(
s
->
ac_pred
)
{
if
(
s
->
ac_pred
)
{
int
sh
;
if
(
dc_pred_dir
)
{
// left
if
(
dc_pred_dir
)
{
// left
for
(
k
=
1
;
k
<
8
;
k
++
)
sh
=
v
->
left_blk_sh
;
block
[
k
<<
v
->
left_blk_sh
]
+=
ac_val
[
k
];
}
else
{
// top
}
else
{
// top
for
(
k
=
1
;
k
<
8
;
k
++
)
sh
=
v
->
top_blk_sh
;
block
[
k
<<
v
->
top_blk_sh
]
+=
ac_val
[
k
+
8
]
;
ac_val
+=
8
;
}
}
for
(
k
=
1
;
k
<
8
;
k
++
)
block
[
k
<<
sh
]
+=
ac_val
[
k
];
}
}
/* save AC coeffs for further prediction */
/* save AC coeffs for further prediction */
for
(
k
=
1
;
k
<
8
;
k
++
)
{
for
(
k
=
1
;
k
<
8
;
k
++
)
{
...
@@ -652,46 +649,30 @@ static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n,
...
@@ -652,46 +649,30 @@ static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n,
block
[
k
]
+=
(
block
[
k
]
<
0
)
?
-
v
->
pq
:
v
->
pq
;
block
[
k
]
+=
(
block
[
k
]
<
0
)
?
-
v
->
pq
:
v
->
pq
;
}
}
if
(
s
->
ac_pred
)
i
=
63
;
}
else
{
}
int
k
;
not_coded:
if
(
!
coded
)
{
int
k
,
scale
;
ac_val
=
s
->
ac_val
[
0
][
0
]
+
s
->
block_index
[
n
]
*
16
;
ac_val2
=
ac_val
;
i
=
0
;
scale
=
v
->
pq
*
2
+
v
->
halfpq
;
memset
(
ac_val2
,
0
,
16
*
2
);
memset
(
ac_val2
,
0
,
16
*
2
);
if
(
dc_pred_dir
)
{
// left
ac_val
-=
16
;
if
(
s
->
ac_pred
)
memcpy
(
ac_val2
,
ac_val
,
8
*
2
);
}
else
{
// top
ac_val
-=
16
*
s
->
block_wrap
[
n
];
if
(
s
->
ac_pred
)
memcpy
(
ac_val2
+
8
,
ac_val
+
8
,
8
*
2
);
}
/* apply AC prediction if needed */
/* apply AC prediction if needed */
if
(
s
->
ac_pred
)
{
if
(
s
->
ac_pred
)
{
int
sh
;
if
(
dc_pred_dir
)
{
//left
if
(
dc_pred_dir
)
{
//left
for
(
k
=
1
;
k
<
8
;
k
++
)
{
sh
=
v
->
left_blk_sh
;
block
[
k
<<
v
->
left_blk_sh
]
=
ac_val
[
k
]
*
scale
;
if
(
!
v
->
pquantizer
&&
block
[
k
<<
v
->
left_blk_sh
])
block
[
k
<<
v
->
left_blk_sh
]
+=
(
block
[
k
<<
v
->
left_blk_sh
]
<
0
)
?
-
v
->
pq
:
v
->
pq
;
}
}
else
{
// top
}
else
{
// top
for
(
k
=
1
;
k
<
8
;
k
++
)
{
sh
=
v
->
top_blk_sh
;
block
[
k
<<
v
->
top_blk_sh
]
=
ac_val
[
k
+
8
]
*
scale
;
ac_val
+=
8
;
if
(
!
v
->
pquantizer
&&
block
[
k
<<
v
->
top_blk_sh
])
ac_val2
+=
8
;
block
[
k
<<
v
->
top_blk_sh
]
+=
(
block
[
k
<<
v
->
top_blk_sh
]
<
0
)
?
-
v
->
pq
:
v
->
pq
;
}
}
memcpy
(
ac_val2
,
ac_val
,
8
*
2
);
for
(
k
=
1
;
k
<
8
;
k
++
)
{
block
[
k
<<
sh
]
=
ac_val
[
k
]
*
scale
;
if
(
!
v
->
pquantizer
&&
block
[
k
<<
sh
])
block
[
k
<<
sh
]
+=
(
block
[
k
<<
sh
]
<
0
)
?
-
v
->
pq
:
v
->
pq
;
}
}
i
=
63
;
}
}
}
}
if
(
s
->
ac_pred
)
i
=
63
;
s
->
block_last_index
[
n
]
=
i
;
s
->
block_last_index
[
n
]
=
i
;
return
0
;
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