Move code about CDEF_PICK_FROM_Q to seperate func
Change-Id: I0ca7aa79f1403bd6fe0e56a319eeb17c871b9837
diff --git a/av1/encoder/pickcdef.c b/av1/encoder/pickcdef.c
index 780fe02..2ad75a1 100644
--- a/av1/encoder/pickcdef.c
+++ b/av1/encoder/pickcdef.c
@@ -293,64 +293,67 @@
return 1;
}
+static void pick_cdef_from_qp(AV1_COMMON *const cm) {
+ const int bd = cm->seq_params.bit_depth;
+ const int q = av1_ac_quant_QTX(cm->base_qindex, 0, bd) >> (bd - 8);
+ CdefInfo *const cdef_info = &cm->cdef_info;
+ cdef_info->cdef_bits = 0;
+ cdef_info->nb_cdef_strengths = 1;
+ cdef_info->cdef_pri_damping = 3 + (cm->base_qindex >> 6);
+ cdef_info->cdef_sec_damping = 3 + (cm->base_qindex >> 6);
+
+ int predicted_y_f1 = 0;
+ int predicted_y_f2 = 0;
+ int predicted_uv_f1 = 0;
+ int predicted_uv_f2 = 0;
+ aom_clear_system_state();
+ if (!frame_is_intra_only(cm)) {
+ predicted_y_f1 = clamp((int)roundf(-q * q * 0.00000235939456f +
+ q * 0.0068615186f + 0.02709886f),
+ 0, 15);
+ predicted_y_f2 = clamp((int)roundf(-q * q * 0.000000576297339f +
+ q * 0.00139933452f + 0.03831067f),
+ 0, 3);
+ predicted_uv_f1 = clamp((int)roundf(-q * q * 0.000000709506878f +
+ q * 0.00346288458f + 0.00887099f),
+ 0, 15);
+ predicted_uv_f2 = clamp((int)roundf(q * q * 0.000000238740853f +
+ q * 0.000282235851f + 0.05576307f),
+ 0, 3);
+ } else {
+ predicted_y_f1 = clamp(
+ (int)roundf(q * q * 0.00000337319739f + q * 0.0080705937f + 0.0187634f),
+ 0, 15);
+ predicted_y_f2 = clamp((int)roundf(-q * q * -0.00000291673427f +
+ q * 0.00277986238f + 0.0079405f),
+ 0, 3);
+ predicted_uv_f1 = clamp((int)roundf(-q * q * 0.0000130790995f +
+ q * 0.0128924046f - 0.00748388f),
+ 0, 15);
+ predicted_uv_f2 = clamp((int)roundf(q * q * 0.00000326517829f +
+ q * 0.000355201832f + 0.00228092f),
+ 0, 3);
+ }
+ cdef_info->cdef_strengths[0] =
+ predicted_y_f1 * CDEF_SEC_STRENGTHS + predicted_y_f2;
+ cdef_info->cdef_uv_strengths[0] =
+ predicted_uv_f1 * CDEF_SEC_STRENGTHS + predicted_uv_f2;
+
+ const int nvfb = (cm->mi_rows + MI_SIZE_64X64 - 1) / MI_SIZE_64X64;
+ const int nhfb = (cm->mi_cols + MI_SIZE_64X64 - 1) / MI_SIZE_64X64;
+ MB_MODE_INFO **mbmi = cm->mi_grid_visible;
+ for (int r = 0; r < nvfb; ++r) {
+ for (int c = 0; c < nhfb; ++c) {
+ mbmi[MI_SIZE_64X64 * c]->cdef_strength = 0;
+ }
+ mbmi += MI_SIZE_64X64 * cm->mi_stride;
+ }
+}
+
void av1_cdef_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
AV1_COMMON *cm, MACROBLOCKD *xd, int pick_method) {
- CdefInfo *const cdef_info = &cm->cdef_info;
if (pick_method == CDEF_PICK_FROM_Q) {
- const int bd = cm->seq_params.bit_depth;
- const int q = av1_ac_quant_QTX(cm->base_qindex, 0, bd) >> (bd - 8);
- cdef_info->cdef_bits = 0;
- cdef_info->nb_cdef_strengths = 1;
- cdef_info->cdef_pri_damping = 3 + (cm->base_qindex >> 6);
- cdef_info->cdef_sec_damping = 3 + (cm->base_qindex >> 6);
-
- int predicted_y_f1 = 0;
- int predicted_y_f2 = 0;
- int predicted_uv_f1 = 0;
- int predicted_uv_f2 = 0;
- aom_clear_system_state();
- if (!frame_is_intra_only(cm)) {
- predicted_y_f1 = clamp((int)roundf(-q * q * 0.00000235939456f +
- q * 0.0068615186f + 0.02709886f),
- 0, 15);
- predicted_y_f2 = clamp((int)roundf(-q * q * 0.000000576297339f +
- q * 0.00139933452f + 0.03831067f),
- 0, 3);
- predicted_uv_f1 = clamp((int)roundf(-q * q * 0.000000709506878f +
- q * 0.00346288458f + 0.00887099f),
- 0, 15);
- predicted_uv_f2 = clamp((int)roundf(q * q * 0.000000238740853f +
- q * 0.000282235851f + 0.05576307f),
- 0, 3);
- } else {
- predicted_y_f1 = clamp((int)roundf(q * q * 0.00000337319739f +
- q * 0.0080705937f + 0.0187634f),
- 0, 15);
- predicted_y_f2 = clamp((int)roundf(-q * q * -0.00000291673427f +
- q * 0.00277986238f + 0.0079405f),
- 0, 3);
- predicted_uv_f1 = clamp((int)roundf(-q * q * 0.0000130790995f +
- q * 0.0128924046f - 0.00748388f),
- 0, 15);
- predicted_uv_f2 = clamp((int)roundf(q * q * 0.00000326517829f +
- q * 0.000355201832f + 0.00228092f),
- 0, 3);
- }
- cdef_info->cdef_strengths[0] =
- predicted_y_f1 * CDEF_SEC_STRENGTHS + predicted_y_f2;
- cdef_info->cdef_uv_strengths[0] =
- predicted_uv_f1 * CDEF_SEC_STRENGTHS + predicted_uv_f2;
-
- const int nvfb = (cm->mi_rows + MI_SIZE_64X64 - 1) / MI_SIZE_64X64;
- const int nhfb = (cm->mi_cols + MI_SIZE_64X64 - 1) / MI_SIZE_64X64;
- MB_MODE_INFO **mbmi = cm->mi_grid_visible;
- for (int r = 0; r < nvfb; ++r) {
- for (int c = 0; c < nhfb; ++c) {
- mbmi[MI_SIZE_64X64 * c]->cdef_strength = 0;
- }
- mbmi += MI_SIZE_64X64 * cm->mi_stride;
- }
-
+ pick_cdef_from_qp(cm);
return;
}
@@ -522,6 +525,7 @@
(cm->seq_params.bit_depth - 8);
aom_clear_system_state();
const double lambda = .12 * quantizer * quantizer / 256.;
+ CdefInfo *const cdef_info = &cm->cdef_info;
for (int i = 0; i <= 3; i++) {
int best_lev0[CDEF_MAX_STRENGTHS];
int best_lev1[CDEF_MAX_STRENGTHS] = { 0 };