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
1c122c24
Commit
1c122c24
authored
Feb 19, 2016
by
Thomas
Committed by
Yaowu Xu
Feb 25, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add quant and dequant functions for new quant matrices.
Change-Id: If0ba62428216fa343b9a37a3b349edba4103c00a
parent
95a89994
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
1034 additions
and
120 deletions
+1034
-120
vp10/common/vp10_rtcd_defs.pl
vp10/common/vp10_rtcd_defs.pl
+62
-25
vp10/decoder/decodeframe.c
vp10/decoder/decodeframe.c
+33
-3
vp10/decoder/decoder.c
vp10/decoder/decoder.c
+4
-0
vp10/decoder/detokenize.c
vp10/decoder/detokenize.c
+24
-1
vp10/encoder/dct.c
vp10/encoder/dct.c
+24
-6
vp10/encoder/encodemb.c
vp10/encoder/encodemb.c
+297
-51
vp10/encoder/encoder.c
vp10/encoder/encoder.c
+3
-0
vp10/encoder/quantize.c
vp10/encoder/quantize.c
+139
-21
vpx_dsp/quantize.c
vpx_dsp/quantize.c
+366
-0
vpx_dsp/quantize.h
vpx_dsp/quantize.h
+56
-1
vpx_dsp/vpx_dsp_rtcd_defs.pl
vpx_dsp/vpx_dsp_rtcd_defs.pl
+26
-12
No files found.
vp10/common/vp10_rtcd_defs.pl
View file @
1c122c24
...
@@ -309,37 +309,67 @@ if (vpx_config("CONFIG_VP10_ENCODER") eq "yes") {
...
@@ -309,37 +309,67 @@ if (vpx_config("CONFIG_VP10_ENCODER") eq "yes") {
# ENCODEMB INVOKE
# ENCODEMB INVOKE
if
(
vpx_config
("
CONFIG_VPX_HIGHBITDEPTH
")
eq
"
yes
")
{
if
(
vpx_config
("
CONFIG_AOM_QM
")
eq
"
yes
")
{
# the transform coefficients are held in 32-bit
if
(
vpx_config
("
CONFIG_VPX_HIGHBITDEPTH
")
eq
"
yes
")
{
# values, so the assembler code for vp10_block_error can no longer be used.
# the transform coefficients are held in 32-bit
add_proto
qw/int64_t vp10_block_error/
,
"
const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz
";
# values, so the assembler code for vp10_block_error can no longer be used.
specialize
qw/vp10_block_error/
;
add_proto
qw/int64_t vp10_block_error/
,
"
const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz
";
specialize
qw/vp10_block_error/
;
add_proto
qw/void vp10_quantize_fp/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan, const qm_val_t * qm_ptr, const qm_val_t *iqm_ptr
";
add_proto
qw/void vp10_quantize_fp_32x32/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan, const qm_val_t * qm_ptr, const qm_val_t *iqm_ptr
";
add_proto
qw/void vp10_fdct8x8_quant/
,
"
const int16_t *input, int stride, tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan, const qm_val_t * qm_ptr, const qm_val_t *iqm_ptr
";
specialize
qw/vp10_fdct8x8_quant/
;
}
else
{
add_proto
qw/int64_t vp10_block_error/
,
"
const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz
";
specialize
qw/vp10_block_error avx2 msa/
,
"
$sse2_x86inc
";
add_proto
qw/void vp10_quantize_fp/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
add_proto
qw/int64_t vp10_block_error_fp/
,
"
const int16_t *coeff, const int16_t *dqcoeff, int block_size
";
specialize
qw/vp10_quantize_fp/
;
specialize
qw/vp10_block_error_fp neon/
,
"
$sse2_x86inc
"
;
add_proto
qw/void vp10_quantize_fp_32x32/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
add_proto
qw/void vp10_quantize_fp/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan, const qm_val_t * qm_ptr, const qm_val_t *iqm_ptr
";
specialize
qw/vp10_quantize_fp_32x32/
;
add_proto
qw/void vp10_fdct8x8_quant/
,
"
const int16_t *input, int stride, tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
add_proto
qw/void vp10_quantize_fp_32x32/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan, const qm_val_t * qm_ptr, const qm_val_t *iqm_ptr
";
specialize
qw/vp10_fdct8x8_quant/
;
add_proto
qw/void vp10_fdct8x8_quant/
,
"
const int16_t *input, int stride, tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan, const qm_val_t * qm_ptr, const qm_val_t *iqm_ptr
";
}
}
else
{
}
else
{
add_proto
qw/int64_t vp10_block_error/
,
"
const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz
";
if
(
vpx_config
("
CONFIG_VPX_HIGHBITDEPTH
")
eq
"
yes
")
{
specialize
qw/vp10_block_error avx2 msa/
,
"
$sse2_x86inc
";
# the transform coefficients are held in 32-bit
# values, so the assembler code for vp10_block_error can no longer be used.
add_proto
qw/int64_t vp10_block_error/
,
"
const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz
";
specialize
qw/vp10_block_error/
;
add_proto
qw/void vp10_quantize_fp/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
specialize
qw/vp10_quantize_fp/
;
add_proto
qw/void vp10_quantize_fp_32x32/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
specialize
qw/vp10_quantize_fp_32x32/
;
add_proto
qw/int64_t vp10_block_error_fp/
,
"
const int16_t *coeff, const int16_t *dqcoeff, int block_size
";
add_proto
qw/void vp10_fdct8x8_quant/
,
"
const int16_t *input, int stride, tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
specialize
qw/vp10_block_error_fp neon/
,
"
$sse2_x86inc
";
specialize
qw/vp10_fdct8x8_quant/
;
}
else
{
add_proto
qw/int64_t vp10_block_error/
,
"
const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz
";
specialize
qw/vp10_block_error avx2 msa/
,
"
$sse2_x86inc
";
add_proto
qw/int64_t vp10_block_error_fp/
,
"
const int16_t *coeff, const int16_t *dqcoeff, int block_size
";
specialize
qw/vp10_block_error_fp neon/
,
"
$sse2_x86inc
";
add_proto
qw/void vp10_quantize_fp/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
add_proto
qw/void vp10_quantize_fp/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
specialize
qw/vp10_quantize_fp neon sse2/
,
"
$ssse3_x86_64_x86inc
";
specialize
qw/vp10_quantize_fp neon sse2/
,
"
$ssse3_x86_64_x86inc
";
add_proto
qw/void vp10_quantize_fp_32x32/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
add_proto
qw/void vp10_quantize_fp_32x32/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
specialize
qw/vp10_quantize_fp_32x32/
,
"
$ssse3_x86_64_x86inc
";
specialize
qw/vp10_quantize_fp_32x32/
,
"
$ssse3_x86_64_x86inc
";
add_proto
qw/void vp10_fdct8x8_quant/
,
"
const int16_t *input, int stride, tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
specialize
qw/vp10_fdct8x8_quant sse2 ssse3 neon/
;
}
add_proto
qw/void vp10_fdct8x8_quant/
,
"
const int16_t *input, int stride, tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
specialize
qw/vp10_fdct8x8_quant sse2 ssse3 neon/
;
}
}
# fdct functions
# fdct functions
if
(
vpx_config
("
CONFIG_VPX_HIGHBITDEPTH
")
eq
"
yes
")
{
if
(
vpx_config
("
CONFIG_VPX_HIGHBITDEPTH
")
eq
"
yes
")
{
...
@@ -574,11 +604,18 @@ if (vpx_config("CONFIG_VPX_HIGHBITDEPTH") eq "yes") {
...
@@ -574,11 +604,18 @@ if (vpx_config("CONFIG_VPX_HIGHBITDEPTH") eq "yes") {
add_proto
qw/int64_t vp10_highbd_block_error/
,
"
const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz, int bd
";
add_proto
qw/int64_t vp10_highbd_block_error/
,
"
const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz, int bd
";
specialize
qw/vp10_highbd_block_error sse2/
;
specialize
qw/vp10_highbd_block_error sse2/
;
add_proto
qw/void vp10_highbd_quantize_fp/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
if
(
vpx_config
("
CONFIG_AOM_QM
")
eq
"
yes
")
{
specialize
qw/vp10_highbd_quantize_fp/
;
add_proto
qw/void vp10_highbd_quantize_fp/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan, const qm_val_t * qm_ptr, const qm_val_t * iqm_ptr
"
;
add_proto
qw/void vp10_highbd_quantize_fp_32x32/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
add_proto
qw/void vp10_highbd_quantize_fp_32x32/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan, const qm_val_t * qm_ptr, const qm_val_t * iqm_ptr
";
specialize
qw/vp10_highbd_quantize_fp_32x32/
;
}
else
{
add_proto
qw/void vp10_highbd_quantize_fp/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
specialize
qw/vp10_highbd_quantize_fp/
;
add_proto
qw/void vp10_highbd_quantize_fp_32x32/
,
"
const tran_low_t *coeff_ptr, intptr_t n_coeffs, int skip_block, const int16_t *zbin_ptr, const int16_t *round_ptr, const int16_t *quant_ptr, const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const int16_t *scan, const int16_t *iscan
";
specialize
qw/vp10_highbd_quantize_fp_32x32/
;
}
# fdct functions
# fdct functions
add_proto
qw/void vp10_highbd_fht4x4/
,
"
const int16_t *input, tran_low_t *output, int stride, int tx_type
";
add_proto
qw/void vp10_highbd_fht4x4/
,
"
const int16_t *input, tran_low_t *output, int stride, int tx_type
";
...
...
vp10/decoder/decodeframe.c
View file @
1c122c24
...
@@ -712,8 +712,8 @@ static void dec_build_inter_predictors_sb(VP10Decoder *const pbi,
...
@@ -712,8 +712,8 @@ static void dec_build_inter_predictors_sb(VP10Decoder *const pbi,
}
}
}
}
static
INLINE
TX_SIZE
dec_get_uv_tx_size
(
const
MB_MODE_INFO
*
mbmi
,
int
n4_wl
,
static
INLINE
TX_SIZE
int
n4_hl
)
{
dec_get_uv_tx_size
(
const
MB_MODE_INFO
*
mbmi
,
int
n4_wl
,
int
n4_hl
)
{
// get minimum log2 num4x4s dimension
// get minimum log2 num4x4s dimension
const
int
x
=
VPXMIN
(
n4_wl
,
n4_hl
);
const
int
x
=
VPXMIN
(
n4_wl
,
n4_hl
);
return
VPXMIN
(
mbmi
->
tx_size
,
x
);
return
VPXMIN
(
mbmi
->
tx_size
,
x
);
...
@@ -1120,8 +1120,13 @@ static void setup_quantization(VP10_COMMON *const cm,
...
@@ -1120,8 +1120,13 @@ static void setup_quantization(VP10_COMMON *const cm,
static
void
setup_segmentation_dequant
(
VP10_COMMON
*
const
cm
)
{
static
void
setup_segmentation_dequant
(
VP10_COMMON
*
const
cm
)
{
// Build y/uv dequant values based on segmentation.
// Build y/uv dequant values based on segmentation.
int
i
=
0
;
#if CONFIG_AOM_QM
int
lossless
;
int
j
=
0
;
int
qmindex
;
#endif
if
(
cm
->
seg
.
enabled
)
{
if
(
cm
->
seg
.
enabled
)
{
int
i
;
for
(
i
=
0
;
i
<
MAX_SEGMENTS
;
++
i
)
{
for
(
i
=
0
;
i
<
MAX_SEGMENTS
;
++
i
)
{
const
int
qindex
=
vp10_get_qindex
(
&
cm
->
seg
,
i
,
cm
->
base_qindex
);
const
int
qindex
=
vp10_get_qindex
(
&
cm
->
seg
,
i
,
cm
->
base_qindex
);
cm
->
y_dequant
[
i
][
0
]
=
cm
->
y_dequant
[
i
][
0
]
=
...
@@ -1131,6 +1136,19 @@ static void setup_segmentation_dequant(VP10_COMMON *const cm) {
...
@@ -1131,6 +1136,19 @@ static void setup_segmentation_dequant(VP10_COMMON *const cm) {
vp10_dc_quant
(
qindex
,
cm
->
uv_dc_delta_q
,
cm
->
bit_depth
);
vp10_dc_quant
(
qindex
,
cm
->
uv_dc_delta_q
,
cm
->
bit_depth
);
cm
->
uv_dequant
[
i
][
1
]
=
cm
->
uv_dequant
[
i
][
1
]
=
vp10_ac_quant
(
qindex
,
cm
->
uv_ac_delta_q
,
cm
->
bit_depth
);
vp10_ac_quant
(
qindex
,
cm
->
uv_ac_delta_q
,
cm
->
bit_depth
);
#if CONFIG_AOM_QM
lossless
=
qindex
==
0
&&
cm
->
y_dc_delta_q
==
0
&&
cm
->
uv_dc_delta_q
==
0
&&
cm
->
uv_ac_delta_q
==
0
;
// NB: depends on base index so there is only 1 set per frame
// No quant weighting when lossless
qmindex
=
lossless
?
QINDEX_RANGE
-
1
:
cm
->
base_qindex
;
for
(
j
=
0
;
j
<
TX_SIZES
;
++
j
)
{
cm
->
y_iqmatrix
[
i
][
1
][
j
]
=
aom_iqmatrix
(
cm
,
qmindex
,
0
,
j
,
1
);
cm
->
y_iqmatrix
[
i
][
0
][
j
]
=
aom_iqmatrix
(
cm
,
qmindex
,
0
,
j
,
0
);
cm
->
uv_iqmatrix
[
i
][
1
][
j
]
=
aom_iqmatrix
(
cm
,
qmindex
,
1
,
j
,
1
);
cm
->
uv_iqmatrix
[
i
][
0
][
j
]
=
aom_iqmatrix
(
cm
,
qmindex
,
1
,
j
,
0
);
}
#endif
}
}
}
else
{
}
else
{
const
int
qindex
=
cm
->
base_qindex
;
const
int
qindex
=
cm
->
base_qindex
;
...
@@ -1143,6 +1161,18 @@ static void setup_segmentation_dequant(VP10_COMMON *const cm) {
...
@@ -1143,6 +1161,18 @@ static void setup_segmentation_dequant(VP10_COMMON *const cm) {
vp10_dc_quant
(
qindex
,
cm
->
uv_dc_delta_q
,
cm
->
bit_depth
);
vp10_dc_quant
(
qindex
,
cm
->
uv_dc_delta_q
,
cm
->
bit_depth
);
cm
->
uv_dequant
[
0
][
1
]
=
cm
->
uv_dequant
[
0
][
1
]
=
vp10_ac_quant
(
qindex
,
cm
->
uv_ac_delta_q
,
cm
->
bit_depth
);
vp10_ac_quant
(
qindex
,
cm
->
uv_ac_delta_q
,
cm
->
bit_depth
);
#if CONFIG_AOM_QM
lossless
=
qindex
==
0
&&
cm
->
y_dc_delta_q
==
0
&&
cm
->
uv_dc_delta_q
==
0
&&
cm
->
uv_ac_delta_q
==
0
;
// No quant weighting when lossless
qmindex
=
lossless
?
QINDEX_RANGE
-
1
:
cm
->
base_qindex
;
for
(
j
=
0
;
j
<
TX_SIZES
;
++
j
)
{
cm
->
y_iqmatrix
[
i
][
1
][
j
]
=
aom_iqmatrix
(
cm
,
qmindex
,
0
,
j
,
1
);
cm
->
y_iqmatrix
[
i
][
0
][
j
]
=
aom_iqmatrix
(
cm
,
qmindex
,
0
,
j
,
0
);
cm
->
uv_iqmatrix
[
i
][
1
][
j
]
=
aom_iqmatrix
(
cm
,
qmindex
,
1
,
j
,
1
);
cm
->
uv_iqmatrix
[
i
][
0
][
j
]
=
aom_iqmatrix
(
cm
,
qmindex
,
1
,
j
,
0
);
}
#endif
}
}
}
}
...
...
vp10/decoder/decoder.c
View file @
1c122c24
...
@@ -109,6 +109,10 @@ VP10Decoder *vp10_decoder_create(BufferPool *const pool) {
...
@@ -109,6 +109,10 @@ VP10Decoder *vp10_decoder_create(BufferPool *const pool) {
vp10_loop_filter_init
(
cm
);
vp10_loop_filter_init
(
cm
);
#if CONFIG_AOM_QM
aom_qm_init
(
cm
);
#endif
cm
->
error
.
setjmp
=
0
;
cm
->
error
.
setjmp
=
0
;
vpx_get_worker_interface
()
->
init
(
&
pbi
->
lf_worker
);
vpx_get_worker_interface
()
->
init
(
&
pbi
->
lf_worker
);
...
...
vp10/decoder/detokenize.c
View file @
1c122c24
...
@@ -43,14 +43,25 @@ static INLINE int read_coeff(const vpx_prob *probs, int n, vpx_reader *r) {
...
@@ -43,14 +43,25 @@ static INLINE int read_coeff(const vpx_prob *probs, int n, vpx_reader *r) {
return
val
;
return
val
;
}
}
#if CONFIG_AOM_QM
static
int
decode_coefs
(
const
MACROBLOCKD
*
xd
,
PLANE_TYPE
type
,
static
int
decode_coefs
(
const
MACROBLOCKD
*
xd
,
PLANE_TYPE
type
,
tran_low_t
*
dqcoeff
,
TX_SIZE
tx_size
,
const
int16_t
*
dq
,
tran_low_t
*
dqcoeff
,
TX_SIZE
tx_size
,
const
int16_t
*
dq
,
int
ctx
,
const
int16_t
*
scan
,
const
int16_t
*
nb
,
int
ctx
,
const
int16_t
*
scan
,
const
int16_t
*
nb
,
vpx_reader
*
r
)
{
vpx_reader
*
r
,
const
qm_val_t
*
iqm
[
2
][
TX_SIZES
])
#else
static
int
decode_coefs
(
const
MACROBLOCKD
*
xd
,
PLANE_TYPE
type
,
tran_low_t
*
dqcoeff
,
TX_SIZE
tx_size
,
const
int16_t
*
dq
,
int
ctx
,
const
int16_t
*
scan
,
const
int16_t
*
nb
,
vpx_reader
*
r
)
#endif
{
FRAME_COUNTS
*
counts
=
xd
->
counts
;
FRAME_COUNTS
*
counts
=
xd
->
counts
;
const
int
max_eob
=
16
<<
(
tx_size
<<
1
);
const
int
max_eob
=
16
<<
(
tx_size
<<
1
);
const
FRAME_CONTEXT
*
const
fc
=
xd
->
fc
;
const
FRAME_CONTEXT
*
const
fc
=
xd
->
fc
;
const
int
ref
=
is_inter_block
(
&
xd
->
mi
[
0
]
->
mbmi
);
const
int
ref
=
is_inter_block
(
&
xd
->
mi
[
0
]
->
mbmi
);
#if CONFIG_AOM_QM
const
qm_val_t
*
iqmatrix
=
iqm
[
!
ref
][
tx_size
];
#endif
int
band
,
c
=
0
;
int
band
,
c
=
0
;
const
vpx_prob
(
*
coef_probs
)[
COEFF_CONTEXTS
][
UNCONSTRAINED_NODES
]
=
const
vpx_prob
(
*
coef_probs
)[
COEFF_CONTEXTS
][
UNCONSTRAINED_NODES
]
=
fc
->
coef_probs
[
tx_size
][
type
][
ref
];
fc
->
coef_probs
[
tx_size
][
type
][
ref
];
...
@@ -183,6 +194,10 @@ static int decode_coefs(const MACROBLOCKD *xd, PLANE_TYPE type,
...
@@ -183,6 +194,10 @@ static int decode_coefs(const MACROBLOCKD *xd, PLANE_TYPE type,
}
}
}
}
}
}
#if CONFIG_AOM_QM
dqv
=
((
iqmatrix
[
scan
[
c
]]
*
(
int
)
dqv
)
+
(
1
<<
(
AOM_QM_BITS
-
1
)))
>>
AOM_QM_BITS
;
#endif
v
=
(
val
*
dqv
)
>>
dq_shift
;
v
=
(
val
*
dqv
)
>>
dq_shift
;
#if CONFIG_COEFFICIENT_RANGE_CHECKING
#if CONFIG_COEFFICIENT_RANGE_CHECKING
#if CONFIG_VPX_HIGHBITDEPTH
#if CONFIG_VPX_HIGHBITDEPTH
...
@@ -249,8 +264,16 @@ int vp10_decode_block_tokens(MACROBLOCKD *xd, int plane, const scan_order *sc,
...
@@ -249,8 +264,16 @@ int vp10_decode_block_tokens(MACROBLOCKD *xd, int plane, const scan_order *sc,
const
int16_t
*
const
dequant
=
pd
->
seg_dequant
[
seg_id
];
const
int16_t
*
const
dequant
=
pd
->
seg_dequant
[
seg_id
];
const
int
ctx
=
const
int
ctx
=
get_entropy_context
(
tx_size
,
pd
->
above_context
+
x
,
pd
->
left_context
+
y
);
get_entropy_context
(
tx_size
,
pd
->
above_context
+
x
,
pd
->
left_context
+
y
);
#if CONFIG_AOM_QM
const
int
eob
=
decode_coefs
(
xd
,
pd
->
plane_type
,
pd
->
dqcoeff
,
tx_size
,
dequant
,
ctx
,
sc
->
scan
,
sc
->
neighbors
,
r
,
pd
->
seg_iqmatrix
[
seg_id
]);
#else
const
int
eob
=
decode_coefs
(
xd
,
pd
->
plane_type
,
pd
->
dqcoeff
,
tx_size
,
const
int
eob
=
decode_coefs
(
xd
,
pd
->
plane_type
,
pd
->
dqcoeff
,
tx_size
,
dequant
,
ctx
,
sc
->
scan
,
sc
->
neighbors
,
r
);
dequant
,
ctx
,
sc
->
scan
,
sc
->
neighbors
,
r
);
#endif
dec_set_contexts
(
xd
,
pd
,
tx_size
,
eob
>
0
,
x
,
y
);
dec_set_contexts
(
xd
,
pd
,
tx_size
,
eob
>
0
,
x
,
y
);
return
eob
;
return
eob
;
}
}
vp10/encoder/dct.c
View file @
1c122c24
...
@@ -1021,7 +1021,12 @@ void vp10_fdct8x8_quant_c(const int16_t *input, int stride,
...
@@ -1021,7 +1021,12 @@ void vp10_fdct8x8_quant_c(const int16_t *input, int stride,
const
int16_t
*
quant_shift_ptr
,
const
int16_t
*
quant_shift_ptr
,
tran_low_t
*
qcoeff_ptr
,
tran_low_t
*
dqcoeff_ptr
,
tran_low_t
*
qcoeff_ptr
,
tran_low_t
*
dqcoeff_ptr
,
const
int16_t
*
dequant_ptr
,
uint16_t
*
eob_ptr
,
const
int16_t
*
dequant_ptr
,
uint16_t
*
eob_ptr
,
const
int16_t
*
scan
,
const
int16_t
*
iscan
)
{
const
int16_t
*
scan
,
const
int16_t
*
iscan
#if CONFIG_AOM_QM
,
const
qm_val_t
*
qm_ptr
,
const
qm_val_t
*
iqm_ptr
#endif
)
{
int
eob
=
-
1
;
int
eob
=
-
1
;
int
i
,
j
;
int
i
,
j
;
...
@@ -1107,16 +1112,29 @@ void vp10_fdct8x8_quant_c(const int16_t *input, int stride,
...
@@ -1107,16 +1112,29 @@ void vp10_fdct8x8_quant_c(const int16_t *input, int stride,
for
(
i
=
0
;
i
<
n_coeffs
;
i
++
)
{
for
(
i
=
0
;
i
<
n_coeffs
;
i
++
)
{
const
int
rc
=
scan
[
i
];
const
int
rc
=
scan
[
i
];
const
int
coeff
=
coeff_ptr
[
rc
];
const
int
coeff
=
coeff_ptr
[
rc
];
#if CONFIG_AOM_QM
const
qm_val_t
wt
=
qm_ptr
[
rc
];
const
qm_val_t
iwt
=
iqm_ptr
[
rc
];
const
int
dequant
=
(
dequant_ptr
[
rc
!=
0
]
*
iwt
+
(
1
<<
(
AOM_QM_BITS
-
1
)))
>>
AOM_QM_BITS
;
#endif
const
int
coeff_sign
=
(
coeff
>>
31
);
const
int
coeff_sign
=
(
coeff
>>
31
);
const
int
abs_coeff
=
(
coeff
^
coeff_sign
)
-
coeff_sign
;
const
int
abs_coeff
=
(
coeff
^
coeff_sign
)
-
coeff_sign
;
int
tmp
=
clamp
(
abs_coeff
+
round_ptr
[
rc
!=
0
],
INT16_MIN
,
INT16_MAX
);
int64_t
tmp
=
clamp
(
abs_coeff
+
round_ptr
[
rc
!=
0
],
INT16_MIN
,
INT16_MAX
);
tmp
=
(
tmp
*
quant_ptr
[
rc
!=
0
])
>>
16
;
int
tmp32
;
#if CONFIG_AOM_QM
qcoeff_ptr
[
rc
]
=
(
tmp
^
coeff_sign
)
-
coeff_sign
;
tmp32
=
(
tmp
*
quant_ptr
[
rc
!=
0
]
*
wt
)
>>
(
16
+
AOM_QM_BITS
);
qcoeff_ptr
[
rc
]
=
(
tmp32
^
coeff_sign
)
-
coeff_sign
;
dqcoeff_ptr
[
rc
]
=
qcoeff_ptr
[
rc
]
*
dequant
;
#else
tmp32
=
(
tmp
*
quant_ptr
[
rc
!=
0
])
>>
16
;
qcoeff_ptr
[
rc
]
=
(
tmp32
^
coeff_sign
)
-
coeff_sign
;
dqcoeff_ptr
[
rc
]
=
qcoeff_ptr
[
rc
]
*
dequant_ptr
[
rc
!=
0
];
dqcoeff_ptr
[
rc
]
=
qcoeff_ptr
[
rc
]
*
dequant_ptr
[
rc
!=
0
];
#endif
if
(
tmp
)
eob
=
i
;
if
(
tmp
32
)
eob
=
i
;
}
}
}
}
*
eob_ptr
=
eob
+
1
;
*
eob_ptr
=
eob
+
1
;
...
...
vp10/encoder/encodemb.c
View file @
1c122c24
This diff is collapsed.
Click to expand it.
vp10/encoder/encoder.c
View file @
1c122c24
...
@@ -1613,6 +1613,9 @@ VP10_COMP *vp10_create_compressor(VP10EncoderConfig *oxcf,
...
@@ -1613,6 +1613,9 @@ VP10_COMP *vp10_create_compressor(VP10EncoderConfig *oxcf,
* vp10_init_quantizer() for every frame.
* vp10_init_quantizer() for every frame.
*/
*/
vp10_init_quantizer
(
cpi
);
vp10_init_quantizer
(
cpi
);
#if CONFIG_AOM_QM
aom_qm_init
(
cm
);
#endif
vp10_loop_filter_init
(
cm
);
vp10_loop_filter_init
(
cm
);
...
...
vp10/encoder/quantize.c
View file @
1c122c24
...
@@ -8,7 +8,6 @@
...
@@ -8,7 +8,6 @@
* be found in the AUTHORS file in the root of the source tree.
* be found in the AUTHORS file in the root of the source tree.
*/
*/
#include <math.h>
#include "./vpx_dsp_rtcd.h"
#include "./vpx_dsp_rtcd.h"
#include "vpx_mem/vpx_mem.h"
#include "vpx_mem/vpx_mem.h"
#include "vpx_ports/mem.h"
#include "vpx_ports/mem.h"
...
@@ -26,7 +25,12 @@ void vp10_quantize_fp_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
...
@@ -26,7 +25,12 @@ void vp10_quantize_fp_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
const
int16_t
*
quant_shift_ptr
,
tran_low_t
*
qcoeff_ptr
,
const
int16_t
*
quant_shift_ptr
,
tran_low_t
*
qcoeff_ptr
,
tran_low_t
*
dqcoeff_ptr
,
const
int16_t
*
dequant_ptr
,
tran_low_t
*
dqcoeff_ptr
,
const
int16_t
*
dequant_ptr
,
uint16_t
*
eob_ptr
,
const
int16_t
*
scan
,
uint16_t
*
eob_ptr
,
const
int16_t
*
scan
,
const
int16_t
*
iscan
)
{
const
int16_t
*
iscan
#if CONFIG_AOM_QM
,
const
qm_val_t
*
qm_ptr
,
const
qm_val_t
*
iqm_ptr
#endif
)
{
int
i
,
eob
=
-
1
;
int
i
,
eob
=
-
1
;
// TODO(jingning) Decide the need of these arguments after the
// TODO(jingning) Decide the need of these arguments after the
// quantization process is completed.
// quantization process is completed.
...
@@ -43,16 +47,29 @@ void vp10_quantize_fp_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
...
@@ -43,16 +47,29 @@ void vp10_quantize_fp_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
for
(
i
=
0
;
i
<
n_coeffs
;
i
++
)
{
for
(
i
=
0
;
i
<
n_coeffs
;
i
++
)
{
const
int
rc
=
scan
[
i
];
const
int
rc
=
scan
[
i
];
const
int
coeff
=
coeff_ptr
[
rc
];
const
int
coeff
=
coeff_ptr
[
rc
];
#if CONFIG_AOM_QM
const
qm_val_t
wt
=
qm_ptr
[
rc
];
const
qm_val_t
iwt
=
iqm_ptr
[
rc
];
const
int
dequant
=
(
dequant_ptr
[
rc
!=
0
]
*
iwt
+
(
1
<<
(
AOM_QM_BITS
-
1
)))
>>
AOM_QM_BITS
;
#endif
const
int
coeff_sign
=
(
coeff
>>
31
);
const
int
coeff_sign
=
(
coeff
>>
31
);
const
int
abs_coeff
=
(
coeff
^
coeff_sign
)
-
coeff_sign
;
const
int
abs_coeff
=
(
coeff
^
coeff_sign
)
-
coeff_sign
;
int
tmp
=
clamp
(
abs_coeff
+
round_ptr
[
rc
!=
0
],
INT16_MIN
,
INT16_MAX
);
int64_t
tmp
=
clamp
(
abs_coeff
+
round_ptr
[
rc
!=
0
],
INT16_MIN
,
INT16_MAX
);
tmp
=
(
tmp
*
quant_ptr
[
rc
!=
0
])
>>
16
;
int
tmp32
;
#if CONFIG_AOM_QM
qcoeff_ptr
[
rc
]
=
(
tmp
^
coeff_sign
)
-
coeff_sign
;
tmp32
=
(
tmp
*
wt
*
quant_ptr
[
rc
!=
0
])
>>
(
16
+
AOM_QM_BITS
);
qcoeff_ptr
[
rc
]
=
(
tmp32
^
coeff_sign
)
-
coeff_sign
;
dqcoeff_ptr
[
rc
]
=
qcoeff_ptr
[
rc
]
*
dequant
;
#else
tmp32
=
(
tmp
*
quant_ptr
[
rc
!=
0
])
>>
16
;
qcoeff_ptr
[
rc
]
=
(
tmp32
^
coeff_sign
)
-
coeff_sign
;
dqcoeff_ptr
[
rc
]
=
qcoeff_ptr
[
rc
]
*
dequant_ptr
[
rc
!=
0
];
dqcoeff_ptr
[
rc
]
=
qcoeff_ptr
[
rc
]
*
dequant_ptr
[
rc
!=
0
];
#endif
if
(
tmp
)
eob
=
i
;
if
(
tmp
32
)
eob
=
i
;
}
}
}
}
*
eob_ptr
=
eob
+
1
;
*
eob_ptr
=
eob
+
1
;
...
@@ -66,7 +83,12 @@ void vp10_highbd_quantize_fp_c(const tran_low_t *coeff_ptr, intptr_t count,
...
@@ -66,7 +83,12 @@ void vp10_highbd_quantize_fp_c(const tran_low_t *coeff_ptr, intptr_t count,
const
int16_t
*
quant_shift_ptr
,
const
int16_t
*
quant_shift_ptr
,
tran_low_t
*
qcoeff_ptr
,
tran_low_t
*
dqcoeff_ptr
,
tran_low_t
*
qcoeff_ptr
,
tran_low_t
*
dqcoeff_ptr
,
const
int16_t
*
dequant_ptr
,
uint16_t
*
eob_ptr
,
const
int16_t
*
dequant_ptr
,
uint16_t
*
eob_ptr
,
const
int16_t
*
scan
,
const
int16_t
*
iscan
)
{
const
int16_t
*
scan
,
const
int16_t
*
iscan
#if CONFIG_AOM_QM
,
const
qm_val_t
*
qm_ptr
,
const
qm_val_t
*
iqm_ptr
#endif
)
{
int
i
;
int
i
;
int
eob
=
-
1
;
int
eob
=
-
1
;
// TODO(jingning) Decide the need of these arguments after the
// TODO(jingning) Decide the need of these arguments after the
...
@@ -84,12 +106,26 @@ void vp10_highbd_quantize_fp_c(const tran_low_t *coeff_ptr, intptr_t count,
...
@@ -84,12 +106,26 @@ void vp10_highbd_quantize_fp_c(const tran_low_t *coeff_ptr, intptr_t count,
for
(
i
=
0
;
i
<
count
;
i
++
)
{
for
(
i
=
0
;
i
<
count
;
i
++
)
{
const
int
rc
=
scan
[
i
];
const
int
rc
=
scan
[
i
];
const
int
coeff
=
coeff_ptr
[
rc
];
const
int
coeff
=
coeff_ptr
[
rc
];
#if CONFIG_AOM_QM
const
qm_val_t
wt
=
qm_ptr
[
rc
];
const
qm_val_t
iwt
=
iqm_ptr
[
rc
];
const
int
dequant
=
(
dequant_ptr
[
rc
!=
0
]
*
iwt
+
(
1
<<
(
AOM_QM_BITS
-
1
)))
>>
AOM_QM_BITS
;
#endif
const
int
coeff_sign
=
(
coeff
>>
31
);
const
int
coeff_sign
=
(
coeff
>>
31
);
const
int
abs_coeff
=
(
coeff
^
coeff_sign
)
-
coeff_sign
;
const
int
abs_coeff
=
(
coeff
^
coeff_sign
)
-
coeff_sign
;
const
int64_t
tmp
=
abs_coeff
+
round_ptr
[
rc
!=
0
];
const
int64_t
tmp
=
abs_coeff
+
round_ptr
[
rc
!=
0
];
#if CONFIG_AOM_QM
const
uint32_t
abs_qcoeff
=
(
uint32_t
)((
tmp
*
quant_ptr
[
rc
!=
0
]
*
wt
)
>>
(
16
+
AOM_QM_BITS
));
qcoeff_ptr
[
rc
]
=
(
tran_low_t
)((
abs_qcoeff
^
coeff_sign
)
-
coeff_sign
);
dqcoeff_ptr
[
rc
]
=
qcoeff_ptr
[
rc
]
*
dequant
;
#else
const
uint32_t
abs_qcoeff
=
(
uint32_t
)((
tmp
*
quant_ptr
[
rc
!=
0
])
>>
16
);
const
uint32_t
abs_qcoeff
=
(
uint32_t
)((
tmp
*
quant_ptr
[
rc
!=
0
])
>>
16
);
qcoeff_ptr
[
rc
]
=
(
tran_low_t
)((
abs_qcoeff
^
coeff_sign
)
-
coeff_sign
);
qcoeff_ptr
[
rc
]
=
(
tran_low_t
)((
abs_qcoeff
^
coeff_sign
)
-
coeff_sign
);
dqcoeff_ptr
[
rc
]
=
qcoeff_ptr
[
rc
]
*
dequant_ptr
[
rc
!=
0
];
dqcoeff_ptr
[
rc
]
=
qcoeff_ptr
[
rc
]
*
dequant_ptr
[
rc
!=
0
];
#endif
if
(
abs_qcoeff
)
eob
=
i
;
if
(
abs_qcoeff
)
eob
=
i
;
}
}
}
}
...
@@ -106,7 +142,12 @@ void vp10_quantize_fp_32x32_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
...
@@ -106,7 +142,12 @@ void vp10_quantize_fp_32x32_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
const
int16_t
*
quant_shift_ptr
,
const
int16_t
*
quant_shift_ptr
,
tran_low_t
*
qcoeff_ptr
,
tran_low_t
*
dqcoeff_ptr
,
tran_low_t
*
qcoeff_ptr
,
tran_low_t
*
dqcoeff_ptr
,
const
int16_t
*
dequant_ptr
,
uint16_t
*
eob_ptr
,
const
int16_t
*
dequant_ptr
,
uint16_t
*
eob_ptr
,
const
int16_t
*
scan
,
const
int16_t
*
iscan
)
{
const
int16_t
*
scan
,
const
int16_t
*
iscan
#if CONFIG_AOM_QM
,
const
qm_val_t
*
qm_ptr
,
const
qm_val_t
*
iqm_ptr
#endif
)
{
int
i
,
eob
=
-
1
;
int
i
,
eob
=
-
1
;
(
void
)
zbin_ptr
;
(
void
)
zbin_ptr
;
(
void
)
quant_shift_ptr
;
(
void
)
quant_shift_ptr
;
...
@@ -119,19 +160,38 @@ void vp10_quantize_fp_32x32_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
...
@@ -119,19 +160,38 @@ void vp10_quantize_fp_32x32_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
for
(
i
=
0
;
i
<
n_coeffs
;
i
++
)
{
for
(
i
=
0
;
i
<
n_coeffs
;
i
++
)
{
const
int
rc
=
scan
[
i
];
const
int
rc
=
scan
[
i
];
const
int
coeff
=
coeff_ptr
[
rc
];
const
int
coeff
=
coeff_ptr
[
rc
];
#if CONFIG_AOM_QM
const
qm_val_t
wt
=
qm_ptr
[
rc
];
const
qm_val_t
iwt
=
iqm_ptr
[
rc
];
const
int
dequant
=
(
dequant_ptr
[
rc
!=
0
]
*
iwt
+
(
1
<<
(
AOM_QM_BITS
-
1
)))
>>
AOM_QM_BITS
;
int64_t
tmp
=
0
;
#endif
const
int
coeff_sign
=
(
coeff
>>
31
);
const
int
coeff_sign
=
(
coeff
>>
31
);
int
tmp
=
0
;
int
tmp
32
=
0
;
int
abs_coeff
=
(
coeff
^
coeff_sign
)
-
coeff_sign
;
int
abs_coeff
=
(
coeff
^
coeff_sign
)
-
coeff_sign
;
#if CONFIG_AOM_QM
if
(
abs_coeff
*
wt
>=
(
dequant_ptr
[
rc
!=
0
]
<<
(
AOM_QM_BITS
-
2
)))
{
#else
if
(
abs_coeff
>=
(
dequant_ptr
[
rc
!=
0
]
>>
2
))
{
if
(
abs_coeff
>=
(
dequant_ptr
[
rc
!=
0
]
>>
2
))
{
#endif
abs_coeff
+=
ROUND_POWER_OF_TWO
(
round_ptr
[
rc
!=
0
],
1
);
abs_coeff
+=
ROUND_POWER_OF_TWO
(
round_ptr
[
rc
!=
0
],
1
);
abs_coeff
=
clamp
(
abs_coeff
,
INT16_MIN
,
INT16_MAX
);
abs_coeff
=
clamp
(
abs_coeff
,
INT16_MIN
,
INT16_MAX
);
tmp
=
(
abs_coeff
*
quant_ptr
[
rc
!=
0
])
>>
15
;
#if CONFIG_AOM_QM
qcoeff_ptr
[
rc
]
=
(
tmp
^
coeff_sign
)
-
coeff_sign
;
tmp
=
abs_coeff
*
wt
;
dqcoeff_ptr
[
rc
]
=
qcoeff_ptr
[
rc
]
*
dequant_ptr
[
rc
!=
0
]
/
2
;
tmp32
=
(
int
)(
tmp
*
quant_ptr
[
rc
!=
0
])
>>
(
AOM_QM_BITS
+
15
);
qcoeff_ptr
[
rc
]
=
(
tmp32
^
coeff_sign
)
-
coeff_sign
;
dqcoeff_ptr
[
rc
]
=
(
qcoeff_ptr
[
rc
]
*
dequant
)
/
2
;
#else
tmp32
=
(
abs_coeff
*
quant_ptr
[
rc
!=
0
])
>>
15
;
qcoeff_ptr
[
rc
]
=
(
tmp32
^
coeff_sign
)
-
coeff_sign
;
dqcoeff_ptr
[
rc
]
=
(
qcoeff_ptr
[
rc
]
*
dequant_ptr
[
rc
!=
0
])
/
2
;
#endif
}
}
if
(
tmp
)
eob
=
i
;
if
(
tmp
32
)
eob
=
i
;
}
}
}
}
*
eob_ptr
=
eob
+
1
;
*
eob_ptr
=
eob
+
1
;
...
@@ -143,7 +203,12 @@ void vp10_highbd_quantize_fp_32x32_c(
...
@@ -143,7 +203,12 @@ void vp10_highbd_quantize_fp_32x32_c(
const
int16_t
*
zbin_ptr
,
const
int16_t
*
round_ptr
,
const
int16_t
*
quant_ptr
,
const
int16_t
*
zbin_ptr
,
const
int16_t
*
round_ptr
,
const
int16_t
*
quant_ptr
,
const
int16_t
*
quant_shift_ptr
,
tran_low_t
*
qcoeff_ptr
,
const
int16_t
*
quant_shift_ptr
,
tran_low_t
*
qcoeff_ptr
,
tran_low_t
*
dqcoeff_ptr
,
const
int16_t
*
dequant_ptr
,
uint16_t
*
eob_ptr
,
tran_low_t
*
dqcoeff_ptr
,
const
int16_t
*
dequant_ptr
,
uint16_t
*
eob_ptr
,
const
int16_t
*
scan
,
const
int16_t
*
iscan
)
{
const
int16_t
*
scan
,
const
int16_t
*
iscan
#if CONFIG_AOM_QM
,
const
qm_val_t
*
qm_ptr
,
const
qm_val_t
*
iqm_ptr
#endif
)
{
int
i
,
eob
=
-
1
;
int
i
,
eob
=
-
1
;
(
void
)
zbin_ptr
;
(
void
)
zbin_ptr
;
(
void
)
quant_shift_ptr
;
(
void
)
quant_shift_ptr
;
...
@@ -157,15 +222,32 @@ void vp10_highbd_quantize_fp_32x32_c(
...
@@ -157,15 +222,32 @@ void vp10_highbd_quantize_fp_32x32_c(
uint32_t
abs_qcoeff
=
0
;
uint32_t
abs_qcoeff
=
0
;
const
int
rc
=
scan
[
i
];
const
int
rc
=
scan
[
i
];
const
int
coeff
=
coeff_ptr
[
rc
];
const
int
coeff
=
coeff_ptr
[
rc
];
#if CONFIG_AOM_QM
const
qm_val_t
wt
=
qm_ptr
[
rc
];
const
qm_val_t
iwt
=
iqm_ptr
[
rc
];
const
int
dequant
=
(
dequant_ptr
[
rc
!=
0
]
*
iwt
+
(
1
<<
(
AOM_QM_BITS
-
1
)))
>>
AOM_QM_BITS
;