Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Xiph.Org
aom-rav1e
Commits
87d1a488
Commit
87d1a488
authored
Mar 03, 2015
by
Deb Mukherjee
Committed by
Gerrit Code Review
Mar 03, 2015
Browse files
Merge "dc quantizer fix for 32x32 transforms"
parents
540318d3
6910e92d
Changes
4
Hide whitespace changes
Inline
Side-by-side
vp9/encoder/vp9_encodeframe.c
View file @
87d1a488
...
...
@@ -3907,7 +3907,7 @@ static void encode_frame_internal(VP9_COMP *cpi) {
// Special case: set prev_mi to NULL when the previous mode info
// context cannot be used.
cm
->
prev_mi
=
cm
->
use_prev_frame_mvs
?
cm
->
prev_mip
+
cm
->
mi_stride
+
1
:
NULL
;
cm
->
prev_mip
+
cm
->
mi_stride
+
1
:
NULL
;
x
->
quant_fp
=
cpi
->
sf
.
use_quant_fp
;
vp9_zero
(
x
->
skip_txfm
);
...
...
vp9/encoder/vp9_encodemb.c
View file @
87d1a488
...
...
@@ -476,19 +476,19 @@ void vp9_xform_quant_dc(MACROBLOCK *x, int plane, int block,
break
;
case
TX_16X16
:
vp9_highbd_fdct16x16_1
(
src_diff
,
coeff
,
diff_stride
);
vp9_highbd_quantize_dc
(
coeff
,
x
->
skip_block
,
p
->
round
,
vp9_highbd_quantize_dc
(
coeff
,
256
,
x
->
skip_block
,
p
->
round
,
p
->
quant_fp
[
0
],
qcoeff
,
dqcoeff
,
pd
->
dequant
[
0
],
eob
);
break
;
case
TX_8X8
:
vp9_highbd_fdct8x8_1
(
src_diff
,
coeff
,
diff_stride
);
vp9_highbd_quantize_dc
(
coeff
,
x
->
skip_block
,
p
->
round
,
vp9_highbd_quantize_dc
(
coeff
,
64
,
x
->
skip_block
,
p
->
round
,
p
->
quant_fp
[
0
],
qcoeff
,
dqcoeff
,
pd
->
dequant
[
0
],
eob
);
break
;
case
TX_4X4
:
x
->
fwd_txm4x4
(
src_diff
,
coeff
,
diff_stride
);
vp9_highbd_quantize_dc
(
coeff
,
x
->
skip_block
,
p
->
round
,
vp9_highbd_quantize_dc
(
coeff
,
16
,
x
->
skip_block
,
p
->
round
,
p
->
quant_fp
[
0
],
qcoeff
,
dqcoeff
,
pd
->
dequant
[
0
],
eob
);
break
;
...
...
@@ -508,19 +508,19 @@ void vp9_xform_quant_dc(MACROBLOCK *x, int plane, int block,
break
;
case
TX_16X16
:
vp9_fdct16x16_1
(
src_diff
,
coeff
,
diff_stride
);
vp9_quantize_dc
(
coeff
,
x
->
skip_block
,
p
->
round
,
vp9_quantize_dc
(
coeff
,
256
,
x
->
skip_block
,
p
->
round
,
p
->
quant_fp
[
0
],
qcoeff
,
dqcoeff
,
pd
->
dequant
[
0
],
eob
);
break
;
case
TX_8X8
:
vp9_fdct8x8_1
(
src_diff
,
coeff
,
diff_stride
);
vp9_quantize_dc
(
coeff
,
x
->
skip_block
,
p
->
round
,
vp9_quantize_dc
(
coeff
,
64
,
x
->
skip_block
,
p
->
round
,
p
->
quant_fp
[
0
],
qcoeff
,
dqcoeff
,
pd
->
dequant
[
0
],
eob
);
break
;
case
TX_4X4
:
x
->
fwd_txm4x4
(
src_diff
,
coeff
,
diff_stride
);
vp9_quantize_dc
(
coeff
,
x
->
skip_block
,
p
->
round
,
vp9_quantize_dc
(
coeff
,
16
,
x
->
skip_block
,
p
->
round
,
p
->
quant_fp
[
0
],
qcoeff
,
dqcoeff
,
pd
->
dequant
[
0
],
eob
);
break
;
...
...
vp9/encoder/vp9_quantize.c
View file @
87d1a488
...
...
@@ -19,7 +19,8 @@
#include "vp9/encoder/vp9_quantize.h"
#include "vp9/encoder/vp9_rd.h"
void
vp9_quantize_dc
(
const
tran_low_t
*
coeff_ptr
,
int
skip_block
,
void
vp9_quantize_dc
(
const
tran_low_t
*
coeff_ptr
,
int
n_coeffs
,
int
skip_block
,
const
int16_t
*
round_ptr
,
const
int16_t
quant
,
tran_low_t
*
qcoeff_ptr
,
tran_low_t
*
dqcoeff_ptr
,
const
int16_t
dequant_ptr
,
uint16_t
*
eob_ptr
)
{
...
...
@@ -29,6 +30,9 @@ void vp9_quantize_dc(const tran_low_t *coeff_ptr, int skip_block,
const
int
abs_coeff
=
(
coeff
^
coeff_sign
)
-
coeff_sign
;
int
tmp
,
eob
=
-
1
;
vpx_memset
(
qcoeff_ptr
,
0
,
n_coeffs
*
sizeof
(
*
qcoeff_ptr
));
vpx_memset
(
dqcoeff_ptr
,
0
,
n_coeffs
*
sizeof
(
*
dqcoeff_ptr
));
if
(
!
skip_block
)
{
tmp
=
clamp
(
abs_coeff
+
round_ptr
[
rc
!=
0
],
INT16_MIN
,
INT16_MAX
);
tmp
=
(
tmp
*
quant
)
>>
16
;
...
...
@@ -41,12 +45,16 @@ void vp9_quantize_dc(const tran_low_t *coeff_ptr, int skip_block,
}
#if CONFIG_VP9_HIGHBITDEPTH
void
vp9_highbd_quantize_dc
(
const
tran_low_t
*
coeff_ptr
,
int
skip_block
,
void
vp9_highbd_quantize_dc
(
const
tran_low_t
*
coeff_ptr
,
int
n_coeffs
,
int
skip_block
,
const
int16_t
*
round_ptr
,
const
int16_t
quant
,
tran_low_t
*
qcoeff_ptr
,
tran_low_t
*
dqcoeff_ptr
,
const
int16_t
dequant_ptr
,
uint16_t
*
eob_ptr
)
{
int
eob
=
-
1
;
vpx_memset
(
qcoeff_ptr
,
0
,
n_coeffs
*
sizeof
(
*
qcoeff_ptr
));
vpx_memset
(
dqcoeff_ptr
,
0
,
n_coeffs
*
sizeof
(
*
dqcoeff_ptr
));
if
(
!
skip_block
)
{
const
int
rc
=
0
;
const
int
coeff
=
coeff_ptr
[
rc
];
...
...
@@ -69,15 +77,20 @@ void vp9_quantize_dc_32x32(const tran_low_t *coeff_ptr, int skip_block,
const
int16_t
*
round_ptr
,
const
int16_t
quant
,
tran_low_t
*
qcoeff_ptr
,
tran_low_t
*
dqcoeff_ptr
,
const
int16_t
dequant_ptr
,
uint16_t
*
eob_ptr
)
{
const
int
n_coeffs
=
1024
;
const
int
rc
=
0
;
const
int
coeff
=
coeff_ptr
[
rc
];
const
int
coeff_sign
=
(
coeff
>>
31
);
const
int
abs_coeff
=
(
coeff
^
coeff_sign
)
-
coeff_sign
;
int
tmp
,
eob
=
-
1
;
vpx_memset
(
qcoeff_ptr
,
0
,
n_coeffs
*
sizeof
(
*
qcoeff_ptr
));
vpx_memset
(
dqcoeff_ptr
,
0
,
n_coeffs
*
sizeof
(
*
dqcoeff_ptr
));
if
(
!
skip_block
)
{
tmp
=
clamp
(
abs_coeff
+
round_ptr
[
rc
!=
0
],
INT16_MIN
,
INT16_MAX
);
tmp
=
clamp
(
abs_coeff
+
ROUND_POWER_OF_TWO
(
round_ptr
[
rc
!=
0
],
1
),
INT16_MIN
,
INT16_MAX
);
tmp
=
(
tmp
*
quant
)
>>
15
;
qcoeff_ptr
[
rc
]
=
(
tmp
^
coeff_sign
)
-
coeff_sign
;
dqcoeff_ptr
[
rc
]
=
qcoeff_ptr
[
rc
]
*
dequant_ptr
/
2
;
...
...
@@ -96,8 +109,12 @@ void vp9_highbd_quantize_dc_32x32(const tran_low_t *coeff_ptr,
tran_low_t
*
dqcoeff_ptr
,
const
int16_t
dequant_ptr
,
uint16_t
*
eob_ptr
)
{
const
int
n_coeffs
=
1024
;
int
eob
=
-
1
;
vpx_memset
(
qcoeff_ptr
,
0
,
n_coeffs
*
sizeof
(
*
qcoeff_ptr
));
vpx_memset
(
dqcoeff_ptr
,
0
,
n_coeffs
*
sizeof
(
*
dqcoeff_ptr
));
if
(
!
skip_block
)
{
const
int
rc
=
0
;
const
int
coeff
=
coeff_ptr
[
rc
];
...
...
@@ -105,8 +122,8 @@ void vp9_highbd_quantize_dc_32x32(const tran_low_t *coeff_ptr,
const
int
abs_coeff
=
(
coeff
^
coeff_sign
)
-
coeff_sign
;
const
int64_t
tmp
=
(
clamp
(
abs_coeff
+
round_ptr
[
rc
!=
0
],
INT32_MIN
,
INT32_MAX
)
*
quant
)
>>
15
;
(
clamp
(
abs_coeff
+
ROUND_POWER_OF_TWO
(
round_ptr
[
rc
!=
0
],
1
),
INT32_MIN
,
INT32_MAX
)
*
quant
)
>>
15
;
qcoeff_ptr
[
rc
]
=
(
tran_low_t
)((
tmp
^
coeff_sign
)
-
coeff_sign
);
dqcoeff_ptr
[
rc
]
=
qcoeff_ptr
[
rc
]
*
dequant_ptr
/
2
;
if
(
tmp
)
...
...
@@ -521,21 +538,21 @@ void vp9_regular_quantize_b_4x4(MACROBLOCK *x, int plane, int block,
#if CONFIG_VP9_HIGHBITDEPTH
if
(
xd
->
cur_buf
->
flags
&
YV12_FLAG_HIGHBITDEPTH
)
{
vp9_highbd_quantize_b
(
BLOCK_OFFSET
(
p
->
coeff
,
block
),
16
,
x
->
skip_block
,
p
->
zbin
,
p
->
round
,
p
->
quant
,
p
->
quant_shift
,
BLOCK_OFFSET
(
p
->
qcoeff
,
block
),
BLOCK_OFFSET
(
pd
->
dqcoeff
,
block
),
pd
->
dequant
,
&
p
->
eobs
[
block
],
scan
,
iscan
);
16
,
x
->
skip_block
,
p
->
zbin
,
p
->
round
,
p
->
quant
,
p
->
quant_shift
,
BLOCK_OFFSET
(
p
->
qcoeff
,
block
),
BLOCK_OFFSET
(
pd
->
dqcoeff
,
block
),
pd
->
dequant
,
&
p
->
eobs
[
block
],
scan
,
iscan
);
return
;
}
#endif
vp9_quantize_b
(
BLOCK_OFFSET
(
p
->
coeff
,
block
),
16
,
x
->
skip_block
,
p
->
zbin
,
p
->
round
,
p
->
quant
,
p
->
quant_shift
,
BLOCK_OFFSET
(
p
->
qcoeff
,
block
),
BLOCK_OFFSET
(
pd
->
dqcoeff
,
block
),
pd
->
dequant
,
&
p
->
eobs
[
block
],
scan
,
iscan
);
16
,
x
->
skip_block
,
p
->
zbin
,
p
->
round
,
p
->
quant
,
p
->
quant_shift
,
BLOCK_OFFSET
(
p
->
qcoeff
,
block
),
BLOCK_OFFSET
(
pd
->
dqcoeff
,
block
),
pd
->
dequant
,
&
p
->
eobs
[
block
],
scan
,
iscan
);
}
static
void
invert_quant
(
int16_t
*
quant
,
int16_t
*
shift
,
int
d
)
{
...
...
vp9/encoder/vp9_quantize.h
View file @
87d1a488
...
...
@@ -37,7 +37,8 @@ typedef struct {
DECLARE_ALIGNED
(
16
,
int16_t
,
uv_round
[
QINDEX_RANGE
][
8
]);
}
QUANTS
;
void
vp9_quantize_dc
(
const
tran_low_t
*
coeff_ptr
,
int
skip_block
,
void
vp9_quantize_dc
(
const
tran_low_t
*
coeff_ptr
,
int
n_coeffs
,
int
skip_block
,
const
int16_t
*
round_ptr
,
const
int16_t
quant_ptr
,
tran_low_t
*
qcoeff_ptr
,
tran_low_t
*
dqcoeff_ptr
,
const
int16_t
dequant_ptr
,
uint16_t
*
eob_ptr
);
...
...
@@ -49,7 +50,8 @@ void vp9_regular_quantize_b_4x4(MACROBLOCK *x, int plane, int block,
const
int16_t
*
scan
,
const
int16_t
*
iscan
);
#if CONFIG_VP9_HIGHBITDEPTH
void
vp9_highbd_quantize_dc
(
const
tran_low_t
*
coeff_ptr
,
int
skip_block
,
void
vp9_highbd_quantize_dc
(
const
tran_low_t
*
coeff_ptr
,
int
n_coeffs
,
int
skip_block
,
const
int16_t
*
round_ptr
,
const
int16_t
quant_ptr
,
tran_low_t
*
qcoeff_ptr
,
tran_low_t
*
dqcoeff_ptr
,
const
int16_t
dequant_ptr
,
uint16_t
*
eob_ptr
);
...
...
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