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
17084657
Commit
17084657
authored
Nov 14, 2013
by
Guillaume Martres
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vpxenc: add --aq-mode flag to control adaptive quantization
Change-Id: I57e1ad4bed3487df12893ced77c49093f8755706
parent
d1899557
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
34 additions
and
17 deletions
+34
-17
vp9/common/vp9_onyx.h
vp9/common/vp9_onyx.h
+7
-0
vp9/encoder/vp9_encodeframe.c
vp9/encoder/vp9_encodeframe.c
+5
-5
vp9/encoder/vp9_firstpass.c
vp9/encoder/vp9_firstpass.c
+5
-5
vp9/encoder/vp9_onyx_if.c
vp9/encoder/vp9_onyx_if.c
+2
-4
vp9/encoder/vp9_onyx_int.h
vp9/encoder/vp9_onyx_int.h
+0
-1
vp9/vp9_cx_iface.c
vp9/vp9_cx_iface.c
+7
-0
vpx/vp8cx.h
vpx/vp8cx.h
+3
-0
vpxenc.c
vpxenc.c
+5
-2
No files found.
vp9/common/vp9_onyx.h
View file @
17084657
...
...
@@ -64,6 +64,12 @@ extern "C"
FRAMEFLAGS_ALTREF
=
4
,
}
FRAMETYPE_FLAGS
;
typedef
enum
{
NO_AQ
=
0
,
VARIANCE_AQ
=
1
,
AQ_MODES_COUNT
// This should always be the last member of the enum
}
AQ_MODES
;
typedef
struct
{
int
version
;
// 4 versions of bitstream defined:
// 0 - best quality/slowest decode,
...
...
@@ -128,6 +134,7 @@ extern "C"
int
best_allowed_q
;
int
cq_level
;
int
lossless
;
int
aq_mode
;
// Adaptive Quantization mode
// two pass datarate control
int
two_pass_vbrbias
;
// two pass datarate control tweaks
...
...
vp9/encoder/vp9_encodeframe.c
View file @
17084657
...
...
@@ -400,7 +400,7 @@ static void update_state(VP9_COMP *cpi, PICK_MODE_CONTEXT *ctx,
&&
(
xd
->
mb_to_bottom_edge
>>
(
3
+
MI_SIZE_LOG2
))
+
mi_height
>
y
)
xd
->
mi_8x8
[
x_idx
+
y
*
mis
]
=
mi_addr
;
if
(
cpi
->
sf
.
variance_adaptive_quantization
)
{
if
(
cpi
->
oxcf
.
aq_mode
==
VARIANCE_AQ
)
{
vp9_mb_init_quantizer
(
cpi
,
x
);
}
...
...
@@ -549,7 +549,7 @@ static void set_offsets(VP9_COMP *cpi, const TileInfo *const tile,
/* segment ID */
if
(
seg
->
enabled
)
{
if
(
!
cpi
->
sf
.
variance_adaptive_quantization
)
{
if
(
!
cpi
->
oxcf
.
aq_mode
==
VARIANCE_AQ
)
{
uint8_t
*
map
=
seg
->
update_map
?
cpi
->
segmentation_map
:
cm
->
last_frame_seg_map
;
mbmi
->
segment_id
=
vp9_get_segment_id
(
cm
,
map
,
bsize
,
mi_row
,
mi_col
);
...
...
@@ -625,7 +625,7 @@ static void pick_sb_modes(VP9_COMP *cpi, const TileInfo *const tile,
x
->
source_variance
=
get_sby_perpixel_variance
(
cpi
,
x
,
bsize
);
if
(
cpi
->
sf
.
variance_adaptive_quantization
)
{
if
(
cpi
->
oxcf
.
aq_mode
==
VARIANCE_AQ
)
{
int
energy
;
if
(
bsize
<=
BLOCK_16X16
)
{
energy
=
x
->
mb_energy
;
...
...
@@ -641,7 +641,7 @@ static void pick_sb_modes(VP9_COMP *cpi, const TileInfo *const tile,
if
(
cpi
->
oxcf
.
tuning
==
VP8_TUNE_SSIM
)
vp9_activity_masking
(
cpi
,
x
);
if
(
cpi
->
sf
.
variance_adaptive_quantization
)
{
if
(
cpi
->
oxcf
.
aq_mode
==
VARIANCE_AQ
)
{
vp9_clear_system_state
();
// __asm emms;
x
->
rdmult
=
round
(
x
->
rdmult
*
rdmult_ratio
);
}
...
...
@@ -660,7 +660,7 @@ static void pick_sb_modes(VP9_COMP *cpi, const TileInfo *const tile,
totaldist
,
bsize
,
ctx
,
best_rd
);
}
if
(
cpi
->
sf
.
variance_adaptive_quantization
)
{
if
(
cpi
->
oxcf
.
aq_mode
==
VARIANCE_AQ
)
{
x
->
rdmult
=
orig_rdmult
;
if
(
*
totalrate
!=
INT_MAX
)
{
vp9_clear_system_state
();
// __asm emms;
...
...
vp9/encoder/vp9_firstpass.c
View file @
17084657
...
...
@@ -601,14 +601,14 @@ void vp9_first_pass(VP9_COMP *cpi) {
num_8x8_blocks_wide_lookup
[
xd
->
mi_8x8
[
0
]
->
mbmi
.
sb_type
],
cm
->
mi_rows
,
cm
->
mi_cols
);
if
(
cpi
->
sf
.
variance_adaptive_quantization
)
{
if
(
cpi
->
oxcf
.
aq_mode
==
VARIANCE_AQ
)
{
int
energy
=
vp9_block_energy
(
cpi
,
x
,
xd
->
mi_8x8
[
0
]
->
mbmi
.
sb_type
);
error_weight
=
vp9_vaq_inv_q_ratio
(
energy
);
}
// do intra 16x16 prediction
this_error
=
vp9_encode_intra
(
x
,
use_dc_pred
);
if
(
cpi
->
sf
.
variance_adaptive_quantization
)
{
if
(
cpi
->
oxcf
.
aq_mode
==
VARIANCE_AQ
)
{
vp9_clear_system_state
();
// __asm emms;
this_error
*=
error_weight
;
}
...
...
@@ -646,7 +646,7 @@ void vp9_first_pass(VP9_COMP *cpi) {
first_pass_motion_search
(
cpi
,
x
,
&
best_ref_mv
,
&
mv
.
as_mv
,
lst_yv12
,
&
motion_error
,
recon_yoffset
);
if
(
cpi
->
sf
.
variance_adaptive_quantization
)
{
if
(
cpi
->
oxcf
.
aq_mode
==
VARIANCE_AQ
)
{
vp9_clear_system_state
();
// __asm emms;
motion_error
*=
error_weight
;
}
...
...
@@ -657,7 +657,7 @@ void vp9_first_pass(VP9_COMP *cpi) {
tmp_err
=
INT_MAX
;
first_pass_motion_search
(
cpi
,
x
,
&
zero_ref_mv
,
&
tmp_mv
.
as_mv
,
lst_yv12
,
&
tmp_err
,
recon_yoffset
);
if
(
cpi
->
sf
.
variance_adaptive_quantization
)
{
if
(
cpi
->
oxcf
.
aq_mode
==
VARIANCE_AQ
)
{
vp9_clear_system_state
();
// __asm emms;
tmp_err
*=
error_weight
;
}
...
...
@@ -677,7 +677,7 @@ void vp9_first_pass(VP9_COMP *cpi) {
first_pass_motion_search
(
cpi
,
x
,
&
zero_ref_mv
,
&
tmp_mv
.
as_mv
,
gld_yv12
,
&
gf_motion_error
,
recon_yoffset
);
if
(
cpi
->
sf
.
variance_adaptive_quantization
)
{
if
(
cpi
->
oxcf
.
aq_mode
==
VARIANCE_AQ
)
{
vp9_clear_system_state
();
// __asm emms;
gf_motion_error
*=
error_weight
;
}
...
...
vp9/encoder/vp9_onyx_if.c
View file @
17084657
...
...
@@ -764,8 +764,6 @@ void vp9_set_speed_features(VP9_COMP *cpi) {
sf
->
static_segmentation
=
0
;
#endif
sf
->
variance_adaptive_quantization
=
0
;
switch
(
mode
)
{
case
0
:
// This is the best quality mode.
break
;
...
...
@@ -3195,7 +3193,7 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi,
}
}
if
(
cpi
->
sf
.
variance_adaptive_quantization
)
{
if
(
cpi
->
oxcf
.
aq_mode
==
VARIANCE_AQ
)
{
vp9_vaq_frame_setup
(
cpi
);
}
...
...
@@ -3980,7 +3978,7 @@ int vp9_get_compressed_data(VP9_PTR ptr, unsigned int *frame_flags,
vp9_setup_interp_filters
(
&
cpi
->
mb
.
e_mbd
,
DEFAULT_INTERP_FILTER
,
cm
);
if
(
cpi
->
sf
.
variance_adaptive_quantization
)
{
if
(
cpi
->
oxcf
.
aq_mode
==
VARIANCE_AQ
)
{
vp9_vaq_init
();
}
...
...
vp9/encoder/vp9_onyx_int.h
View file @
17084657
...
...
@@ -248,7 +248,6 @@ typedef struct {
int
auto_mv_step_size
;
int
optimize_coefficients
;
int
static_segmentation
;
int
variance_adaptive_quantization
;
int
comp_inter_joint_search_thresh
;
int
adaptive_rd_thresh
;
int
skip_encode_sb
;
...
...
vp9/vp9_cx_iface.c
View file @
17084657
...
...
@@ -38,6 +38,7 @@ struct vp9_extracfg {
unsigned
int
rc_max_intra_bitrate_pct
;
unsigned
int
lossless
;
unsigned
int
frame_parallel_decoding_mode
;
unsigned
int
aq_mode
;
};
struct
extraconfig_map
{
...
...
@@ -66,6 +67,7 @@ static const struct extraconfig_map extracfg_map[] = {
0
,
/* rc_max_intra_bitrate_pct */
0
,
/* lossless */
0
,
/* frame_parallel_decoding_mode */
0
,
/* aq_mode */
}
}
};
...
...
@@ -157,6 +159,7 @@ static vpx_codec_err_t validate_config(vpx_codec_alg_priv_t *ctx,
RANGE_CHECK_HI
(
cfg
,
rc_max_quantizer
,
0
);
RANGE_CHECK_HI
(
cfg
,
rc_min_quantizer
,
0
);
}
RANGE_CHECK
(
vp8_cfg
,
aq_mode
,
0
,
AQ_MODES_COUNT
-
1
);
RANGE_CHECK_HI
(
cfg
,
g_threads
,
64
);
RANGE_CHECK_HI
(
cfg
,
g_lag_in_frames
,
MAX_LAG_BUFFERS
);
...
...
@@ -335,6 +338,8 @@ static vpx_codec_err_t set_vp9e_config(VP9_CONFIG *oxcf,
oxcf
->
error_resilient_mode
=
cfg
.
g_error_resilient
;
oxcf
->
frame_parallel_decoding_mode
=
vp8_cfg
.
frame_parallel_decoding_mode
;
oxcf
->
aq_mode
=
vp8_cfg
.
aq_mode
;
oxcf
->
ss_number_layers
=
cfg
.
ss_number_layers
;
/*
printf("Current VP9 Settings: \n");
...
...
@@ -445,6 +450,7 @@ static vpx_codec_err_t set_param(vpx_codec_alg_priv_t *ctx,
MAP
(
VP8E_SET_MAX_INTRA_BITRATE_PCT
,
xcfg
.
rc_max_intra_bitrate_pct
);
MAP
(
VP9E_SET_LOSSLESS
,
xcfg
.
lossless
);
MAP
(
VP9E_SET_FRAME_PARALLEL_DECODING
,
xcfg
.
frame_parallel_decoding_mode
);
MAP
(
VP9E_SET_AQ_MODE
,
xcfg
.
aq_mode
);
}
res
=
validate_config
(
ctx
,
&
ctx
->
cfg
,
&
xcfg
);
...
...
@@ -1071,6 +1077,7 @@ static vpx_codec_ctrl_fn_map_t vp9e_ctf_maps[] = {
{
VP8E_SET_MAX_INTRA_BITRATE_PCT
,
set_param
},
{
VP9E_SET_LOSSLESS
,
set_param
},
{
VP9E_SET_FRAME_PARALLEL_DECODING
,
set_param
},
{
VP9E_SET_AQ_MODE
,
set_param
},
{
VP9_GET_REFERENCE
,
get_reference
},
{
VP9E_SET_SVC
,
vp9e_set_svc
},
{
VP9E_SET_SVC_PARAMETERS
,
vp9e_set_svc_parameters
},
...
...
vpx/vp8cx.h
View file @
17084657
...
...
@@ -193,6 +193,7 @@ enum vp8e_enc_control_id {
VP9E_SET_TILE_COLUMNS
,
VP9E_SET_TILE_ROWS
,
VP9E_SET_FRAME_PARALLEL_DECODING
,
VP9E_SET_AQ_MODE
,
VP9E_SET_SVC
,
VP9E_SET_SVC_PARAMETERS
...
...
@@ -343,6 +344,8 @@ VPX_CTRL_USE_TYPE(VP9E_SET_LOSSLESS, unsigned int)
VPX_CTRL_USE_TYPE
(
VP9E_SET_FRAME_PARALLEL_DECODING
,
unsigned
int
)
VPX_CTRL_USE_TYPE
(
VP9E_SET_AQ_MODE
,
unsigned
int
)
/*! @} - end defgroup vp8_encoder */
#ifdef __cplusplus
}
// extern "C"
...
...
vpxenc.c
View file @
17084657
...
...
@@ -561,6 +561,9 @@ static const arg_def_t lossless = ARG_DEF(NULL, "lossless", 1, "Lossless mode");
#if CONFIG_VP9_ENCODER
static
const
arg_def_t
frame_parallel_decoding
=
ARG_DEF
(
NULL
,
"frame-parallel"
,
1
,
"Enable frame parallel decodability features"
);
static
const
arg_def_t
aq_mode
=
ARG_DEF
(
NULL
,
"aq-mode"
,
1
,
"Adaptive quantization mode (0: disabled (by default), 1: variance based)"
);
#endif
#if CONFIG_VP8_ENCODER
...
...
@@ -585,7 +588,7 @@ static const arg_def_t *vp9_args[] = {
&
cpu_used
,
&
auto_altref
,
&
noise_sens
,
&
sharpness
,
&
static_thresh
,
&
tile_cols
,
&
tile_rows
,
&
arnr_maxframes
,
&
arnr_strength
,
&
arnr_type
,
&
tune_ssim
,
&
cq_level
,
&
max_intra_rate_pct
,
&
lossless
,
&
frame_parallel_decoding
,
&
frame_parallel_decoding
,
&
aq_mode
,
NULL
};
static
const
int
vp9_arg_ctrl_map
[]
=
{
...
...
@@ -594,7 +597,7 @@ static const int vp9_arg_ctrl_map[] = {
VP9E_SET_TILE_COLUMNS
,
VP9E_SET_TILE_ROWS
,
VP8E_SET_ARNR_MAXFRAMES
,
VP8E_SET_ARNR_STRENGTH
,
VP8E_SET_ARNR_TYPE
,
VP8E_SET_TUNING
,
VP8E_SET_CQ_LEVEL
,
VP8E_SET_MAX_INTRA_BITRATE_PCT
,
VP9E_SET_LOSSLESS
,
VP9E_SET_FRAME_PARALLEL_DECODING
,
VP9E_SET_LOSSLESS
,
VP9E_SET_FRAME_PARALLEL_DECODING
,
VP9E_SET_AQ_MODE
,
0
};
#endif
...
...
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