Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
aom-rav1e
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Xiph.Org
aom-rav1e
Commits
f1d090e2
Commit
f1d090e2
authored
Aug 24, 2015
by
Hui Su
Committed by
Gerrit Code Review
Aug 24, 2015
Browse files
Options
Browse Files
Download
Plain Diff
Merge "Refactoring on transform types"
parents
697a8e6f
d76e5b36
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
452 additions
and
243 deletions
+452
-243
vp10/common/idct.c
vp10/common/idct.c
+128
-38
vp10/common/idct.h
vp10/common/idct.h
+23
-18
vp10/decoder/decodeframe.c
vp10/decoder/decodeframe.c
+65
-100
vp10/encoder/encodemb.c
vp10/encoder/encodemb.c
+204
-71
vp10/encoder/encodemb.h
vp10/encoder/encodemb.h
+12
-0
vp10/encoder/rdopt.c
vp10/encoder/rdopt.c
+20
-16
No files found.
vp10/common/idct.c
View file @
f1d090e2
...
@@ -178,30 +178,73 @@ void vp10_idct32x32_add(const tran_low_t *input, uint8_t *dest, int stride,
...
@@ -178,30 +178,73 @@ void vp10_idct32x32_add(const tran_low_t *input, uint8_t *dest, int stride,
vpx_idct32x32_1024_add
(
input
,
dest
,
stride
);
vpx_idct32x32_1024_add
(
input
,
dest
,
stride
);
}
}
// iht
void
vp10_inv_txfm_add_4x4
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
void
vp10_iht4x4_add
(
TX_TYPE
tx_type
,
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
,
TX_TYPE
tx_type
,
int
stride
,
int
eob
)
{
void
(
*
itxm_add_4x4
)(
const
tran_low_t
*
input
,
if
(
tx_type
==
DCT_DCT
)
uint8_t
*
dest
,
int
stride
,
int
eob
))
{
vp10_idct4x4_add
(
input
,
dest
,
stride
,
eob
);
switch
(
tx_type
)
{
else
case
DCT_DCT
:
itxm_add_4x4
(
input
,
dest
,
stride
,
eob
);
break
;
case
ADST_DCT
:
case
DCT_ADST
:
case
ADST_ADST
:
vp10_iht4x4_16_add
(
input
,
dest
,
stride
,
tx_type
);
vp10_iht4x4_16_add
(
input
,
dest
,
stride
,
tx_type
);
break
;
default:
assert
(
0
);
break
;
}
}
}
void
vp10_iht8x8_add
(
TX_TYPE
tx_type
,
const
tran_low_t
*
input
,
uint8_t
*
dest
,
void
vp10_inv_txfm_add_8x8
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
)
{
int
stride
,
int
eob
,
TX_TYPE
tx_type
)
{
if
(
tx_type
==
DCT_DCT
)
{
switch
(
tx_type
)
{
case
DCT_DCT
:
vp10_idct8x8_add
(
input
,
dest
,
stride
,
eob
);
vp10_idct8x8_add
(
input
,
dest
,
stride
,
eob
);
}
else
{
break
;
case
ADST_DCT
:
case
DCT_ADST
:
case
ADST_ADST
:
vp10_iht8x8_64_add
(
input
,
dest
,
stride
,
tx_type
);
vp10_iht8x8_64_add
(
input
,
dest
,
stride
,
tx_type
);
break
;
default:
assert
(
0
);
break
;
}
}
}
}
void
vp10_iht16x16_add
(
TX_TYPE
tx_type
,
const
tran_low_t
*
input
,
uint8_t
*
dest
,
void
vp10_inv_txfm_add_16x16
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
)
{
int
stride
,
int
eob
,
TX_TYPE
tx_type
)
{
if
(
tx_type
==
DCT_DCT
)
{
switch
(
tx_type
)
{
case
DCT_DCT
:
vp10_idct16x16_add
(
input
,
dest
,
stride
,
eob
);
vp10_idct16x16_add
(
input
,
dest
,
stride
,
eob
);
}
else
{
break
;
case
ADST_DCT
:
case
DCT_ADST
:
case
ADST_ADST
:
vp10_iht16x16_256_add
(
input
,
dest
,
stride
,
tx_type
);
vp10_iht16x16_256_add
(
input
,
dest
,
stride
,
tx_type
);
break
;
default:
assert
(
0
);
break
;
}
}
void
vp10_inv_txfm_add_32x32
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
,
TX_TYPE
tx_type
)
{
switch
(
tx_type
)
{
case
DCT_DCT
:
vp10_idct32x32_add
(
input
,
dest
,
stride
,
eob
);
break
;
case
ADST_DCT
:
case
DCT_ADST
:
case
ADST_ADST
:
assert
(
0
);
break
;
default:
assert
(
0
);
break
;
}
}
}
}
...
@@ -373,30 +416,77 @@ void vp10_highbd_idct32x32_add(const tran_low_t *input, uint8_t *dest,
...
@@ -373,30 +416,77 @@ void vp10_highbd_idct32x32_add(const tran_low_t *input, uint8_t *dest,
}
}
}
}
// iht
void
vp10_highbd_inv_txfm_add_4x4
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
void
vp10_highbd_iht4x4_add
(
TX_TYPE
tx_type
,
const
tran_low_t
*
input
,
int
stride
,
int
eob
,
int
bd
,
TX_TYPE
tx_type
,
uint8_t
*
dest
,
int
stride
,
int
eob
,
int
bd
)
{
void
(
*
highbd_itxm_add_4x4
)
if
(
tx_type
==
DCT_DCT
)
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
vp10_highbd_idct4x4_add
(
input
,
dest
,
stride
,
eob
,
bd
);
int
stride
,
int
eob
,
int
bd
))
{
else
switch
(
tx_type
)
{
case
DCT_DCT
:
highbd_itxm_add_4x4
(
input
,
dest
,
stride
,
eob
,
bd
);
break
;
case
ADST_DCT
:
case
DCT_ADST
:
case
ADST_ADST
:
vp10_highbd_iht4x4_16_add
(
input
,
dest
,
stride
,
tx_type
,
bd
);
vp10_highbd_iht4x4_16_add
(
input
,
dest
,
stride
,
tx_type
,
bd
);
break
;
default:
assert
(
0
);
break
;
}
}
}
void
vp10_highbd_iht8x8_add
(
TX_TYPE
tx_type
,
const
tran_low_t
*
input
,
void
vp10_highbd_inv_txfm_add_8x8
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
uint8_t
*
dest
,
int
stride
,
int
eob
,
int
bd
)
{
int
stride
,
int
eob
,
int
bd
,
if
(
tx_type
==
DCT_DCT
)
{
TX_TYPE
tx_type
)
{
switch
(
tx_type
)
{
case
DCT_DCT
:
vp10_highbd_idct8x8_add
(
input
,
dest
,
stride
,
eob
,
bd
);
vp10_highbd_idct8x8_add
(
input
,
dest
,
stride
,
eob
,
bd
);
}
else
{
break
;
case
ADST_DCT
:
case
DCT_ADST
:
case
ADST_ADST
:
vp10_highbd_iht8x8_64_add
(
input
,
dest
,
stride
,
tx_type
,
bd
);
vp10_highbd_iht8x8_64_add
(
input
,
dest
,
stride
,
tx_type
,
bd
);
break
;
default:
assert
(
0
);
break
;
}
}
}
}
void
vp10_highbd_iht16x16_add
(
TX_TYPE
tx_type
,
const
tran_low_t
*
input
,
void
vp10_highbd_inv_txfm_add_16x16
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
uint8_t
*
dest
,
int
stride
,
int
eob
,
int
bd
)
{
int
stride
,
int
eob
,
int
bd
,
if
(
tx_type
==
DCT_DCT
)
{
TX_TYPE
tx_type
)
{
switch
(
tx_type
)
{
case
DCT_DCT
:
vp10_highbd_idct16x16_add
(
input
,
dest
,
stride
,
eob
,
bd
);
vp10_highbd_idct16x16_add
(
input
,
dest
,
stride
,
eob
,
bd
);
}
else
{
break
;
case
ADST_DCT
:
case
DCT_ADST
:
case
ADST_ADST
:
vp10_highbd_iht16x16_256_add
(
input
,
dest
,
stride
,
tx_type
,
bd
);
vp10_highbd_iht16x16_256_add
(
input
,
dest
,
stride
,
tx_type
,
bd
);
break
;
default:
assert
(
0
);
break
;
}
}
void
vp10_highbd_inv_txfm_add_32x32
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
,
int
bd
,
TX_TYPE
tx_type
)
{
switch
(
tx_type
)
{
case
DCT_DCT
:
vp10_highbd_idct32x32_add
(
input
,
dest
,
stride
,
eob
,
bd
);
break
;
case
ADST_DCT
:
case
DCT_ADST
:
case
ADST_ADST
:
assert
(
0
);
break
;
default:
assert
(
0
);
break
;
}
}
}
}
#endif // CONFIG_VP9_HIGHBITDEPTH
#endif // CONFIG_VP9_HIGHBITDEPTH
vp10/common/idct.h
View file @
f1d090e2
...
@@ -42,19 +42,17 @@ void vp10_iwht4x4_add(const tran_low_t *input, uint8_t *dest, int stride,
...
@@ -42,19 +42,17 @@ void vp10_iwht4x4_add(const tran_low_t *input, uint8_t *dest, int stride,
int
eob
);
int
eob
);
void
vp10_idct4x4_add
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
void
vp10_idct4x4_add
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
);
int
eob
);
void
vp10_idct8x8_add
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
);
void
vp10_idct16x16_add
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
);
void
vp10_idct32x32_add
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
);
void
vp10_iht4x4_add
(
TX_TYPE
tx_type
,
const
tran_low_t
*
input
,
uint8_t
*
dest
,
void
vp10_inv_txfm_add_4x4
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
);
int
stride
,
int
eob
,
TX_TYPE
tx_type
,
void
vp10_iht8x8_add
(
TX_TYPE
tx_type
,
const
tran_low_t
*
input
,
uint8_t
*
dest
,
void
(
*
itxm_add_4x4
)(
const
tran_low_t
*
input
,
int
stride
,
int
eob
);
uint8_t
*
dest
,
int
stride
,
int
eob
));
void
vp10_iht16x16_add
(
TX_TYPE
tx_type
,
const
tran_low_t
*
input
,
uint8_t
*
dest
,
void
vp10_inv_txfm_add_8x8
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
);
int
stride
,
int
eob
,
TX_TYPE
tx_type
);
void
vp10_inv_txfm_add_16x16
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
,
TX_TYPE
tx_type
);
void
vp10_inv_txfm_add_32x32
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
,
TX_TYPE
tx_type
);
#if CONFIG_VP9_HIGHBITDEPTH
#if CONFIG_VP9_HIGHBITDEPTH
void
vp10_highbd_iwht4x4_add
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
void
vp10_highbd_iwht4x4_add
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
...
@@ -67,12 +65,19 @@ void vp10_highbd_idct16x16_add(const tran_low_t *input, uint8_t *dest,
...
@@ -67,12 +65,19 @@ void vp10_highbd_idct16x16_add(const tran_low_t *input, uint8_t *dest,
int
stride
,
int
eob
,
int
bd
);
int
stride
,
int
eob
,
int
bd
);
void
vp10_highbd_idct32x32_add
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
void
vp10_highbd_idct32x32_add
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
,
int
bd
);
int
stride
,
int
eob
,
int
bd
);
void
vp10_highbd_iht4x4_add
(
TX_TYPE
tx_type
,
const
tran_low_t
*
input
,
void
vp10_highbd_inv_txfm_add_4x4
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
uint8_t
*
dest
,
int
stride
,
int
eob
,
int
bd
);
int
stride
,
int
eob
,
int
bd
,
TX_TYPE
tx_type
,
void
vp10_highbd_iht8x8_add
(
TX_TYPE
tx_type
,
const
tran_low_t
*
input
,
void
(
*
highbd_itxm_add_4x4
)
uint8_t
*
dest
,
int
stride
,
int
eob
,
int
bd
);
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
void
vp10_highbd_iht16x16_add
(
TX_TYPE
tx_type
,
const
tran_low_t
*
input
,
int
stride
,
int
eob
,
int
bd
));
uint8_t
*
dest
,
int
stride
,
int
eob
,
int
bd
);
void
vp10_highbd_inv_txfm_add_8x8
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
,
int
bd
,
TX_TYPE
tx_type
);
void
vp10_highbd_inv_txfm_add_16x16
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
,
int
bd
,
TX_TYPE
tx_type
);
void
vp10_highbd_inv_txfm_add_32x32
(
const
tran_low_t
*
input
,
uint8_t
*
dest
,
int
stride
,
int
eob
,
int
bd
,
TX_TYPE
tx_type
);
#endif // CONFIG_VP9_HIGHBITDEPTH
#endif // CONFIG_VP9_HIGHBITDEPTH
#ifdef __cplusplus
#ifdef __cplusplus
}
// extern "C"
}
// extern "C"
...
...
vp10/decoder/decodeframe.c
View file @
f1d090e2
...
@@ -186,76 +186,59 @@ static void read_mv_probs(nmv_context *ctx, int allow_hp, vpx_reader *r) {
...
@@ -186,76 +186,59 @@ static void read_mv_probs(nmv_context *ctx, int allow_hp, vpx_reader *r) {
static
void
inverse_transform_block_inter
(
MACROBLOCKD
*
xd
,
int
plane
,
static
void
inverse_transform_block_inter
(
MACROBLOCKD
*
xd
,
int
plane
,
const
TX_SIZE
tx_size
,
const
TX_SIZE
tx_size
,
uint8_t
*
dst
,
int
stride
,
uint8_t
*
dst
,
int
stride
,
int
eob
)
{
int
eob
,
int
block
)
{
struct
macroblockd_plane
*
const
pd
=
&
xd
->
plane
[
plane
];
struct
macroblockd_plane
*
const
pd
=
&
xd
->
plane
[
plane
];
TX_TYPE
tx_type
=
get_tx_type
(
pd
->
plane_type
,
xd
,
block
);
if
(
eob
>
0
)
{
if
(
eob
>
0
)
{
tran_low_t
*
const
dqcoeff
=
pd
->
dqcoeff
;
tran_low_t
*
const
dqcoeff
=
pd
->
dqcoeff
;
#if CONFIG_VP9_HIGHBITDEPTH
#if CONFIG_VP9_HIGHBITDEPTH
if
(
xd
->
cur_buf
->
flags
&
YV12_FLAG_HIGHBITDEPTH
)
{
if
(
xd
->
cur_buf
->
flags
&
YV12_FLAG_HIGHBITDEPTH
)
{
if
(
xd
->
lossless
)
{
vp10_highbd_iwht4x4_add
(
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
);
}
else
{
switch
(
tx_size
)
{
case
TX_4X4
:
vp10_highbd_idct4x4_add
(
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
);
break
;
case
TX_8X8
:
vp10_highbd_idct8x8_add
(
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
);
break
;
case
TX_16X16
:
vp10_highbd_idct16x16_add
(
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
);
break
;
case
TX_32X32
:
vp10_highbd_idct32x32_add
(
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
);
break
;
default:
assert
(
0
&&
"Invalid transform size"
);
}
}
}
else
{
if
(
xd
->
lossless
)
{
vp10_iwht4x4_add
(
dqcoeff
,
dst
,
stride
,
eob
);
}
else
{
switch
(
tx_size
)
{
switch
(
tx_size
)
{
case
TX_4X4
:
case
TX_4X4
:
vp10_idct4x4_add
(
dqcoeff
,
dst
,
stride
,
eob
);
vp10_highbd_inv_txfm_add_4x4
(
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
,
tx_type
,
xd
->
lossless
?
vp10_highbd_iwht4x4_add
:
vp10_highbd_idct4x4_add
);
break
;
break
;
case
TX_8X8
:
case
TX_8X8
:
vp10_idct8x8_add
(
dqcoeff
,
dst
,
stride
,
eob
);
vp10_highbd_inv_txfm_add_8x8
(
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
,
tx_type
);
break
;
break
;
case
TX_16X16
:
case
TX_16X16
:
vp10_idct16x16_add
(
dqcoeff
,
dst
,
stride
,
eob
);
vp10_highbd_inv_txfm_add_16x16
(
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
,
tx_type
);
break
;
break
;
case
TX_32X32
:
case
TX_32X32
:
vp10_idct32x32_add
(
dqcoeff
,
dst
,
stride
,
eob
);
vp10_highbd_inv_txfm_add_32x32
(
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
,
tx_type
);
break
;
break
;
default:
default:
assert
(
0
&&
"Invalid transform size"
);
assert
(
0
&&
"Invalid transform size"
);
return
;
return
;
}
}
}
}
#else
if
(
xd
->
lossless
)
{
vp10_iwht4x4_add
(
dqcoeff
,
dst
,
stride
,
eob
);
}
else
{
}
else
{
#else // CONFIG_VP9_HIGHBITDEPTH
switch
(
tx_size
)
{
switch
(
tx_size
)
{
case
TX_4X4
:
case
TX_4X4
:
vp10_idct4x4_add
(
dqcoeff
,
dst
,
stride
,
eob
);
vp10_inv_txfm_add_4x4
(
dqcoeff
,
dst
,
stride
,
eob
,
tx_type
,
xd
->
lossless
?
vp10_iwht4x4_add
:
vp10_idct4x4_add
);
break
;
break
;
case
TX_8X8
:
case
TX_8X8
:
vp10_i
dct8x8_add
(
dqcoeff
,
dst
,
stride
,
eob
);
vp10_i
nv_txfm_add_8x8
(
dqcoeff
,
dst
,
stride
,
eob
,
tx_type
);
break
;
break
;
case
TX_16X16
:
case
TX_16X16
:
vp10_i
dct16x16_add
(
dqcoeff
,
dst
,
stride
,
eob
);
vp10_i
nv_txfm_add_16x16
(
dqcoeff
,
dst
,
stride
,
eob
,
tx_type
);
break
;
break
;
case
TX_32X32
:
case
TX_32X32
:
vp10_i
dct32x32_add
(
dqcoeff
,
dst
,
stride
,
eob
);
vp10_i
nv_txfm_add_32x32
(
dqcoeff
,
dst
,
stride
,
eob
,
tx_type
);
break
;
break
;
default:
default:
assert
(
0
&&
"Invalid transform size"
);
assert
(
0
&&
"Invalid transform size"
);
return
;
return
;
}
}
#endif // CONFIG_VP9_HIGHBITDEPTH
#if CONFIG_VP9_HIGHBITDEPTH
}
}
#endif // CONFIG_VP9_HIGHBITDEPTH
#endif // CONFIG_VP9_HIGHBITDEPTH
...
@@ -282,70 +265,52 @@ static void inverse_transform_block_intra(MACROBLOCKD* xd, int plane,
...
@@ -282,70 +265,52 @@ static void inverse_transform_block_intra(MACROBLOCKD* xd, int plane,
tran_low_t
*
const
dqcoeff
=
pd
->
dqcoeff
;
tran_low_t
*
const
dqcoeff
=
pd
->
dqcoeff
;
#if CONFIG_VP9_HIGHBITDEPTH
#if CONFIG_VP9_HIGHBITDEPTH
if
(
xd
->
cur_buf
->
flags
&
YV12_FLAG_HIGHBITDEPTH
)
{
if
(
xd
->
cur_buf
->
flags
&
YV12_FLAG_HIGHBITDEPTH
)
{
if
(
xd
->
lossless
)
{
vp10_highbd_iwht4x4_add
(
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
);
}
else
{
switch
(
tx_size
)
{
switch
(
tx_size
)
{
case
TX_4X4
:
case
TX_4X4
:
vp10_highbd_iht4x4_add
(
tx_type
,
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
);
vp10_highbd_inv_txfm_add_4x4
(
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
,
tx_type
,
xd
->
lossless
?
vp10_highbd_iwht4x4_add
:
vp10_highbd_idct4x4_add
);
break
;
break
;
case
TX_8X8
:
case
TX_8X8
:
vp10_highbd_iht8x8_add
(
tx_type
,
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
);
vp10_highbd_inv_txfm_add_8x8
(
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
,
tx_type
);
break
;
break
;
case
TX_16X16
:
case
TX_16X16
:
vp10_highbd_iht16x16_add
(
tx_type
,
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
);
vp10_highbd_inv_txfm_add_16x16
(
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
,
tx_type
);
break
;
break
;
case
TX_32X32
:
case
TX_32X32
:
vp10_highbd_idct32x32_add
(
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
);
vp10_highbd_inv_txfm_add_32x32
(
dqcoeff
,
dst
,
stride
,
eob
,
xd
->
bd
,
break
;
tx_type
);
default:
assert
(
0
&&
"Invalid transform size"
);
}
}
}
else
{
if
(
xd
->
lossless
)
{
vp10_iwht4x4_add
(
dqcoeff
,
dst
,
stride
,
eob
);
}
else
{
switch
(
tx_size
)
{
case
TX_4X4
:
vp10_iht4x4_add
(
tx_type
,
dqcoeff
,
dst
,
stride
,
eob
);
break
;
case
TX_8X8
:
vp10_iht8x8_add
(
tx_type
,
dqcoeff
,
dst
,
stride
,
eob
);
break
;
case
TX_16X16
:
vp10_iht16x16_add
(
tx_type
,
dqcoeff
,
dst
,
stride
,
eob
);
break
;
case
TX_32X32
:
vp10_idct32x32_add
(
dqcoeff
,
dst
,
stride
,
eob
);
break
;
break
;
default:
default:
assert
(
0
&&
"Invalid transform size"
);
assert
(
0
&&
"Invalid transform size"
);
return
;
return
;
}
}
}
}
#else
if
(
xd
->
lossless
)
{
vp10_iwht4x4_add
(
dqcoeff
,
dst
,
stride
,
eob
);
}
else
{
}
else
{
#else // CONFIG_VP9_HIGHBITDEPTH
switch
(
tx_size
)
{
switch
(
tx_size
)
{
case
TX_4X4
:
case
TX_4X4
:
vp10_iht4x4_add
(
tx_type
,
dqcoeff
,
dst
,
stride
,
eob
);
vp10_inv_txfm_add_4x4
(
dqcoeff
,
dst
,
stride
,
eob
,
tx_type
,
xd
->
lossless
?
vp10_iwht4x4_add
:
vp10_idct4x4_add
);
break
;
break
;
case
TX_8X8
:
case
TX_8X8
:
vp10_i
ht8x8_add
(
tx_type
,
dqcoeff
,
dst
,
stride
,
eob
);
vp10_i
nv_txfm_add_8x8
(
dqcoeff
,
dst
,
stride
,
eob
,
tx_type
);
break
;
break
;
case
TX_16X16
:
case
TX_16X16
:
vp10_i
ht16x16_add
(
tx_type
,
dqcoeff
,
dst
,
stride
,
eob
);
vp10_i
nv_txfm_add_16x16
(
dqcoeff
,
dst
,
stride
,
eob
,
tx_type
);
break
;
break
;
case
TX_32X32
:
case
TX_32X32
:
vp10_i
dct32x32_add
(
dqcoeff
,
dst
,
stride
,
eob
);
vp10_i
nv_txfm_add_32x32
(
dqcoeff
,
dst
,
stride
,
eob
,
tx_type
);
break
;
break
;
default:
default:
assert
(
0
&&
"Invalid transform size"
);
assert
(
0
&&
"Invalid transform size"
);
return
;
return
;
}
}
#endif // CONFIG_VP9_HIGHBITDEPTH
#if CONFIG_VP9_HIGHBITDEPTH
}
}
#endif // CONFIG_VP9_HIGHBITDEPTH
#endif // CONFIG_VP9_HIGHBITDEPTH
...
@@ -406,7 +371,7 @@ static int reconstruct_inter_block(MACROBLOCKD *const xd, vpx_reader *r,
...
@@ -406,7 +371,7 @@ static int reconstruct_inter_block(MACROBLOCKD *const xd, vpx_reader *r,
inverse_transform_block_inter
(
xd
,
plane
,
tx_size
,
inverse_transform_block_inter
(
xd
,
plane
,
tx_size
,
&
pd
->
dst
.
buf
[
4
*
row
*
pd
->
dst
.
stride
+
4
*
col
],
&
pd
->
dst
.
buf
[
4
*
row
*
pd
->
dst
.
stride
+
4
*
col
],
pd
->
dst
.
stride
,
eob
);
pd
->
dst
.
stride
,
eob
,
block_idx
);
return
eob
;
return
eob
;
}
}
...
...
vp10/encoder/encodemb.c
View file @
f1d090e2
...
@@ -496,6 +496,146 @@ void vp10_xform_quant_dc(MACROBLOCK *x, int plane, int block,
...
@@ -496,6 +496,146 @@ void vp10_xform_quant_dc(MACROBLOCK *x, int plane, int block,
}
}
}
}
void
vp10_fwd_txfm_4x4
(
const
int16_t
*
src_diff
,
tran_low_t
*
coeff
,
int
diff_stride
,
TX_TYPE
tx_type
,
void
(
*
fwd_txm4x4
)(
const
int16_t
*
input
,
tran_low_t
*
output
,
int
stride
))
{
switch
(
tx_type
)
{
case
DCT_DCT
:
fwd_txm4x4
(
src_diff
,
coeff
,
diff_stride
);
break
;
case
ADST_DCT
:
case
DCT_ADST
:
case
ADST_ADST
:
vp10_fht4x4
(
src_diff
,
coeff
,
diff_stride
,
tx_type
);
break
;
default:
assert
(
0
);
break
;
}
}
static
void
fwd_txfm_8x8
(
const
int16_t
*
src_diff
,
tran_low_t
*
coeff
,
int
diff_stride
,
TX_TYPE
tx_type
)
{
switch
(
tx_type
)
{
case
DCT_DCT
:
case
ADST_DCT
:
case
DCT_ADST
:
case
ADST_ADST
:
vp10_fht8x8
(
src_diff
,
coeff
,
diff_stride
,
tx_type
);
break
;
default:
assert
(
0
);
break
;
}
}
static
void
fwd_txfm_16x16
(
const
int16_t
*
src_diff
,
tran_low_t
*
coeff
,
int
diff_stride
,
TX_TYPE
tx_type
)
{
switch
(
tx_type
)
{
case
DCT_DCT
:
case
ADST_DCT
:
case
DCT_ADST
:
case
ADST_ADST
:
vp10_fht16x16
(
src_diff
,
coeff
,
diff_stride
,
tx_type
);
break
;
default:
assert
(
0
);
break
;
}
}
static
void
fwd_txfm_32x32
(
int
rd_transform
,
const
int16_t
*
src_diff
,
tran_low_t
*
coeff
,
int
diff_stride
,
TX_TYPE
tx_type
)
{
switch
(
tx_type
)
{
case
DCT_DCT
:
fdct32x32
(
rd_transform
,
src_diff
,
coeff
,
diff_stride
);
break
;
case
ADST_DCT
:
case
DCT_ADST
:
case
ADST_ADST
:
assert
(
0
);
break
;
default:
assert
(
0
);
break
;
}
}
#if CONFIG_VP9_HIGHBITDEPTH
void
vp10_highbd_fwd_txfm_4x4
(
const
int16_t
*
src_diff
,
tran_low_t
*
coeff
,
int
diff_stride
,
TX_TYPE
tx_type
,
void
(
*
highbd_fwd_txm4x4
)(
const
int16_t
*
input
,
tran_low_t
*
output
,
int
stride
))
{
switch
(
tx_type
)
{
case
DCT_DCT
:
highbd_fwd_txm4x4
(
src_diff
,
coeff
,
diff_stride
);
break
;
case
ADST_DCT
:
case
DCT_ADST
:
case
ADST_ADST
:
vp10_highbd_fht4x4
(
src_diff
,
coeff
,
diff_stride
,
tx_type
);
break
;
default:
assert
(
0
);
break
;
}
}
static
void
highbd_fwd_txfm_8x8
(
const
int16_t
*
src_diff
,
tran_low_t
*
coeff
,
int
diff_stride
,
TX_TYPE
tx_type
)
{
switch
(
tx_type
)
{
case
DCT_DCT
:
vpx_highbd_fdct8x8
(
src_diff
,
coeff
,
diff_stride
);
break
;
case
ADST_DCT
:
case
DCT_ADST
:
case
ADST_ADST
:
vp10_highbd_fht8x8
(
src_diff
,
coeff
,
diff_stride
,
tx_type
);
break
;
default:
assert
(
0
);
break
;
}
}
static
void
highbd_fwd_txfm_16x16
(
const
int16_t
*
src_diff
,
tran_low_t
*
coeff
,
int
diff_stride
,
TX_TYPE
tx_type
)
{