Group parameters in AV1_COMMON into sub-structures
* Group CDEF parameters into cdef_info
* Group delta_q and delta_lf parameters into delta_q_info
* Group order hint related parameters into order_hint_info
* Modify get_relative_dist() to take an order_hint_info pointer in order
to reduce dependency on AV1_COMMON.
This forms part of wider restructuring and refactoring in order to
achieve a clean API separation at the entry to the low-level encoder.
BUG=aomedia:2244
Change-Id: I6c63b94056198c1d1e9472e153931873e7a99675
diff --git a/av1/common/av1_loopfilter.c b/av1/common/av1_loopfilter.c
index 39bd1c6..c5a86fb 100644
--- a/av1/common/av1_loopfilter.c
+++ b/av1/common/av1_loopfilter.c
@@ -456,9 +456,9 @@
const int dir_idx, int plane,
const MB_MODE_INFO *mbmi) {
const int segment_id = mbmi->segment_id;
- if (cm->delta_lf_present_flag) {
+ if (cm->delta_q_info.delta_lf_present_flag) {
int delta_lf;
- if (cm->delta_lf_multi) {
+ if (cm->delta_q_info.delta_lf_multi) {
const int delta_lf_idx = delta_lf_id_lut[plane][dir_idx];
delta_lf = mbmi->delta_lf[delta_lf_idx];
} else {
diff --git a/av1/common/cdef.c b/av1/common/cdef.c
index 97f250d..556dede 100644
--- a/av1/common/cdef.c
+++ b/av1/common/cdef.c
@@ -140,6 +140,7 @@
void av1_cdef_frame(YV12_BUFFER_CONFIG *frame, AV1_COMMON *cm,
MACROBLOCKD *xd) {
+ const CdefInfo *const cdef_info = &cm->cdef_info;
const int num_planes = av1_num_planes(cm);
DECLARE_ALIGNED(16, uint16_t, src[CDEF_INBUF_SIZE]);
uint16_t *linebuf[3];
@@ -231,13 +232,15 @@
cm->mi_grid_visible[MI_SIZE_64X64 * fbr * cm->mi_stride +
MI_SIZE_64X64 * fbc]
->cdef_strength;
- level = cm->cdef_strengths[mbmi_cdef_strength] / CDEF_SEC_STRENGTHS;
+ level =
+ cdef_info->cdef_strengths[mbmi_cdef_strength] / CDEF_SEC_STRENGTHS;
sec_strength =
- cm->cdef_strengths[mbmi_cdef_strength] % CDEF_SEC_STRENGTHS;
+ cdef_info->cdef_strengths[mbmi_cdef_strength] % CDEF_SEC_STRENGTHS;
sec_strength += sec_strength == 3;
- uv_level = cm->cdef_uv_strengths[mbmi_cdef_strength] / CDEF_SEC_STRENGTHS;
+ uv_level =
+ cdef_info->cdef_uv_strengths[mbmi_cdef_strength] / CDEF_SEC_STRENGTHS;
uv_sec_strength =
- cm->cdef_uv_strengths[mbmi_cdef_strength] % CDEF_SEC_STRENGTHS;
+ cdef_info->cdef_uv_strengths[mbmi_cdef_strength] % CDEF_SEC_STRENGTHS;
uv_sec_strength += uv_sec_strength == 3;
if ((level == 0 && sec_strength == 0 && uv_level == 0 &&
uv_sec_strength == 0) ||
@@ -252,8 +255,8 @@
for (int pli = 0; pli < num_planes; pli++) {
int coffset;
int rend, cend;
- int pri_damping = cm->cdef_pri_damping;
- int sec_damping = cm->cdef_sec_damping;
+ int pri_damping = cdef_info->cdef_pri_damping;
+ int sec_damping = cdef_info->cdef_sec_damping;
int hsize = nhb << mi_wide_l2[pli];
int vsize = nvb << mi_high_l2[pli];
diff --git a/av1/common/mvref_common.c b/av1/common/mvref_common.c
index f893a6c..663a0c8 100644
--- a/av1/common/mvref_common.c
+++ b/av1/common/mvref_common.c
@@ -349,7 +349,8 @@
int cur_frame_index = cm->cur_frame->cur_frame_offset;
int buf_idx_0 = cm->frame_refs[FWD_RF_OFFSET(rf[0])].idx;
int frame0_index = cm->buffer_pool->frame_bufs[buf_idx_0].cur_frame_offset;
- int cur_offset_0 = get_relative_dist(cm, cur_frame_index, frame0_index);
+ int cur_offset_0 = get_relative_dist(&cm->seq_params.order_hint_info,
+ cur_frame_index, frame0_index);
CANDIDATE_MV *ref_mv_stack = ref_mv_stacks[rf[0]];
if (prev_frame_mvs->mfmv0.as_int != INVALID_MV) {
@@ -384,10 +385,12 @@
int buf_idx_0 = cm->frame_refs[FWD_RF_OFFSET(rf[0])].idx;
int frame0_index = cm->buffer_pool->frame_bufs[buf_idx_0].cur_frame_offset;
- int cur_offset_0 = get_relative_dist(cm, cur_frame_index, frame0_index);
+ int cur_offset_0 = get_relative_dist(&cm->seq_params.order_hint_info,
+ cur_frame_index, frame0_index);
int buf_idx_1 = cm->frame_refs[FWD_RF_OFFSET(rf[1])].idx;
int frame1_index = cm->buffer_pool->frame_bufs[buf_idx_1].cur_frame_offset;
- int cur_offset_1 = get_relative_dist(cm, cur_frame_index, frame1_index);
+ int cur_offset_1 = get_relative_dist(&cm->seq_params.order_hint_info,
+ cur_frame_index, frame1_index);
CANDIDATE_MV *ref_mv_stack = ref_mv_stacks[ref_frame];
if (prev_frame_mvs->mfmv0.as_int != INVALID_MV) {
@@ -876,11 +879,13 @@
MV_REFERENCE_FRAME ref_frame;
for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) {
const int buf_idx = cm->frame_refs[ref_frame - LAST_FRAME].idx;
- if (cm->seq_params.enable_order_hint && buf_idx != INVALID_IDX) {
+ if (cm->seq_params.order_hint_info.enable_order_hint &&
+ buf_idx != INVALID_IDX) {
const int ref_frame_offset =
cm->buffer_pool->frame_bufs[buf_idx].cur_frame_offset;
cm->ref_frame_sign_bias[ref_frame] =
- (get_relative_dist(cm, ref_frame_offset, (int)cm->frame_offset) <= 0)
+ (get_relative_dist(&cm->seq_params.order_hint_info, ref_frame_offset,
+ (int)cm->frame_offset) <= 0)
? 0
: 1;
} else {
@@ -951,12 +956,13 @@
const unsigned int *const ref_frame_offsets =
&cm->buffer_pool->frame_bufs[start_frame_idx].ref_frame_offset[0];
const int cur_frame_offset = cm->cur_frame->cur_frame_offset;
- int start_to_current_frame_offset =
- get_relative_dist(cm, start_frame_offset, cur_frame_offset);
+ int start_to_current_frame_offset = get_relative_dist(
+ &cm->seq_params.order_hint_info, start_frame_offset, cur_frame_offset);
for (MV_REFERENCE_FRAME rf = LAST_FRAME; rf <= INTER_REFS_PER_FRAME; ++rf) {
- ref_offset[rf] = get_relative_dist(cm, start_frame_offset,
- ref_frame_offsets[rf - LAST_FRAME]);
+ ref_offset[rf] =
+ get_relative_dist(&cm->seq_params.order_hint_info, start_frame_offset,
+ ref_frame_offsets[rf - LAST_FRAME]);
}
if (dir == 2) start_to_current_frame_offset = -start_to_current_frame_offset;
@@ -1002,8 +1008,10 @@
}
void av1_setup_motion_field(AV1_COMMON *cm) {
+ const OrderHintInfo *const order_hint_info = &cm->seq_params.order_hint_info;
+
memset(cm->ref_frame_side, 0, sizeof(cm->ref_frame_side));
- if (!cm->seq_params.enable_order_hint) return;
+ if (!order_hint_info->enable_order_hint) return;
TPL_MV_REF *tpl_mvs_base = cm->tpl_mvs;
int size = ((cm->mi_rows + MAX_MIB_SIZE) >> 1) * (cm->mi_stride >> 1);
@@ -1028,7 +1036,7 @@
ref_buf_idx[ref_idx] = buf_idx;
ref_order_hint[ref_idx] = order_hint;
- if (get_relative_dist(cm, order_hint, cur_order_hint) > 0)
+ if (get_relative_dist(order_hint_info, order_hint, cur_order_hint) > 0)
cm->ref_frame_side[ref_frame] = 1;
else if (order_hint == cur_order_hint)
cm->ref_frame_side[ref_frame] = -1;
@@ -1047,17 +1055,20 @@
--ref_stamp;
}
- if (get_relative_dist(cm, ref_order_hint[BWDREF_FRAME - LAST_FRAME],
+ if (get_relative_dist(order_hint_info,
+ ref_order_hint[BWDREF_FRAME - LAST_FRAME],
cur_order_hint) > 0) {
if (motion_field_projection(cm, BWDREF_FRAME, 0)) --ref_stamp;
}
- if (get_relative_dist(cm, ref_order_hint[ALTREF2_FRAME - LAST_FRAME],
+ if (get_relative_dist(order_hint_info,
+ ref_order_hint[ALTREF2_FRAME - LAST_FRAME],
cur_order_hint) > 0) {
if (motion_field_projection(cm, ALTREF2_FRAME, 0)) --ref_stamp;
}
- if (get_relative_dist(cm, ref_order_hint[ALTREF_FRAME - LAST_FRAME],
+ if (get_relative_dist(order_hint_info,
+ ref_order_hint[ALTREF_FRAME - LAST_FRAME],
cur_order_hint) > 0 &&
ref_stamp >= 0)
if (motion_field_projection(cm, ALTREF_FRAME, 0)) --ref_stamp;
@@ -1264,10 +1275,12 @@
}
void av1_setup_skip_mode_allowed(AV1_COMMON *cm) {
+ const OrderHintInfo *const order_hint_info = &cm->seq_params.order_hint_info;
+
cm->is_skip_mode_allowed = 0;
cm->ref_frame_idx_0 = cm->ref_frame_idx_1 = INVALID_IDX;
- if (!cm->seq_params.enable_order_hint || frame_is_intra_only(cm) ||
+ if (!order_hint_info->enable_order_hint || frame_is_intra_only(cm) ||
cm->reference_mode == SINGLE_REFERENCE)
return;
@@ -1282,17 +1295,20 @@
if (buf_idx == INVALID_IDX) continue;
const int ref_offset = frame_bufs[buf_idx].cur_frame_offset;
- if (get_relative_dist(cm, ref_offset, cur_frame_offset) < 0) {
+ if (get_relative_dist(order_hint_info, ref_offset, cur_frame_offset) < 0) {
// Forward reference
if (ref_frame_offset[0] == -1 ||
- get_relative_dist(cm, ref_offset, ref_frame_offset[0]) > 0) {
+ get_relative_dist(order_hint_info, ref_offset, ref_frame_offset[0]) >
+ 0) {
ref_frame_offset[0] = ref_offset;
ref_idx[0] = i;
}
- } else if (get_relative_dist(cm, ref_offset, cur_frame_offset) > 0) {
+ } else if (get_relative_dist(order_hint_info, ref_offset,
+ cur_frame_offset) > 0) {
// Backward reference
if (ref_frame_offset[1] == INT_MAX ||
- get_relative_dist(cm, ref_offset, ref_frame_offset[1]) < 0) {
+ get_relative_dist(order_hint_info, ref_offset, ref_frame_offset[1]) <
+ 0) {
ref_frame_offset[1] = ref_offset;
ref_idx[1] = i;
}
@@ -1314,9 +1330,11 @@
const int ref_offset = frame_bufs[buf_idx].cur_frame_offset;
if ((ref_frame_offset[0] != -1 &&
- get_relative_dist(cm, ref_offset, ref_frame_offset[0]) < 0) &&
+ get_relative_dist(order_hint_info, ref_offset, ref_frame_offset[0]) <
+ 0) &&
(ref_frame_offset[1] == -1 ||
- get_relative_dist(cm, ref_offset, ref_frame_offset[1]) > 0)) {
+ get_relative_dist(order_hint_info, ref_offset, ref_frame_offset[1]) >
+ 0)) {
// Second closest forward reference
ref_frame_offset[1] = ref_offset;
ref_idx[1] = i;
@@ -1366,10 +1384,11 @@
int lst_frame_sort_idx = -1;
int gld_frame_sort_idx = -1;
- assert(cm->seq_params.enable_order_hint);
- assert(cm->seq_params.order_hint_bits_minus_1 >= 0);
+ assert(cm->seq_params.order_hint_info.enable_order_hint);
+ assert(cm->seq_params.order_hint_info.order_hint_bits_minus_1 >= 0);
const int cur_frame_offset = (int)cm->frame_offset;
- const int cur_frame_sort_idx = 1 << cm->seq_params.order_hint_bits_minus_1;
+ const int cur_frame_sort_idx =
+ 1 << cm->seq_params.order_hint_info.order_hint_bits_minus_1;
REF_FRAME_INFO ref_frame_info[REF_FRAMES];
int ref_flag_list[INTER_REFS_PER_FRAME] = { 0, 0, 0, 0, 0, 0, 0 };
@@ -1392,7 +1411,8 @@
ref_frame_info[i].sort_idx =
(offset == -1) ? -1
: cur_frame_sort_idx +
- get_relative_dist(cm, offset, cur_frame_offset);
+ get_relative_dist(&cm->seq_params.order_hint_info,
+ offset, cur_frame_offset);
assert(ref_frame_info[i].sort_idx >= -1);
if (map_idx == lst_map_idx) lst_frame_sort_idx = ref_frame_info[i].sort_idx;
diff --git a/av1/common/mvref_common.h b/av1/common/mvref_common.h
index 1ef50e7..2dbd12c 100644
--- a/av1/common/mvref_common.h
+++ b/av1/common/mvref_common.h
@@ -34,10 +34,10 @@
// clamp_mv_ref
#define MV_BORDER (16 << 3) // Allow 16 pels in 1/8th pel units
-static INLINE int get_relative_dist(const AV1_COMMON *cm, int a, int b) {
- if (!cm->seq_params.enable_order_hint) return 0;
+static INLINE int get_relative_dist(const OrderHintInfo *oh, int a, int b) {
+ if (!oh->enable_order_hint) return 0;
- const int bits = cm->seq_params.order_hint_bits_minus_1 + 1;
+ const int bits = oh->order_hint_bits_minus_1 + 1;
assert(bits >= 1);
assert(a >= 0 && a < (1 << bits));
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h
index 8af1626..3d04511 100644
--- a/av1/common/onyxc_int.h
+++ b/av1/common/onyxc_int.h
@@ -188,6 +188,40 @@
uint8_t minor;
} BitstreamLevel;
+typedef struct {
+ int cdef_pri_damping;
+ int cdef_sec_damping;
+ int nb_cdef_strengths;
+ int cdef_strengths[CDEF_MAX_STRENGTHS];
+ int cdef_uv_strengths[CDEF_MAX_STRENGTHS];
+ int cdef_bits;
+} CdefInfo;
+
+typedef struct {
+ int delta_q_present_flag;
+ // Resolution of delta quant
+ int delta_q_res;
+ int delta_lf_present_flag;
+ // Resolution of delta lf level
+ int delta_lf_res;
+ // This is a flag for number of deltas of loop filter level
+ // 0: use 1 delta, for y_vertical, y_horizontal, u, and v
+ // 1: use separate deltas for each filter level
+ int delta_lf_multi;
+} DeltaQInfo;
+
+typedef struct {
+ int enable_order_hint; // 0 - disable order hint, and related tools
+ int order_hint_bits_minus_1;
+ // jnt_comp, ref_frame_mvs, frame_sign_bias
+ // if 0, enable_jnt_comp and
+ // enable_ref_frame_mvs must be set zs 0.
+ int enable_jnt_comp; // 0 - disable joint compound modes
+ // 1 - enable it
+ int enable_ref_frame_mvs; // 0 - disable ref frame mvs
+ // 1 - enable it
+} OrderHintInfo;
+
// Sequence header structure.
// Note: All syntax elements of sequence_header_obu that need to be
// bit-identical across multiple sequence headers must be part of this struct,
@@ -203,7 +237,9 @@
BLOCK_SIZE sb_size; // Size of the superblock used for this frame
int mib_size; // Size of the superblock in units of MI blocks
int mib_size_log2; // Log 2 of above.
- int order_hint_bits_minus_1;
+
+ OrderHintInfo order_hint_info;
+
int force_screen_content_tools; // 0 - force off
// 1 - force on
// 2 - adaptive
@@ -218,14 +254,6 @@
int enable_masked_compound; // enables/disables masked compound
int enable_dual_filter; // 0 - disable dual interpolation filter
// 1 - enable vert/horiz filter selection
- int enable_order_hint; // 0 - disable order hint, and related tools
- // jnt_comp, ref_frame_mvs, frame_sign_bias
- // if 0, enable_jnt_comp and
- // enable_ref_frame_mvs must be set zs 0.
- int enable_jnt_comp; // 0 - disable joint compound modes
- // 1 - enable it
- int enable_ref_frame_mvs; // 0 - disable ref frame mvs
- // 1 - enable it
int enable_warped_motion; // 0 - disable warped motion for sequence
// 1 - enable it for the sequence
int enable_superres; // 0 - Disable superres for the sequence, and disable
@@ -497,23 +525,9 @@
WarpedMotionParams global_motion[REF_FRAMES];
aom_film_grain_t film_grain_params;
- int cdef_pri_damping;
- int cdef_sec_damping;
- int nb_cdef_strengths;
- int cdef_strengths[CDEF_MAX_STRENGTHS];
- int cdef_uv_strengths[CDEF_MAX_STRENGTHS];
- int cdef_bits;
+ CdefInfo cdef_info;
+ DeltaQInfo delta_q_info; // Delta Q and Delta LF parameters
- int delta_q_present_flag;
- // Resolution of delta quant
- int delta_q_res;
- int delta_lf_present_flag;
- // Resolution of delta lf level
- int delta_lf_res;
- // This is a flag for number of deltas of loop filter level
- // 0: use 1 delta, for y_vertical, y_horizontal, u, and v
- // 1: use separate deltas for each filter level
- int delta_lf_multi;
int num_tg;
SequenceHeader seq_params;
int current_frame_id;
@@ -651,8 +665,10 @@
// Returns 1 if this frame might allow mvs from some reference frame.
static INLINE int frame_might_allow_ref_frame_mvs(const AV1_COMMON *cm) {
- return !cm->error_resilient_mode && cm->seq_params.enable_ref_frame_mvs &&
- cm->seq_params.enable_order_hint && !frame_is_intra_only(cm);
+ return !cm->error_resilient_mode &&
+ cm->seq_params.order_hint_info.enable_ref_frame_mvs &&
+ cm->seq_params.order_hint_info.enable_order_hint &&
+ !frame_is_intra_only(cm);
}
// Returns 1 if this frame might use warped_motion
diff --git a/av1/common/pred_common.h b/av1/common/pred_common.h
index 6dba232..b16cd05 100644
--- a/av1/common/pred_common.h
+++ b/av1/common/pred_common.h
@@ -100,8 +100,10 @@
if (fwd_idx >= 0)
fwd_frame_index = cm->buffer_pool->frame_bufs[fwd_idx].cur_frame_offset;
- int fwd = abs(get_relative_dist(cm, fwd_frame_index, cur_frame_index));
- int bck = abs(get_relative_dist(cm, cur_frame_index, bck_frame_index));
+ int fwd = abs(get_relative_dist(&cm->seq_params.order_hint_info,
+ fwd_frame_index, cur_frame_index));
+ int bck = abs(get_relative_dist(&cm->seq_params.order_hint_info,
+ cur_frame_index, bck_frame_index));
const MB_MODE_INFO *const above_mi = xd->above_mbmi;
const MB_MODE_INFO *const left_mi = xd->left_mbmi;
diff --git a/av1/common/reconinter.c b/av1/common/reconinter.c
index f6e5b11..29ed929 100644
--- a/av1/common/reconinter.c
+++ b/av1/common/reconinter.c
@@ -649,9 +649,11 @@
fwd_frame_index = cm->buffer_pool->frame_bufs[fwd_idx].cur_frame_offset;
}
- int d0 = clamp(abs(get_relative_dist(cm, fwd_frame_index, cur_frame_index)),
+ int d0 = clamp(abs(get_relative_dist(&cm->seq_params.order_hint_info,
+ fwd_frame_index, cur_frame_index)),
0, MAX_FRAME_DISTANCE);
- int d1 = clamp(abs(get_relative_dist(cm, cur_frame_index, bck_frame_index)),
+ int d1 = clamp(abs(get_relative_dist(&cm->seq_params.order_hint_info,
+ cur_frame_index, bck_frame_index)),
0, MAX_FRAME_DISTANCE);
const int order = d0 <= d1;
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index e2001c0..0e7ff5c 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -1640,7 +1640,7 @@
}
#endif
- if (cm->delta_q_present_flag) {
+ if (cm->delta_q_info.delta_q_present_flag) {
for (int i = 0; i < MAX_SEGMENTS; i++) {
const int current_qindex =
av1_get_qindex(&cm->seg, i, xd->current_qindex);
@@ -2194,13 +2194,16 @@
static void setup_cdef(AV1_COMMON *cm, struct aom_read_bit_buffer *rb) {
const int num_planes = av1_num_planes(cm);
+ CdefInfo *const cdef_info = &cm->cdef_info;
+
if (cm->allow_intrabc) return;
- cm->cdef_pri_damping = cm->cdef_sec_damping = aom_rb_read_literal(rb, 2) + 3;
- cm->cdef_bits = aom_rb_read_literal(rb, 2);
- cm->nb_cdef_strengths = 1 << cm->cdef_bits;
- for (int i = 0; i < cm->nb_cdef_strengths; i++) {
- cm->cdef_strengths[i] = aom_rb_read_literal(rb, CDEF_STRENGTH_BITS);
- cm->cdef_uv_strengths[i] =
+ cdef_info->cdef_pri_damping = aom_rb_read_literal(rb, 2) + 3;
+ cdef_info->cdef_sec_damping = cdef_info->cdef_pri_damping;
+ cdef_info->cdef_bits = aom_rb_read_literal(rb, 2);
+ cdef_info->nb_cdef_strengths = 1 << cdef_info->cdef_bits;
+ for (int i = 0; i < cdef_info->nb_cdef_strengths; i++) {
+ cdef_info->cdef_strengths[i] = aom_rb_read_literal(rb, CDEF_STRENGTH_BITS);
+ cdef_info->cdef_uv_strengths[i] =
num_planes > 1 ? aom_rb_read_literal(rb, CDEF_STRENGTH_BITS) : 0;
}
}
@@ -2565,15 +2568,18 @@
cm->single_tile_decoding = 0;
if (cm->large_scale_tile) {
struct loopfilter *lf = &cm->lf;
+ RestorationInfo *const rst_info = cm->rst_info;
+ const CdefInfo *const cdef_info = &cm->cdef_info;
// Figure out single_tile_decoding by loopfilter_level.
const int no_loopfilter = !(lf->filter_level[0] || lf->filter_level[1]);
- const int no_cdef = cm->cdef_bits == 0 && cm->cdef_strengths[0] == 0 &&
- cm->cdef_uv_strengths[0] == 0;
+ const int no_cdef = cdef_info->cdef_bits == 0 &&
+ cdef_info->cdef_strengths[0] == 0 &&
+ cdef_info->cdef_uv_strengths[0] == 0;
const int no_restoration =
- cm->rst_info[0].frame_restoration_type == RESTORE_NONE &&
- cm->rst_info[1].frame_restoration_type == RESTORE_NONE &&
- cm->rst_info[2].frame_restoration_type == RESTORE_NONE;
+ rst_info[0].frame_restoration_type == RESTORE_NONE &&
+ rst_info[1].frame_restoration_type == RESTORE_NONE &&
+ rst_info[2].frame_restoration_type == RESTORE_NONE;
assert(IMPLIES(cm->coded_lossless, no_loopfilter && no_cdef));
assert(IMPLIES(cm->all_lossless, no_restoration));
cm->single_tile_decoding = no_loopfilter && no_cdef && no_restoration;
@@ -4501,23 +4507,23 @@
seq_params->enable_masked_compound = 0;
seq_params->enable_warped_motion = 0;
seq_params->enable_dual_filter = 0;
- seq_params->enable_order_hint = 0;
- seq_params->enable_jnt_comp = 0;
- seq_params->enable_ref_frame_mvs = 0;
+ seq_params->order_hint_info.enable_order_hint = 0;
+ seq_params->order_hint_info.enable_jnt_comp = 0;
+ seq_params->order_hint_info.enable_ref_frame_mvs = 0;
seq_params->force_screen_content_tools = 2; // SELECT_SCREEN_CONTENT_TOOLS
seq_params->force_integer_mv = 2; // SELECT_INTEGER_MV
- seq_params->order_hint_bits_minus_1 = -1;
+ seq_params->order_hint_info.order_hint_bits_minus_1 = -1;
} else {
seq_params->enable_interintra_compound = aom_rb_read_bit(rb);
seq_params->enable_masked_compound = aom_rb_read_bit(rb);
seq_params->enable_warped_motion = aom_rb_read_bit(rb);
seq_params->enable_dual_filter = aom_rb_read_bit(rb);
- seq_params->enable_order_hint = aom_rb_read_bit(rb);
- seq_params->enable_jnt_comp =
- seq_params->enable_order_hint ? aom_rb_read_bit(rb) : 0;
- seq_params->enable_ref_frame_mvs =
- seq_params->enable_order_hint ? aom_rb_read_bit(rb) : 0;
+ seq_params->order_hint_info.enable_order_hint = aom_rb_read_bit(rb);
+ seq_params->order_hint_info.enable_jnt_comp =
+ seq_params->order_hint_info.enable_order_hint ? aom_rb_read_bit(rb) : 0;
+ seq_params->order_hint_info.enable_ref_frame_mvs =
+ seq_params->order_hint_info.enable_order_hint ? aom_rb_read_bit(rb) : 0;
if (aom_rb_read_bit(rb)) {
seq_params->force_screen_content_tools =
@@ -4535,8 +4541,10 @@
} else {
seq_params->force_integer_mv = 2; // SELECT_INTEGER_MV
}
- seq_params->order_hint_bits_minus_1 =
- seq_params->enable_order_hint ? aom_rb_read_literal(rb, 3) : -1;
+ seq_params->order_hint_info.order_hint_bits_minus_1 =
+ seq_params->order_hint_info.enable_order_hint
+ ? aom_rb_read_literal(rb, 3)
+ : -1;
}
seq_params->enable_superres = aom_rb_read_bit(rb);
@@ -4974,8 +4982,8 @@
frame_size_override_flag = frame_is_sframe(cm) ? 1 : aom_rb_read_bit(rb);
- cm->frame_offset =
- aom_rb_read_literal(rb, seq_params->order_hint_bits_minus_1 + 1);
+ cm->frame_offset = aom_rb_read_literal(
+ rb, seq_params->order_hint_info.order_hint_bits_minus_1 + 1);
cm->current_video_frame = cm->frame_offset;
if (!cm->error_resilient_mode && !frame_is_intra_only(cm)) {
@@ -5046,11 +5054,12 @@
if (!frame_is_intra_only(cm) || pbi->refresh_frame_flags != 0xFF) {
// Read all ref frame order hints if error_resilient_mode == 1
- if (cm->error_resilient_mode && seq_params->enable_order_hint) {
+ if (cm->error_resilient_mode &&
+ seq_params->order_hint_info.enable_order_hint) {
for (int ref_idx = 0; ref_idx < REF_FRAMES; ref_idx++) {
// Read order hint from bit stream
- unsigned int frame_offset =
- aom_rb_read_literal(rb, seq_params->order_hint_bits_minus_1 + 1);
+ unsigned int frame_offset = aom_rb_read_literal(
+ rb, seq_params->order_hint_info.order_hint_bits_minus_1 + 1);
// Get buffer index
int buf_idx = cm->ref_frame_map[ref_idx];
assert(buf_idx < FRAME_BUFFERS);
@@ -5111,7 +5120,7 @@
} else if (pbi->need_resync != 1) { /* Skip if need resync */
// Frame refs short signaling is off when error resilient mode is on.
- if (seq_params->enable_order_hint)
+ if (seq_params->order_hint_info.enable_order_hint)
cm->frame_refs_short_signaling = aom_rb_read_bit(rb);
if (cm->frame_refs_short_signaling) {
@@ -5278,10 +5287,10 @@
struct loopfilter *lf = &cm->lf;
lf->filter_level[0] = 0;
lf->filter_level[1] = 0;
- cm->cdef_bits = 0;
- cm->cdef_strengths[0] = 0;
- cm->nb_cdef_strengths = 1;
- cm->cdef_uv_strengths[0] = 0;
+ cm->cdef_info.cdef_bits = 0;
+ cm->cdef_info.cdef_strengths[0] = 0;
+ cm->cdef_info.nb_cdef_strengths = 1;
+ cm->cdef_info.cdef_uv_strengths[0] = 0;
cm->rst_info[0].frame_restoration_type = RESTORE_NONE;
cm->rst_info[1].frame_restoration_type = RESTORE_NONE;
cm->rst_info[2].frame_restoration_type = RESTORE_NONE;
@@ -5306,18 +5315,20 @@
setup_segmentation(cm, rb);
- cm->delta_q_res = 1;
- cm->delta_lf_res = 1;
- cm->delta_lf_present_flag = 0;
- cm->delta_lf_multi = 0;
- cm->delta_q_present_flag = cm->base_qindex > 0 ? aom_rb_read_bit(rb) : 0;
- if (cm->delta_q_present_flag) {
+ cm->delta_q_info.delta_q_res = 1;
+ cm->delta_q_info.delta_lf_res = 1;
+ cm->delta_q_info.delta_lf_present_flag = 0;
+ cm->delta_q_info.delta_lf_multi = 0;
+ cm->delta_q_info.delta_q_present_flag =
+ cm->base_qindex > 0 ? aom_rb_read_bit(rb) : 0;
+ if (cm->delta_q_info.delta_q_present_flag) {
xd->current_qindex = cm->base_qindex;
- cm->delta_q_res = 1 << aom_rb_read_literal(rb, 2);
- if (!cm->allow_intrabc) cm->delta_lf_present_flag = aom_rb_read_bit(rb);
- if (cm->delta_lf_present_flag) {
- cm->delta_lf_res = 1 << aom_rb_read_literal(rb, 2);
- cm->delta_lf_multi = aom_rb_read_bit(rb);
+ cm->delta_q_info.delta_q_res = 1 << aom_rb_read_literal(rb, 2);
+ if (!cm->allow_intrabc)
+ cm->delta_q_info.delta_lf_present_flag = aom_rb_read_bit(rb);
+ if (cm->delta_q_info.delta_lf_present_flag) {
+ cm->delta_q_info.delta_lf_res = 1 << aom_rb_read_literal(rb, 2);
+ cm->delta_q_info.delta_lf_multi = aom_rb_read_bit(rb);
av1_reset_loop_filter_delta(xd, av1_num_planes(cm));
}
}
@@ -5339,9 +5350,9 @@
cm->lf.filter_level[1] = 0;
}
if (cm->coded_lossless || !seq_params->enable_cdef) {
- cm->cdef_bits = 0;
- cm->cdef_strengths[0] = 0;
- cm->cdef_uv_strengths[0] = 0;
+ cm->cdef_info.cdef_bits = 0;
+ cm->cdef_info.cdef_strengths[0] = 0;
+ cm->cdef_info.cdef_uv_strengths[0] = 0;
}
if (cm->all_lossless || !seq_params->enable_restoration) {
cm->rst_info[0].frame_restoration_type = RESTORE_NONE;
@@ -5578,7 +5589,8 @@
cm->rst_info[2].frame_restoration_type != RESTORE_NONE;
const int do_cdef =
!cm->skip_loop_filter && !cm->coded_lossless &&
- (cm->cdef_bits || cm->cdef_strengths[0] || cm->cdef_uv_strengths[0]);
+ (cm->cdef_info.cdef_bits || cm->cdef_info.cdef_strengths[0] ||
+ cm->cdef_info.cdef_uv_strengths[0]);
const int do_superres = av1_superres_scaled(cm);
const int optimized_loop_restoration = !do_cdef && !do_superres;
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index d546936..d8e6a71 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -41,7 +41,7 @@
MB_MODE_INFO *const mbmi = xd->mi[0];
if (cm->coded_lossless) return;
if (cm->allow_intrabc) {
- assert(cm->cdef_bits == 0);
+ assert(cm->cdef_info.cdef_bits == 0);
return;
}
@@ -59,7 +59,7 @@
cm->mi_grid_visible[(mi_row & m) * cm->mi_stride + (mi_col & m)]
->cdef_strength = xd->cdef_preset[index] =
xd->cdef_preset[index] == -1 && !mbmi->skip
- ? aom_read_literal(r, cm->cdef_bits, ACCT_STR)
+ ? aom_read_literal(r, cm->cdef_info.cdef_bits, ACCT_STR)
: xd->cdef_preset[index];
}
@@ -710,15 +710,17 @@
static void read_delta_q_params(AV1_COMMON *const cm, MACROBLOCKD *const xd,
const int mi_row, const int mi_col,
aom_reader *r) {
- if (cm->delta_q_present_flag) {
+ DeltaQInfo *const delta_q_info = &cm->delta_q_info;
+
+ if (delta_q_info->delta_q_present_flag) {
MB_MODE_INFO *const mbmi = xd->mi[0];
- xd->current_qindex +=
- read_delta_qindex(cm, xd, r, mbmi, mi_col, mi_row) * cm->delta_q_res;
+ xd->current_qindex += read_delta_qindex(cm, xd, r, mbmi, mi_col, mi_row) *
+ delta_q_info->delta_q_res;
/* Normative: Clamp to [1,MAXQ] to not interfere with lossless mode */
xd->current_qindex = clamp(xd->current_qindex, 1, MAXQ);
FRAME_CONTEXT *const ec_ctx = xd->tile_ctx;
- if (cm->delta_lf_present_flag) {
- if (cm->delta_lf_multi) {
+ if (delta_q_info->delta_lf_present_flag) {
+ if (delta_q_info->delta_lf_multi) {
const int frame_lf_count =
av1_num_planes(cm) > 1 ? FRAME_LF_COUNT : FRAME_LF_COUNT - 2;
for (int lf_id = 0; lf_id < frame_lf_count; ++lf_id) {
@@ -726,7 +728,7 @@
xd->delta_lf[lf_id] +
read_delta_lflevel(cm, r, ec_ctx->delta_lf_multi_cdf[lf_id], mbmi,
mi_col, mi_row) *
- cm->delta_lf_res;
+ delta_q_info->delta_lf_res;
mbmi->delta_lf[lf_id] = xd->delta_lf[lf_id] =
clamp(tmp_lvl, -MAX_LOOP_FILTER, MAX_LOOP_FILTER);
}
@@ -734,7 +736,7 @@
const int tmp_lvl = xd->delta_lf_from_base +
read_delta_lflevel(cm, r, ec_ctx->delta_lf_cdf,
mbmi, mi_col, mi_row) *
- cm->delta_lf_res;
+ delta_q_info->delta_lf_res;
mbmi->delta_lf_from_base = xd->delta_lf_from_base =
clamp(tmp_lvl, -MAX_LOOP_FILTER, MAX_LOOP_FILTER);
}
@@ -1419,7 +1421,7 @@
}
if (mbmi->comp_group_idx == 0) {
- if (cm->seq_params.enable_jnt_comp) {
+ if (cm->seq_params.order_hint_info.enable_jnt_comp) {
const int comp_index_ctx = get_comp_index_context(cm, xd);
mbmi->compound_idx = aom_read_symbol(
r, ec_ctx->compound_index_cdf[comp_index_ctx], 2, ACCT_STR);
diff --git a/av1/decoder/inspection.c b/av1/decoder/inspection.c
index d5e7289..01819cc 100644
--- a/av1/decoder/inspection.c
+++ b/av1/decoder/inspection.c
@@ -52,8 +52,8 @@
av1_tile_set_col(&tile_info, cm, 0);
fd->tile_mi_cols = tile_info.mi_col_end - tile_info.mi_col_start;
fd->tile_mi_rows = tile_info.mi_row_end - tile_info.mi_row_start;
- fd->delta_q_present_flag = cm->delta_q_present_flag;
- fd->delta_q_res = cm->delta_q_res;
+ fd->delta_q_present_flag = cm->delta_q_info.delta_q_present_flag;
+ fd->delta_q_res = cm->delta_q_info.delta_q_res;
#if CONFIG_ACCOUNTING
fd->accounting = &pbi->accounting;
#endif
@@ -114,10 +114,10 @@
mi->tx_type =
(mi->skip ? 0 : mbmi->txk_type[av1_get_txk_type_index(bsize, r, c)]);
- mi->cdef_level =
- cm->cdef_strengths[mbmi->cdef_strength] / CDEF_SEC_STRENGTHS;
- mi->cdef_strength =
- cm->cdef_strengths[mbmi->cdef_strength] % CDEF_SEC_STRENGTHS;
+ mi->cdef_level = cm->cdef_info.cdef_strengths[mbmi->cdef_strength] /
+ CDEF_SEC_STRENGTHS;
+ mi->cdef_strength = cm->cdef_info.cdef_strengths[mbmi->cdef_strength] %
+ CDEF_SEC_STRENGTHS;
mi->cdef_strength += mi->cdef_strength == 3;
if (mbmi->uv_mode == UV_CFL_PRED) {
mi->cfl_alpha_idx = mbmi->cfl_alpha_idx;
diff --git a/av1/encoder/av1_quantize.c b/av1/encoder/av1_quantize.c
index a0a9260..21ab4db 100644
--- a/av1/encoder/av1_quantize.c
+++ b/av1/encoder/av1_quantize.c
@@ -697,7 +697,7 @@
void av1_set_quantizer(AV1_COMMON *cm, int q) {
// quantizer has to be reinitialized with av1_init_quantizer() if any
// delta_q changes.
- cm->base_qindex = AOMMAX(cm->delta_q_present_flag, q);
+ cm->base_qindex = AOMMAX(cm->delta_q_info.delta_q_present_flag, q);
cm->y_dc_delta_q = 0;
cm->u_dc_delta_q = 0;
cm->u_ac_delta_q = 0;
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index e77e30c..b56e91e 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -315,7 +315,7 @@
int smallval = abs < DELTA_LF_SMALL ? 1 : 0;
FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
- if (cm->delta_lf_multi) {
+ if (cm->delta_q_info.delta_lf_multi) {
assert(lf_id >= 0 && lf_id < (av1_num_planes(cm) > 1 ? FRAME_LF_COUNT
: FRAME_LF_COUNT - 2));
aom_write_symbol(w, AOMMIN(abs, DELTA_LF_SMALL),
@@ -868,10 +868,10 @@
int skip, int mi_col, int mi_row) {
if (cm->coded_lossless || cm->allow_intrabc) {
// Initialize to indicate no CDEF for safety.
- cm->cdef_bits = 0;
- cm->cdef_strengths[0] = 0;
- cm->nb_cdef_strengths = 1;
- cm->cdef_uv_strengths[0] = 0;
+ cm->cdef_info.cdef_bits = 0;
+ cm->cdef_info.cdef_strengths[0] = 0;
+ cm->cdef_info.nb_cdef_strengths = 1;
+ cm->cdef_info.cdef_uv_strengths[0] = 0;
return;
}
@@ -891,7 +891,7 @@
? !!(mi_col & mask) + 2 * !!(mi_row & mask)
: 0;
if (xd->cdef_preset[index] == -1 && !skip) {
- aom_write_literal(w, mbmi->cdef_strength, cm->cdef_bits);
+ aom_write_literal(w, mbmi->cdef_strength, cm->cdef_info.cdef_bits);
xd->cdef_preset[index] = mbmi->cdef_strength;
}
}
@@ -938,7 +938,9 @@
static void write_delta_q_params(AV1_COMP *cpi, const int mi_row,
const int mi_col, int skip, aom_writer *w) {
AV1_COMMON *const cm = &cpi->common;
- if (cm->delta_q_present_flag) {
+ const DeltaQInfo *const delta_q_info = &cm->delta_q_info;
+
+ if (delta_q_info->delta_q_present_flag) {
MACROBLOCK *const x = &cpi->td.mb;
MACROBLOCKD *const xd = &x->e_mbd;
const MB_MODE_INFO *const mbmi = xd->mi[0];
@@ -951,24 +953,25 @@
super_block_upper_left) {
assert(mbmi->current_qindex > 0);
const int reduced_delta_qindex =
- (mbmi->current_qindex - xd->current_qindex) / cm->delta_q_res;
+ (mbmi->current_qindex - xd->current_qindex) /
+ delta_q_info->delta_q_res;
write_delta_qindex(xd, reduced_delta_qindex, w);
xd->current_qindex = mbmi->current_qindex;
- if (cm->delta_lf_present_flag) {
- if (cm->delta_lf_multi) {
+ if (delta_q_info->delta_lf_present_flag) {
+ if (delta_q_info->delta_lf_multi) {
const int frame_lf_count =
av1_num_planes(cm) > 1 ? FRAME_LF_COUNT : FRAME_LF_COUNT - 2;
for (int lf_id = 0; lf_id < frame_lf_count; ++lf_id) {
int reduced_delta_lflevel =
(mbmi->delta_lf[lf_id] - xd->delta_lf[lf_id]) /
- cm->delta_lf_res;
+ delta_q_info->delta_lf_res;
write_delta_lflevel(cm, xd, lf_id, reduced_delta_lflevel, w);
xd->delta_lf[lf_id] = mbmi->delta_lf[lf_id];
}
} else {
int reduced_delta_lflevel =
(mbmi->delta_lf_from_base - xd->delta_lf_from_base) /
- cm->delta_lf_res;
+ delta_q_info->delta_lf_res;
write_delta_lflevel(cm, xd, -1, reduced_delta_lflevel, w);
xd->delta_lf_from_base = mbmi->delta_lf_from_base;
}
@@ -1148,7 +1151,7 @@
if (mbmi->compound_idx)
assert(mbmi->interinter_comp.type == COMPOUND_AVERAGE);
- if (cm->seq_params.enable_jnt_comp) {
+ if (cm->seq_params.order_hint_info.enable_jnt_comp) {
const int comp_index_ctx = get_comp_index_context(cm, xd);
aom_write_symbol(w, mbmi->compound_idx,
ec_ctx->compound_index_cdf[comp_index_ctx], 2);
@@ -1685,9 +1688,9 @@
av1_zero_above_context(cm, xd, mi_col_start, mi_col_end, tile->tile_row);
av1_init_above_context(cm, xd, tile->tile_row);
- if (cpi->common.delta_q_present_flag) {
+ if (cpi->common.delta_q_info.delta_q_present_flag) {
xd->current_qindex = cpi->common.base_qindex;
- if (cpi->common.delta_lf_present_flag) {
+ if (cpi->common.delta_q_info.delta_lf_present_flag) {
av1_reset_loop_filter_delta(xd, av1_num_planes(cm));
}
}
@@ -1977,13 +1980,15 @@
if (cm->allow_intrabc) return;
const int num_planes = av1_num_planes(cm);
int i;
- aom_wb_write_literal(wb, cm->cdef_pri_damping - 3, 2);
- assert(cm->cdef_pri_damping == cm->cdef_sec_damping);
- aom_wb_write_literal(wb, cm->cdef_bits, 2);
- for (i = 0; i < cm->nb_cdef_strengths; i++) {
- aom_wb_write_literal(wb, cm->cdef_strengths[i], CDEF_STRENGTH_BITS);
+ aom_wb_write_literal(wb, cm->cdef_info.cdef_pri_damping - 3, 2);
+ assert(cm->cdef_info.cdef_pri_damping == cm->cdef_info.cdef_sec_damping);
+ aom_wb_write_literal(wb, cm->cdef_info.cdef_bits, 2);
+ for (i = 0; i < cm->cdef_info.nb_cdef_strengths; i++) {
+ aom_wb_write_literal(wb, cm->cdef_info.cdef_strengths[i],
+ CDEF_STRENGTH_BITS);
if (num_planes > 1)
- aom_wb_write_literal(wb, cm->cdef_uv_strengths[i], CDEF_STRENGTH_BITS);
+ aom_wb_write_literal(wb, cm->cdef_info.cdef_uv_strengths[i],
+ CDEF_STRENGTH_BITS);
}
}
@@ -2716,11 +2721,11 @@
aom_wb_write_bit(wb, seq_params->enable_warped_motion);
aom_wb_write_bit(wb, seq_params->enable_dual_filter);
- aom_wb_write_bit(wb, seq_params->enable_order_hint);
+ aom_wb_write_bit(wb, seq_params->order_hint_info.enable_order_hint);
- if (seq_params->enable_order_hint) {
- aom_wb_write_bit(wb, seq_params->enable_jnt_comp);
- aom_wb_write_bit(wb, seq_params->enable_ref_frame_mvs);
+ if (seq_params->order_hint_info.enable_order_hint) {
+ aom_wb_write_bit(wb, seq_params->order_hint_info.enable_jnt_comp);
+ aom_wb_write_bit(wb, seq_params->order_hint_info.enable_ref_frame_mvs);
}
if (seq_params->force_screen_content_tools == 2) {
aom_wb_write_bit(wb, 1);
@@ -2738,8 +2743,9 @@
} else {
assert(seq_params->force_integer_mv == 2);
}
- if (seq_params->enable_order_hint)
- aom_wb_write_literal(wb, seq_params->order_hint_bits_minus_1, 3);
+ if (seq_params->order_hint_info.enable_order_hint)
+ aom_wb_write_literal(
+ wb, seq_params->order_hint_info.order_hint_bits_minus_1, 3);
}
aom_wb_write_bit(wb, seq_params->enable_superres);
@@ -3023,9 +3029,10 @@
cm->height != seq_params->max_frame_height);
if (!frame_is_sframe(cm)) aom_wb_write_bit(wb, frame_size_override_flag);
- if (seq_params->enable_order_hint)
- aom_wb_write_literal(wb, cm->frame_offset,
- seq_params->order_hint_bits_minus_1 + 1);
+ if (seq_params->order_hint_info.enable_order_hint)
+ aom_wb_write_literal(
+ wb, cm->frame_offset,
+ seq_params->order_hint_info.order_hint_bits_minus_1 + 1);
if (!cm->error_resilient_mode && !frame_is_intra_only(cm)) {
aom_wb_write_literal(wb, cm->primary_ref_frame, PRIMARY_REF_BITS);
@@ -3110,7 +3117,8 @@
if (!frame_is_intra_only(cm) || cpi->refresh_frame_mask != 0xFF) {
// Write all ref frame order hints if error_resilient_mode == 1
- if (cm->error_resilient_mode && seq_params->enable_order_hint) {
+ if (cm->error_resilient_mode &&
+ seq_params->order_hint_info.enable_order_hint) {
RefCntBuffer *const frame_bufs = cm->buffer_pool->frame_bufs;
for (int ref_idx = 0; ref_idx < REF_FRAMES; ref_idx++) {
// Get buffer index
@@ -3118,8 +3126,9 @@
assert(buf_idx >= 0 && buf_idx < FRAME_BUFFERS);
// Write order hint to bit stream
- aom_wb_write_literal(wb, frame_bufs[buf_idx].cur_frame_offset,
- seq_params->order_hint_bits_minus_1 + 1);
+ aom_wb_write_literal(
+ wb, frame_bufs[buf_idx].cur_frame_offset,
+ seq_params->order_hint_info.order_hint_bits_minus_1 + 1);
}
}
}
@@ -3144,7 +3153,8 @@
// automatically.
#define FRAME_REFS_SHORT_SIGNALING 0
#if FRAME_REFS_SHORT_SIGNALING
- cm->frame_refs_short_signaling = seq_params->enable_order_hint;
+ cm->frame_refs_short_signaling =
+ seq_params->order_hint_info.enable_order_hint;
#endif // FRAME_REFS_SHORT_SIGNALING
if (cm->frame_refs_short_signaling) {
@@ -3155,7 +3165,7 @@
check_frame_refs_short_signaling(cpi);
}
- if (seq_params->enable_order_hint)
+ if (seq_params->order_hint_info.enable_order_hint)
aom_wb_write_bit(wb, cm->frame_refs_short_signaling);
if (cm->frame_refs_short_signaling) {
@@ -3223,19 +3233,20 @@
encode_quantization(cm, wb);
encode_segmentation(cm, xd, wb);
- if (cm->delta_q_present_flag) assert(cm->base_qindex > 0);
+ const DeltaQInfo *const delta_q_info = &cm->delta_q_info;
+ if (delta_q_info->delta_q_present_flag) assert(cm->base_qindex > 0);
if (cm->base_qindex > 0) {
- aom_wb_write_bit(wb, cm->delta_q_present_flag);
- if (cm->delta_q_present_flag) {
- aom_wb_write_literal(wb, get_msb(cm->delta_q_res), 2);
+ aom_wb_write_bit(wb, delta_q_info->delta_q_present_flag);
+ if (delta_q_info->delta_q_present_flag) {
+ aom_wb_write_literal(wb, get_msb(delta_q_info->delta_q_res), 2);
xd->current_qindex = cm->base_qindex;
if (cm->allow_intrabc)
- assert(cm->delta_lf_present_flag == 0);
+ assert(delta_q_info->delta_lf_present_flag == 0);
else
- aom_wb_write_bit(wb, cm->delta_lf_present_flag);
- if (cm->delta_lf_present_flag) {
- aom_wb_write_literal(wb, get_msb(cm->delta_lf_res), 2);
- aom_wb_write_bit(wb, cm->delta_lf_multi);
+ aom_wb_write_bit(wb, delta_q_info->delta_lf_present_flag);
+ if (delta_q_info->delta_lf_present_flag) {
+ aom_wb_write_literal(wb, get_msb(delta_q_info->delta_lf_res), 2);
+ aom_wb_write_bit(wb, delta_q_info->delta_lf_multi);
av1_reset_loop_filter_delta(xd, av1_num_planes(cm));
}
}
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index c8ff326..cf250ce 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -925,12 +925,13 @@
}
}
- if (cm->delta_q_present_flag &&
+ const DeltaQInfo *const delta_q_info = &cm->delta_q_info;
+ if (delta_q_info->delta_q_present_flag &&
(bsize != cm->seq_params.sb_size || !mbmi->skip) &&
super_block_upper_left) {
#if CONFIG_ENTROPY_STATS
const int dq =
- (mbmi->current_qindex - xd->current_qindex) / cm->delta_q_res;
+ (mbmi->current_qindex - xd->current_qindex) / delta_q_info->delta_q_res;
const int absdq = abs(dq);
for (int i = 0; i < AOMMIN(absdq, DELTA_Q_SMALL); ++i) {
td->counts->delta_q[i][1]++;
@@ -938,14 +939,14 @@
if (absdq < DELTA_Q_SMALL) td->counts->delta_q[absdq][0]++;
#endif
xd->current_qindex = mbmi->current_qindex;
- if (cm->delta_lf_present_flag) {
- if (cm->delta_lf_multi) {
+ if (delta_q_info->delta_lf_present_flag) {
+ if (delta_q_info->delta_lf_multi) {
const int frame_lf_count =
av1_num_planes(cm) > 1 ? FRAME_LF_COUNT : FRAME_LF_COUNT - 2;
for (int lf_id = 0; lf_id < frame_lf_count; ++lf_id) {
#if CONFIG_ENTROPY_STATS
- const int delta_lf =
- (mbmi->delta_lf[lf_id] - xd->delta_lf[lf_id]) / cm->delta_lf_res;
+ const int delta_lf = (mbmi->delta_lf[lf_id] - xd->delta_lf[lf_id]) /
+ delta_q_info->delta_lf_res;
const int abs_delta_lf = abs(delta_lf);
for (int i = 0; i < AOMMIN(abs_delta_lf, DELTA_LF_SMALL); ++i) {
td->counts->delta_lf_multi[lf_id][i][1]++;
@@ -959,7 +960,7 @@
#if CONFIG_ENTROPY_STATS
const int delta_lf =
(mbmi->delta_lf_from_base - xd->delta_lf_from_base) /
- cm->delta_lf_res;
+ delta_q_info->delta_lf_res;
const int abs_delta_lf = abs(delta_lf);
for (int i = 0; i < AOMMIN(abs_delta_lf, DELTA_LF_SMALL); ++i) {
td->counts->delta_lf[i][1]++;
@@ -1471,7 +1472,7 @@
if (!dry_run) {
if (bsize == cpi->common.seq_params.sb_size && mbmi->skip == 1 &&
- cpi->common.delta_lf_present_flag) {
+ cpi->common.delta_q_info.delta_lf_present_flag) {
const int frame_lf_count = av1_num_planes(&cpi->common) > 1
? FRAME_LF_COUNT
: FRAME_LF_COUNT - 2;
@@ -4839,6 +4840,7 @@
int mi_col, int num_planes) {
AV1_COMMON *const cm = &cpi->common;
MACROBLOCKD *const xd = &x->e_mbd;
+ const DeltaQInfo *const delta_q_info = &cm->delta_q_info;
const BLOCK_SIZE sb_size = cm->seq_params.sb_size;
const int mib_size = cm->seq_params.mib_size;
@@ -4857,11 +4859,13 @@
x->sb_energy_level = block_var_level;
offset_qindex = av1_compute_deltaq_from_energy_level(cpi, block_var_level);
}
- const int qmask = ~(cm->delta_q_res - 1);
- int current_qindex = clamp(cm->base_qindex + offset_qindex, cm->delta_q_res,
- 256 - cm->delta_q_res);
+ const int qmask = ~(delta_q_info->delta_q_res - 1);
+ int current_qindex =
+ clamp(cm->base_qindex + offset_qindex, delta_q_info->delta_q_res,
+ 256 - delta_q_info->delta_q_res);
current_qindex =
- ((current_qindex - cm->base_qindex + cm->delta_q_res / 2) & qmask) +
+ ((current_qindex - cm->base_qindex + delta_q_info->delta_q_res / 2) &
+ qmask) +
cm->base_qindex;
assert(current_qindex > 0);
@@ -4870,9 +4874,9 @@
xd->mi[0]->current_qindex = current_qindex;
av1_init_plane_quantizers(cpi, x, xd->mi[0]->segment_id);
if (cpi->oxcf.deltaq_mode == DELTA_Q_LF) {
- const int lfmask = ~(cm->delta_lf_res - 1);
+ const int lfmask = ~(delta_q_info->delta_lf_res - 1);
const int delta_lf_from_base =
- ((offset_qindex / 2 + cm->delta_lf_res / 2) & lfmask);
+ ((offset_qindex / 2 + delta_q_info->delta_lf_res / 2) & lfmask);
// pre-set the delta lf for loop filter. Note that this value is set
// before mi is assigned for each block in current superblock
@@ -4984,8 +4988,9 @@
// Reset delta for every tile
if (mi_row == tile_info->mi_row_start) {
- if (cm->delta_q_present_flag) xd->current_qindex = cm->base_qindex;
- if (cm->delta_lf_present_flag) {
+ if (cm->delta_q_info.delta_q_present_flag)
+ xd->current_qindex = cm->base_qindex;
+ if (cm->delta_q_info.delta_lf_present_flag) {
av1_reset_loop_filter_delta(xd, av1_num_planes(cm));
}
}
@@ -5036,7 +5041,7 @@
xd->cur_frame_force_integer_mv = cm->cur_frame_force_integer_mv;
x->sb_energy_level = 0;
- if (cm->delta_q_present_flag)
+ if (cm->delta_q_info.delta_q_present_flag)
setup_delta_q(cpi, x, tile_info, mi_row, mi_col, num_planes);
int dummy_rate;
@@ -5442,7 +5447,8 @@
earliest_ref_frames[0] = ref_frame;
earliest_buf_idxes[0] = buf_idx;
} else {
- if (get_relative_dist(cm, ref_offset, min_ref_offset) < 0) {
+ if (get_relative_dist(&cm->seq_params.order_hint_info, ref_offset,
+ min_ref_offset) < 0) {
second_min_ref_offset = min_ref_offset;
earliest_ref_frames[1] = earliest_ref_frames[0];
earliest_buf_idxes[1] = earliest_buf_idxes[0];
@@ -5451,8 +5457,8 @@
earliest_ref_frames[0] = ref_frame;
earliest_buf_idxes[0] = buf_idx;
} else if (second_min_ref_offset == UINT_MAX ||
- get_relative_dist(cm, ref_offset, second_min_ref_offset) <
- 0) {
+ get_relative_dist(&cm->seq_params.order_hint_info,
+ ref_offset, second_min_ref_offset) < 0) {
second_min_ref_offset = ref_offset;
earliest_ref_frames[1] = ref_frame;
earliest_buf_idxes[1] = buf_idx;
@@ -5505,7 +5511,8 @@
const int ref_offset =
cm->buffer_pool->frame_bufs[buf_idx].cur_frame_offset;
- if (get_relative_dist(cm, ref_offset, (int)cm->frame_offset) > 0) {
+ if (get_relative_dist(&cm->seq_params.order_hint_info, ref_offset,
+ (int)cm->frame_offset) > 0) {
one_sided_refs = 0; // bwd reference
break;
}
@@ -5537,8 +5544,10 @@
const int cur_offset = (int)cm->frame_offset;
int ref_offset[2];
get_skip_mode_ref_offsets(cm, ref_offset);
- const int cur_to_ref0 = get_relative_dist(cm, cur_offset, ref_offset[0]);
- const int cur_to_ref1 = abs(get_relative_dist(cm, cur_offset, ref_offset[1]));
+ const int cur_to_ref0 = get_relative_dist(&cm->seq_params.order_hint_info,
+ cur_offset, ref_offset[0]);
+ const int cur_to_ref1 = abs(get_relative_dist(&cm->seq_params.order_hint_info,
+ cur_offset, ref_offset[1]));
if (abs(cur_to_ref0 - cur_to_ref1) > 1) return 0;
// High Latency: Turn off skip mode if all refs are fwd.
@@ -5567,7 +5576,8 @@
if ((ref_frame == LAST3_FRAME || ref_frame == LAST2_FRAME) &&
cm->global_motion[GOLDEN_FRAME].wmtype != IDENTITY) {
return get_relative_dist(
- cm, cm->cur_frame->ref_frame_offset[ref_frame - LAST_FRAME],
+ &cm->seq_params.order_hint_info,
+ cm->cur_frame->ref_frame_offset[ref_frame - LAST_FRAME],
cm->cur_frame->ref_frame_offset[GOLDEN_FRAME - LAST_FRAME]) <= 0;
}
return 0;
@@ -5704,15 +5714,15 @@
cm->tx_mode = select_tx_mode(cpi);
// Fix delta q resolution for the moment
- cm->delta_q_res = DEFAULT_DELTA_Q_RES;
+ cm->delta_q_info.delta_q_res = DEFAULT_DELTA_Q_RES;
// Set delta_q_present_flag before it is used for the first time
- cm->delta_lf_res = DEFAULT_DELTA_LF_RES;
- cm->delta_q_present_flag = cpi->oxcf.deltaq_mode != NO_DELTA_Q;
- cm->delta_lf_present_flag = cpi->oxcf.deltaq_mode == DELTA_Q_LF;
- cm->delta_lf_multi = DEFAULT_DELTA_LF_MULTI;
+ cm->delta_q_info.delta_lf_res = DEFAULT_DELTA_LF_RES;
+ cm->delta_q_info.delta_q_present_flag = cpi->oxcf.deltaq_mode != NO_DELTA_Q;
+ cm->delta_q_info.delta_lf_present_flag = cpi->oxcf.deltaq_mode == DELTA_Q_LF;
+ cm->delta_q_info.delta_lf_multi = DEFAULT_DELTA_LF_MULTI;
// update delta_q_present_flag and delta_lf_present_flag based on base_qindex
- cm->delta_q_present_flag &= cm->base_qindex > 0;
- cm->delta_lf_present_flag &= cm->base_qindex > 0;
+ cm->delta_q_info.delta_q_present_flag &= cm->base_qindex > 0;
+ cm->delta_q_info.delta_lf_present_flag &= cm->base_qindex > 0;
if (cpi->twopass.gf_group.index &&
cpi->twopass.gf_group.index < MAX_LAG_BUFFERS &&
@@ -5941,7 +5951,7 @@
// If intrabc is allowed but never selected, reset the allow_intrabc flag.
if (cm->allow_intrabc && !cpi->intrabc_used) cm->allow_intrabc = 0;
- if (cm->allow_intrabc) cm->delta_lf_present_flag = 0;
+ if (cm->allow_intrabc) cm->delta_q_info.delta_lf_present_flag = 0;
}
void av1_encode_frame(AV1_COMP *cpi) {
@@ -5962,7 +5972,8 @@
} else {
cm->frame_offset = cm->current_video_frame;
}
- cm->frame_offset %= (1 << (cm->seq_params.order_hint_bits_minus_1 + 1));
+ cm->frame_offset %=
+ (1 << (cm->seq_params.order_hint_info.order_hint_bits_minus_1 + 1));
// Make sure segment_id is no larger than last_active_segid.
if (cm->seg.enabled && cm->seg.update_map) {
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 432ae5c..54e8437 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -1079,22 +1079,26 @@
seq->reduced_still_picture_hdr &= !oxcf->full_still_picture_hdr;
seq->force_screen_content_tools = 2;
seq->force_integer_mv = 2;
- seq->enable_order_hint = oxcf->enable_order_hint;
+ seq->order_hint_info.enable_order_hint = oxcf->enable_order_hint;
seq->frame_id_numbers_present_flag = oxcf->large_scale_tile;
if (seq->still_picture && seq->reduced_still_picture_hdr) {
- seq->enable_order_hint = 0;
+ seq->order_hint_info.enable_order_hint = 0;
seq->frame_id_numbers_present_flag = 0;
seq->force_screen_content_tools = 2;
seq->force_integer_mv = 2;
}
- seq->order_hint_bits_minus_1 =
- seq->enable_order_hint ? DEFAULT_EXPLICIT_ORDER_HINT_BITS - 1 : -1;
+ seq->order_hint_info.order_hint_bits_minus_1 =
+ seq->order_hint_info.enable_order_hint
+ ? DEFAULT_EXPLICIT_ORDER_HINT_BITS - 1
+ : -1;
seq->enable_dual_filter = oxcf->enable_dual_filter;
- seq->enable_jnt_comp = oxcf->enable_jnt_comp;
- seq->enable_jnt_comp &= seq->enable_order_hint;
- seq->enable_ref_frame_mvs = oxcf->enable_ref_frame_mvs;
- seq->enable_ref_frame_mvs &= seq->enable_order_hint;
+ seq->order_hint_info.enable_jnt_comp = oxcf->enable_jnt_comp;
+ seq->order_hint_info.enable_jnt_comp &=
+ seq->order_hint_info.enable_order_hint;
+ seq->order_hint_info.enable_ref_frame_mvs = oxcf->enable_ref_frame_mvs;
+ seq->order_hint_info.enable_ref_frame_mvs &=
+ seq->order_hint_info.enable_order_hint;
seq->enable_superres = oxcf->enable_superres;
seq->enable_cdef = oxcf->enable_cdef;
seq->enable_restoration = oxcf->enable_restoration;
@@ -4401,10 +4405,10 @@
av1_loop_restoration_save_boundary_lines(cm->frame_to_show, cm, 0);
if (no_cdef) {
- cm->cdef_bits = 0;
- cm->cdef_strengths[0] = 0;
- cm->nb_cdef_strengths = 1;
- cm->cdef_uv_strengths[0] = 0;
+ cm->cdef_info.cdef_bits = 0;
+ cm->cdef_info.cdef_strengths[0] = 0;
+ cm->cdef_info.nb_cdef_strengths = 1;
+ cm->cdef_info.cdef_uv_strengths[0] = 0;
} else {
// Find CDEF parameters
av1_cdef_search(cm->frame_to_show, cpi->source, cm, xd,
@@ -5254,10 +5258,10 @@
} else {
cm->lf.filter_level[0] = 0;
cm->lf.filter_level[1] = 0;
- cm->cdef_bits = 0;
- cm->cdef_strengths[0] = 0;
- cm->nb_cdef_strengths = 1;
- cm->cdef_uv_strengths[0] = 0;
+ cm->cdef_info.cdef_bits = 0;
+ cm->cdef_info.cdef_strengths[0] = 0;
+ cm->cdef_info.nb_cdef_strengths = 1;
+ cm->cdef_info.cdef_uv_strengths[0] = 0;
cm->rst_info[0].frame_restoration_type = RESTORE_NONE;
cm->rst_info[1].frame_restoration_type = RESTORE_NONE;
cm->rst_info[2].frame_restoration_type = RESTORE_NONE;
diff --git a/av1/encoder/ethread.c b/av1/encoder/ethread.c
index f76269a..a3fb93e 100644
--- a/av1/encoder/ethread.c
+++ b/av1/encoder/ethread.c
@@ -53,7 +53,7 @@
mbmi->delta_lf[lf_id] = xd->delta_lf[lf_id];
mbmi->delta_lf_from_base = xd->delta_lf_from_base;
} else {
- if (cm->delta_lf_multi) {
+ if (cm->delta_q_info.delta_lf_multi) {
for (int lf_id = 0; lf_id < frame_lf_count; ++lf_id)
xd->delta_lf[lf_id] = mbmi->delta_lf[lf_id];
} else {
@@ -680,6 +680,6 @@
prepare_enc_workers(cpi, enc_row_mt_worker_hook, num_workers);
launch_enc_workers(cpi, num_workers);
sync_enc_workers(cpi, num_workers);
- if (cm->delta_lf_present_flag) update_delta_lf_for_row_mt(cpi);
+ if (cm->delta_q_info.delta_lf_present_flag) update_delta_lf_for_row_mt(cpi);
accumulate_counters_enc_workers(cpi, num_workers);
}
diff --git a/av1/encoder/pickcdef.c b/av1/encoder/pickcdef.c
index 6d154a7..fb07056 100644
--- a/av1/encoder/pickcdef.c
+++ b/av1/encoder/pickcdef.c
@@ -281,6 +281,7 @@
void av1_cdef_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
AV1_COMMON *cm, MACROBLOCKD *xd, int fast) {
+ CdefInfo *const cdef_info = &cm->cdef_info;
int r, c;
int fbr, fbc;
uint16_t *src[3];
@@ -475,23 +476,23 @@
best_tot_mse = tot_mse;
nb_strength_bits = i;
for (j = 0; j < 1 << nb_strength_bits; j++) {
- cm->cdef_strengths[j] = best_lev0[j];
- cm->cdef_uv_strengths[j] = best_lev1[j];
+ cdef_info->cdef_strengths[j] = best_lev0[j];
+ cdef_info->cdef_uv_strengths[j] = best_lev1[j];
}
}
}
nb_strengths = 1 << nb_strength_bits;
- cm->cdef_bits = nb_strength_bits;
- cm->nb_cdef_strengths = nb_strengths;
+ cdef_info->cdef_bits = nb_strength_bits;
+ cdef_info->nb_cdef_strengths = nb_strengths;
for (i = 0; i < sb_count; i++) {
int gi;
int best_gi;
uint64_t best_mse = (uint64_t)1 << 63;
best_gi = 0;
- for (gi = 0; gi < cm->nb_cdef_strengths; gi++) {
- uint64_t curr = mse[0][i][cm->cdef_strengths[gi]];
- if (num_planes >= 3) curr += mse[1][i][cm->cdef_uv_strengths[gi]];
+ for (gi = 0; gi < cdef_info->nb_cdef_strengths; gi++) {
+ uint64_t curr = mse[0][i][cdef_info->cdef_strengths[gi]];
+ if (num_planes >= 3) curr += mse[1][i][cdef_info->cdef_uv_strengths[gi]];
if (curr < best_mse) {
best_gi = gi;
best_mse = curr;
@@ -503,18 +504,18 @@
if (fast) {
for (int j = 0; j < nb_strengths; j++) {
- cm->cdef_strengths[j] =
- priconv[cm->cdef_strengths[j] / CDEF_SEC_STRENGTHS] *
+ cdef_info->cdef_strengths[j] =
+ priconv[cm->cdef_info.cdef_strengths[j] / CDEF_SEC_STRENGTHS] *
CDEF_SEC_STRENGTHS +
- (cm->cdef_strengths[j] % CDEF_SEC_STRENGTHS);
- cm->cdef_uv_strengths[j] =
- priconv[cm->cdef_uv_strengths[j] / CDEF_SEC_STRENGTHS] *
+ (cdef_info->cdef_strengths[j] % CDEF_SEC_STRENGTHS);
+ cdef_info->cdef_uv_strengths[j] =
+ priconv[cdef_info->cdef_uv_strengths[j] / CDEF_SEC_STRENGTHS] *
CDEF_SEC_STRENGTHS +
- (cm->cdef_uv_strengths[j] % CDEF_SEC_STRENGTHS);
+ (cdef_info->cdef_uv_strengths[j] % CDEF_SEC_STRENGTHS);
}
}
- cm->cdef_pri_damping = pri_damping;
- cm->cdef_sec_damping = sec_damping;
+ cdef_info->cdef_pri_damping = pri_damping;
+ cdef_info->cdef_sec_damping = sec_damping;
aom_free(mse[0]);
aom_free(mse[1]);
for (pli = 0; pli < num_planes; pli++) {
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 733072f..96b8763 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -9611,7 +9611,8 @@
inter_mode_info mode_info[MAX_REF_MV_SERCH];
int comp_idx;
- const int search_jnt_comp = is_comp_pred & cm->seq_params.enable_jnt_comp &
+ const int search_jnt_comp = is_comp_pred &
+ cm->seq_params.order_hint_info.enable_jnt_comp &
(mbmi->mode != GLOBAL_GLOBALMV) &
(cpi->sf.use_jnt_comp_flag != JNT_COMP_DISABLED);
@@ -10962,6 +10963,7 @@
const SPEED_FEATURES *const sf = &cpi->sf;
const AV1_COMMON *const cm = &cpi->common;
const struct segmentation *const seg = &cm->seg;
+ const OrderHintInfo *const order_hint_info = &cm->seq_params.order_hint_info;
const MACROBLOCKD *const xd = &x->e_mbd;
const MB_MODE_INFO *const mbmi = xd->mi[0];
const unsigned char segment_id = mbmi->segment_id;
@@ -11060,12 +11062,14 @@
if (sf->selective_ref_frame >= 3 || x->cb_partition_scan) {
if (ref_frame[0] == ALTREF2_FRAME || ref_frame[1] == ALTREF2_FRAME)
if (get_relative_dist(
- cm, cm->cur_frame->ref_frame_offset[ALTREF2_FRAME - LAST_FRAME],
+ order_hint_info,
+ cm->cur_frame->ref_frame_offset[ALTREF2_FRAME - LAST_FRAME],
cm->frame_offset) < 0)
return 1;
if (ref_frame[0] == BWDREF_FRAME || ref_frame[1] == BWDREF_FRAME)
if (get_relative_dist(
- cm, cm->cur_frame->ref_frame_offset[BWDREF_FRAME - LAST_FRAME],
+ order_hint_info,
+ cm->cur_frame->ref_frame_offset[BWDREF_FRAME - LAST_FRAME],
cm->frame_offset) < 0)
return 1;
}
@@ -11074,13 +11078,15 @@
(sf->selective_ref_frame == 1 && comp_pred)) {
if (ref_frame[0] == LAST3_FRAME || ref_frame[1] == LAST3_FRAME)
if (get_relative_dist(
- cm, cm->cur_frame->ref_frame_offset[LAST3_FRAME - LAST_FRAME],
+ order_hint_info,
+ cm->cur_frame->ref_frame_offset[LAST3_FRAME - LAST_FRAME],
cm->cur_frame->ref_frame_offset[GOLDEN_FRAME - LAST_FRAME]) <=
0)
return 1;
if (ref_frame[0] == LAST2_FRAME || ref_frame[1] == LAST2_FRAME)
if (get_relative_dist(
- cm, cm->cur_frame->ref_frame_offset[LAST2_FRAME - LAST_FRAME],
+ order_hint_info,
+ cm->cur_frame->ref_frame_offset[LAST2_FRAME - LAST_FRAME],
cm->cur_frame->ref_frame_offset[GOLDEN_FRAME - LAST_FRAME]) <=
0)
return 1;
@@ -11095,10 +11101,14 @@
assert(buf_idx >= 0);
ref_offsets[i] = cm->buffer_pool->frame_bufs[buf_idx].cur_frame_offset;
}
- if ((get_relative_dist(cm, ref_offsets[0], cm->frame_offset) <= 0 &&
- get_relative_dist(cm, ref_offsets[1], cm->frame_offset) <= 0) ||
- (get_relative_dist(cm, ref_offsets[0], cm->frame_offset) > 0 &&
- get_relative_dist(cm, ref_offsets[1], cm->frame_offset) > 0))
+ if ((get_relative_dist(order_hint_info, ref_offsets[0], cm->frame_offset) <=
+ 0 &&
+ get_relative_dist(order_hint_info, ref_offsets[1], cm->frame_offset) <=
+ 0) ||
+ (get_relative_dist(order_hint_info, ref_offsets[0], cm->frame_offset) >
+ 0 &&
+ get_relative_dist(order_hint_info, ref_offsets[1], cm->frame_offset) >
+ 0))
return 1;
}