Skip to content
GitLab
Menu
Projects
Groups
Snippets
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
bf46feb3
Commit
bf46feb3
authored
Jun 17, 2014
by
Dmitry Kovalev
Committed by
Gerrit Code Review
Jun 17, 2014
Browse files
Merge "Moving RD-opt related code from vp9_encoder.h to vp9_rdopt.h."
parents
bed7cf2e
3f8508eb
Changes
2
Hide whitespace changes
Inline
Side-by-side
vp9/encoder/vp9_encoder.h
View file @
bf46feb3
...
...
@@ -32,6 +32,7 @@
#include
"vp9/encoder/vp9_mcomp.h"
#include
"vp9/encoder/vp9_quantize.h"
#include
"vp9/encoder/vp9_ratectrl.h"
#include
"vp9/encoder/vp9_rdopt.h"
#include
"vp9/encoder/vp9_speed_features.h"
#include
"vp9/encoder/vp9_svc_layercontext.h"
#include
"vp9/encoder/vp9_tokenize.h"
...
...
@@ -46,9 +47,6 @@ extern "C" {
#define DEFAULT_GF_INTERVAL 10
#define MAX_MODES 30
#define MAX_REFS 6
typedef
struct
{
int
nmvjointcost
[
MV_JOINTS
];
int
nmvcosts
[
2
][
MV_VALS
];
...
...
@@ -66,56 +64,6 @@ typedef struct {
FRAME_CONTEXT
fc
;
}
CODING_CONTEXT
;
// This enumerator type needs to be kept aligned with the mode order in
// const MODE_DEFINITION vp9_mode_order[MAX_MODES] used in the rd code.
typedef
enum
{
THR_NEARESTMV
,
THR_NEARESTA
,
THR_NEARESTG
,
THR_DC
,
THR_NEWMV
,
THR_NEWA
,
THR_NEWG
,
THR_NEARMV
,
THR_NEARA
,
THR_COMP_NEARESTLA
,
THR_COMP_NEARESTGA
,
THR_TM
,
THR_COMP_NEARLA
,
THR_COMP_NEWLA
,
THR_NEARG
,
THR_COMP_NEARGA
,
THR_COMP_NEWGA
,
THR_ZEROMV
,
THR_ZEROG
,
THR_ZEROA
,
THR_COMP_ZEROLA
,
THR_COMP_ZEROGA
,
THR_H_PRED
,
THR_V_PRED
,
THR_D135_PRED
,
THR_D207_PRED
,
THR_D153_PRED
,
THR_D63_PRED
,
THR_D117_PRED
,
THR_D45_PRED
,
}
THR_MODES
;
typedef
enum
{
THR_LAST
,
THR_GOLD
,
THR_ALTR
,
THR_COMP_LA
,
THR_COMP_GA
,
THR_INTRA
,
}
THR_MODES_SUB8X8
;
typedef
enum
{
// encode_breakout is disabled.
...
...
@@ -293,32 +241,6 @@ static INLINE int is_best_mode(MODE mode) {
return
mode
==
ONE_PASS_BEST
||
mode
==
TWO_PASS_SECOND_BEST
;
}
typedef
struct
RD_OPT
{
// Thresh_mult is used to set a threshold for the rd score. A higher value
// means that we will accept the best mode so far more often. This number
// is used in combination with the current block size, and thresh_freq_fact
// to pick a threshold.
int
thresh_mult
[
MAX_MODES
];
int
thresh_mult_sub8x8
[
MAX_REFS
];
int
threshes
[
MAX_SEGMENTS
][
BLOCK_SIZES
][
MAX_MODES
];
int
thresh_freq_fact
[
BLOCK_SIZES
][
MAX_MODES
];
int64_t
comp_pred_diff
[
REFERENCE_MODES
];
int64_t
prediction_type_threshes
[
MAX_REF_FRAMES
][
REFERENCE_MODES
];
int64_t
tx_select_diff
[
TX_MODES
];
// FIXME(rbultje) can this overflow?
int
tx_select_threshes
[
MAX_REF_FRAMES
][
TX_MODES
];
int64_t
filter_diff
[
SWITCHABLE_FILTER_CONTEXTS
];
int64_t
filter_threshes
[
MAX_REF_FRAMES
][
SWITCHABLE_FILTER_CONTEXTS
];
int64_t
filter_cache
[
SWITCHABLE_FILTER_CONTEXTS
];
int64_t
mask_filter
;
int
RDMULT
;
int
RDDIV
;
}
RD_OPT
;
typedef
struct
VP9_COMP
{
QUANTS
quants
;
MACROBLOCK
mb
;
...
...
vp9/encoder/vp9_rdopt.h
View file @
bf46feb3
...
...
@@ -13,7 +13,10 @@
#include
<limits.h>
#include
"vp9/encoder/vp9_encoder.h"
#include
"vp9/common/vp9_blockd.h"
#include
"vp9/encoder/vp9_block.h"
#include
"vp9/encoder/vp9_context_tree.h"
#ifdef __cplusplus
extern
"C"
{
...
...
@@ -30,21 +33,104 @@ extern "C" {
#define INVALID_MV 0x80008000
#define MAX_MODES 30
#define MAX_REFS 6
// This enumerator type needs to be kept aligned with the mode order in
// const MODE_DEFINITION vp9_mode_order[MAX_MODES] used in the rd code.
typedef
enum
{
THR_NEARESTMV
,
THR_NEARESTA
,
THR_NEARESTG
,
THR_DC
,
THR_NEWMV
,
THR_NEWA
,
THR_NEWG
,
THR_NEARMV
,
THR_NEARA
,
THR_COMP_NEARESTLA
,
THR_COMP_NEARESTGA
,
THR_TM
,
THR_COMP_NEARLA
,
THR_COMP_NEWLA
,
THR_NEARG
,
THR_COMP_NEARGA
,
THR_COMP_NEWGA
,
THR_ZEROMV
,
THR_ZEROG
,
THR_ZEROA
,
THR_COMP_ZEROLA
,
THR_COMP_ZEROGA
,
THR_H_PRED
,
THR_V_PRED
,
THR_D135_PRED
,
THR_D207_PRED
,
THR_D153_PRED
,
THR_D63_PRED
,
THR_D117_PRED
,
THR_D45_PRED
,
}
THR_MODES
;
typedef
enum
{
THR_LAST
,
THR_GOLD
,
THR_ALTR
,
THR_COMP_LA
,
THR_COMP_GA
,
THR_INTRA
,
}
THR_MODES_SUB8X8
;
typedef
struct
RD_OPT
{
// Thresh_mult is used to set a threshold for the rd score. A higher value
// means that we will accept the best mode so far more often. This number
// is used in combination with the current block size, and thresh_freq_fact
// to pick a threshold.
int
thresh_mult
[
MAX_MODES
];
int
thresh_mult_sub8x8
[
MAX_REFS
];
int
threshes
[
MAX_SEGMENTS
][
BLOCK_SIZES
][
MAX_MODES
];
int
thresh_freq_fact
[
BLOCK_SIZES
][
MAX_MODES
];
int64_t
comp_pred_diff
[
REFERENCE_MODES
];
int64_t
prediction_type_threshes
[
MAX_REF_FRAMES
][
REFERENCE_MODES
];
int64_t
tx_select_diff
[
TX_MODES
];
// FIXME(rbultje) can this overflow?
int
tx_select_threshes
[
MAX_REF_FRAMES
][
TX_MODES
];
int64_t
filter_diff
[
SWITCHABLE_FILTER_CONTEXTS
];
int64_t
filter_threshes
[
MAX_REF_FRAMES
][
SWITCHABLE_FILTER_CONTEXTS
];
int64_t
filter_cache
[
SWITCHABLE_FILTER_CONTEXTS
];
int64_t
mask_filter
;
int
RDMULT
;
int
RDDIV
;
}
RD_OPT
;
struct
TileInfo
;
struct
VP9_COMP
;
struct
macroblock
;
int
vp9_compute_rd_mult
(
const
VP9_COMP
*
cpi
,
int
qindex
);
int
vp9_compute_rd_mult
(
const
struct
VP9_COMP
*
cpi
,
int
qindex
);
void
vp9_initialize_rd_consts
(
VP9_COMP
*
cpi
);
void
vp9_initialize_rd_consts
(
struct
VP9_COMP
*
cpi
);
void
vp9_initialize_me_consts
(
VP9_COMP
*
cpi
,
int
qindex
);
void
vp9_initialize_me_consts
(
struct
VP9_COMP
*
cpi
,
int
qindex
);
void
vp9_model_rd_from_var_lapndz
(
unsigned
int
var
,
unsigned
int
n
,
unsigned
int
qstep
,
int
*
rate
,
int64_t
*
dist
);
int
vp9_get_switchable_rate
(
const
VP9_COMP
*
cpi
);
int
vp9_get_switchable_rate
(
const
struct
VP9_COMP
*
cpi
);
void
vp9_setup_buffer_inter
(
VP9_COMP
*
cpi
,
MACROBLOCK
*
x
,
void
vp9_setup_buffer_inter
(
struct
VP9_COMP
*
cpi
,
struct
macroblock
*
x
,
const
TileInfo
*
const
tile
,
MV_REFERENCE_FRAME
ref_frame
,
BLOCK_SIZE
block_size
,
...
...
@@ -53,14 +139,14 @@ void vp9_setup_buffer_inter(VP9_COMP *cpi, MACROBLOCK *x,
int_mv
frame_near_mv
[
MAX_REF_FRAMES
],
struct
buf_2d
yv12_mb
[
4
][
MAX_MB_PLANE
]);
const
YV12_BUFFER_CONFIG
*
vp9_get_scaled_ref_frame
(
const
VP9_COMP
*
cpi
,
const
YV12_BUFFER_CONFIG
*
vp9_get_scaled_ref_frame
(
const
struct
VP9_COMP
*
cpi
,
int
ref_frame
);
void
vp9_rd_pick_intra_mode_sb
(
VP9_COMP
*
cpi
,
MACROBLOCK
*
x
,
void
vp9_rd_pick_intra_mode_sb
(
struct
VP9_COMP
*
cpi
,
struct
macroblock
*
x
,
int
*
r
,
int64_t
*
d
,
BLOCK_SIZE
bsize
,
PICK_MODE_CONTEXT
*
ctx
,
int64_t
best_rd
);
int64_t
vp9_rd_pick_inter_mode_sb
(
VP9_COMP
*
cpi
,
MACROBLOCK
*
x
,
int64_t
vp9_rd_pick_inter_mode_sb
(
struct
VP9_COMP
*
cpi
,
struct
macroblock
*
x
,
const
struct
TileInfo
*
const
tile
,
int
mi_row
,
int
mi_col
,
int
*
returnrate
,
...
...
@@ -69,7 +155,8 @@ int64_t vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, MACROBLOCK *x,
PICK_MODE_CONTEXT
*
ctx
,
int64_t
best_rd_so_far
);
int64_t
vp9_rd_pick_inter_mode_sub8x8
(
VP9_COMP
*
cpi
,
MACROBLOCK
*
x
,
int64_t
vp9_rd_pick_inter_mode_sub8x8
(
struct
VP9_COMP
*
cpi
,
struct
macroblock
*
x
,
const
struct
TileInfo
*
const
tile
,
int
mi_row
,
int
mi_col
,
int
*
returnrate
,
...
...
@@ -85,9 +172,9 @@ void vp9_get_entropy_contexts(BLOCK_SIZE bsize, TX_SIZE tx_size,
ENTROPY_CONTEXT
t_above
[
16
],
ENTROPY_CONTEXT
t_left
[
16
]);
void
vp9_set_rd_speed_thresholds
(
VP9_COMP
*
cpi
);
void
vp9_set_rd_speed_thresholds
(
struct
VP9_COMP
*
cpi
);
void
vp9_set_rd_speed_thresholds_sub8x8
(
VP9_COMP
*
cpi
);
void
vp9_set_rd_speed_thresholds_sub8x8
(
struct
VP9_COMP
*
cpi
);
static
INLINE
int
rd_less_than_thresh
(
int64_t
best_rd
,
int
thresh
,
int
thresh_fact
)
{
...
...
Write
Preview
Supports
Markdown
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