JNT_COMP: refactor if statements

Refactor if statement that use frame_offset == -1 to indicate
jnt_comp is not chosen, as distance now can not be negative.
Instead, add a variable use_jnt_comp_avg for the same functionality.

Change-Id: Ie6b9c6ab36131b48bc9e066babada17046729cd8
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index d113c5f..9c97dce 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -591,6 +591,7 @@
 
 #if CONFIG_JNT_COMP
 typedef struct jnt_comp_params {
+  int use_jnt_comp_avg;
   int fwd_offset;
   int bck_offset;
 } JNT_COMP_PARAMS;
diff --git a/av1/common/convolve.c b/av1/common/convolve.c
index 3da90b3..2d5cca3 100644
--- a/av1/common/convolve.c
+++ b/av1/common/convolve.c
@@ -465,12 +465,7 @@
         sum += y_filter[k] * src_vert[(y - fo_vert + k) * im_stride + x];
       }
       CONV_BUF_TYPE res = ROUND_POWER_OF_TWO(sum, conv_params->round_1);
-      if (conv_params->bck_offset == -1) {
-        if (conv_params->do_average)
-          dst[y * dst_stride + x] += res;
-        else
-          dst[y * dst_stride + x] = res;
-      } else {
+      if (conv_params->use_jnt_comp_avg) {
         if (conv_params->do_average == 0) {
           dst[y * dst_stride + x] = res * conv_params->fwd_offset;
         } else {
@@ -479,6 +474,11 @@
           dst[y * dst_stride + x] = ROUND_POWER_OF_TWO(dst[y * dst_stride + x],
                                                        DIST_PRECISION_BITS - 1);
         }
+      } else {
+        if (conv_params->do_average)
+          dst[y * dst_stride + x] += res;
+        else
+          dst[y * dst_stride + x] = res;
       }
     }
   }
@@ -536,12 +536,7 @@
       }
       CONV_BUF_TYPE res = ROUND_POWER_OF_TWO(sum, conv_params->round_1);
 #if CONFIG_JNT_COMP
-      if (conv_params->bck_offset == -1) {
-        if (conv_params->do_average)
-          dst[y * dst_stride + x] += res;
-        else
-          dst[y * dst_stride + x] = res;
-      } else {
+      if (conv_params->use_jnt_comp_avg) {
         if (conv_params->do_average == 0) {
           dst[y * dst_stride + x] = res * conv_params->fwd_offset;
         } else {
@@ -550,6 +545,11 @@
           dst[y * dst_stride + x] = ROUND_POWER_OF_TWO(dst[y * dst_stride + x],
                                                        DIST_PRECISION_BITS - 1);
         }
+      } else {
+        if (conv_params->do_average)
+          dst[y * dst_stride + x] += res;
+        else
+          dst[y * dst_stride + x] = res;
       }
 #else
       if (conv_params->do_average)
@@ -669,12 +669,7 @@
       CONV_BUF_TYPE res = ROUND_POWER_OF_TWO(sum, conv_params->round_1) -
                           ((1 << (offset_bits - conv_params->round_1)) +
                            (1 << (offset_bits - conv_params->round_1 - 1)));
-      if (conv_params->fwd_offset == -1) {
-        if (conv_params->do_average)
-          dst[y * dst_stride + x] += res;
-        else
-          dst[y * dst_stride + x] = res;
-      } else {
+      if (conv_params->use_jnt_comp_avg) {
         if (conv_params->do_average) {
           dst[y * dst_stride + x] += res * conv_params->bck_offset;
 
@@ -683,6 +678,11 @@
         } else {
           dst[y * dst_stride + x] = res * conv_params->fwd_offset;
         }
+      } else {
+        if (conv_params->do_average)
+          dst[y * dst_stride + x] += res;
+        else
+          dst[y * dst_stride + x] = res;
       }
     }
   }
@@ -746,12 +746,7 @@
                           ((1 << (offset_bits - conv_params->round_1)) +
                            (1 << (offset_bits - conv_params->round_1 - 1)));
 #if CONFIG_JNT_COMP
-      if (conv_params->fwd_offset == -1) {
-        if (conv_params->do_average)
-          dst[y * dst_stride + x] += res;
-        else
-          dst[y * dst_stride + x] = res;
-      } else {
+      if (conv_params->use_jnt_comp_avg) {
         if (conv_params->do_average) {
           dst[y * dst_stride + x] += res * conv_params->bck_offset;
 
@@ -760,6 +755,11 @@
         } else {
           dst[y * dst_stride + x] = res * conv_params->fwd_offset;
         }
+      } else {
+        if (conv_params->do_average)
+          dst[y * dst_stride + x] += res;
+        else
+          dst[y * dst_stride + x] = res;
       }
 #else
       if (conv_params->do_average)
diff --git a/av1/common/convolve.h b/av1/common/convolve.h
index c9f6785..607532b 100644
--- a/av1/common/convolve.h
+++ b/av1/common/convolve.h
@@ -36,6 +36,7 @@
   int plane;
   int do_post_rounding;
 #if CONFIG_JNT_COMP
+  int use_jnt_comp_avg;
   int fwd_offset;
   int bck_offset;
 #endif
diff --git a/av1/common/reconinter.c b/av1/common/reconinter.c
index 7f40dbc..1df7214 100644
--- a/av1/common/reconinter.c
+++ b/av1/common/reconinter.c
@@ -924,14 +924,14 @@
 #if CONFIG_JNT_COMP
 void av1_jnt_comp_weight_assign(const AV1_COMMON *cm, const MB_MODE_INFO *mbmi,
                                 int order_idx, int *fwd_offset, int *bck_offset,
-                                int is_compound) {
+                                int *use_jnt_comp_avg, int is_compound) {
   assert(fwd_offset != NULL && bck_offset != NULL);
   if (!is_compound || mbmi->compound_idx) {
-    *fwd_offset = -1;
-    *bck_offset = -1;
+    *use_jnt_comp_avg = 0;
     return;
   }
 
+  *use_jnt_comp_avg = 1;
   const int bck_idx = cm->frame_refs[mbmi->ref_frame[0] - LAST_FRAME].idx;
   const int fwd_idx = cm->frame_refs[mbmi->ref_frame[1] - LAST_FRAME].idx;
   const int cur_frame_index = cm->cur_frame->cur_frame_offset;
@@ -1256,7 +1256,8 @@
         get_conv_params_no_round(ref, ref, plane, tmp_dst, MAX_SB_SIZE);
 #if CONFIG_JNT_COMP
     av1_jnt_comp_weight_assign(cm, &mi->mbmi, 0, &conv_params.fwd_offset,
-                               &conv_params.bck_offset, is_compound);
+                               &conv_params.bck_offset,
+                               &conv_params.use_jnt_comp_avg, is_compound);
 #endif  // CONFIG_JNT_COMP
 
 #else
diff --git a/av1/common/reconinter.h b/av1/common/reconinter.h
index f1e1ab1..28c14a6 100644
--- a/av1/common/reconinter.h
+++ b/av1/common/reconinter.h
@@ -563,7 +563,7 @@
 #if CONFIG_JNT_COMP
 void av1_jnt_comp_weight_assign(const AV1_COMMON *cm, const MB_MODE_INFO *mbmi,
                                 int order_idx, int *fwd_offset, int *bck_offset,
-                                int is_compound);
+                                int *use_jnt_comp_avg, int is_compound);
 #endif  // CONFIG_JNT_COMP
 
 #ifdef __cplusplus
diff --git a/av1/common/warped_motion.c b/av1/common/warped_motion.c
index e798aaa..f3bc849 100644
--- a/av1/common/warped_motion.c
+++ b/av1/common/warped_motion.c
@@ -535,8 +535,7 @@
                          conv_params->round_0 - conv_params->round_1)) -
                   (1 << (offset_bits_vert - conv_params->round_1));
 #if CONFIG_JNT_COMP
-            if (conv_params->fwd_offset != -1 &&
-                conv_params->bck_offset != -1) {
+            if (conv_params->use_jnt_comp_avg) {
               if (conv_params->do_average) {
                 *p += sum * conv_params->bck_offset;
                 *p = ROUND_POWER_OF_TWO(*p, DIST_PRECISION_BITS - 1);
@@ -628,8 +627,7 @@
 
   ConvolveParams conv_params = get_conv_params(0, 0, 0);
 #if CONFIG_JNT_COMP
-  conv_params.fwd_offset = -1;
-  conv_params.bck_offset = -1;
+  conv_params.use_jnt_comp_avg = 0;
 #endif
   for (int i = p_row; i < p_row + p_height; i += WARP_ERROR_BLOCK) {
     for (int j = p_col; j < p_col + p_width; j += WARP_ERROR_BLOCK) {
@@ -864,8 +862,7 @@
                          conv_params->round_0 - conv_params->round_1)) -
                   (1 << (offset_bits_vert - conv_params->round_1));
 #if CONFIG_JNT_COMP
-            if (conv_params->fwd_offset != -1 &&
-                conv_params->bck_offset != -1) {
+            if (conv_params->use_jnt_comp_avg) {
               if (conv_params->do_average) {
                 *p += sum * conv_params->bck_offset;
                 *p = ROUND_POWER_OF_TWO(*p, DIST_PRECISION_BITS - 1);
@@ -952,8 +949,7 @@
   uint8_t tmp[WARP_ERROR_BLOCK * WARP_ERROR_BLOCK];
   ConvolveParams conv_params = get_conv_params(0, 0, 0);
 #if CONFIG_JNT_COMP
-  conv_params.fwd_offset = -1;
-  conv_params.bck_offset = -1;
+  conv_params.use_jnt_comp_avg = 0;
 #endif
 
   for (int i = p_row; i < p_row + p_height; i += WARP_ERROR_BLOCK) {
diff --git a/av1/common/x86/av1_convolve_scale_sse4.c b/av1/common/x86/av1_convolve_scale_sse4.c
index 7590318..39051a5 100644
--- a/av1/common/x86/av1_convolve_scale_sse4.c
+++ b/av1/common/x86/av1_convolve_scale_sse4.c
@@ -313,7 +313,7 @@
       int32_t *dst_x = dst + y * dst_stride + x;
 #if CONFIG_JNT_COMP
       __m128i result;
-      if (conv_params->fwd_offset != -1 && conv_params->bck_offset != -1) {
+      if (conv_params->use_jnt_comp_avg) {
         if (conv_params->do_average) {
           result = _mm_srai_epi32(
               _mm_add_epi32(_mm_add_epi32(_mm_loadu_si128((__m128i *)dst_x),
@@ -343,7 +343,7 @@
       for (int k = 0; k < ntaps; ++k) sum += filter[k] * src_x[k];
       CONV_BUF_TYPE res = ROUND_POWER_OF_TWO(sum, conv_params->round_1) - sub32;
 #if CONFIG_JNT_COMP
-      if (conv_params->fwd_offset != -1 && conv_params->bck_offset != -1) {
+      if (conv_params->use_jnt_comp_avg) {
         if (conv_params->do_average) {
           dst[y * dst_stride + x] += res * conv_params->bck_offset;
 
@@ -432,7 +432,7 @@
       int32_t *dst_x = dst + y * dst_stride + x;
 #if CONFIG_JNT_COMP
       __m128i result;
-      if (conv_params->fwd_offset != -1 && conv_params->bck_offset != -1) {
+      if (conv_params->use_jnt_comp_avg) {
         if (conv_params->do_average) {
           result = _mm_srai_epi32(
               _mm_add_epi32(_mm_add_epi32(_mm_loadu_si128((__m128i *)dst_x),
@@ -462,7 +462,7 @@
       for (int k = 0; k < ntaps; ++k) sum += filter[k] * src_x[k];
       CONV_BUF_TYPE res = ROUND_POWER_OF_TWO(sum, conv_params->round_1) - sub32;
 #if CONFIG_JNT_COMP
-      if (conv_params->fwd_offset != -1 && conv_params->bck_offset != -1) {
+      if (conv_params->use_jnt_comp_avg) {
         if (conv_params->do_average) {
           dst[y * dst_stride + x] += res * conv_params->bck_offset;
 
diff --git a/av1/common/x86/convolve_2d_sse4.c b/av1/common/x86/convolve_2d_sse4.c
index d36b4bf..71c32e7 100644
--- a/av1/common/x86/convolve_2d_sse4.c
+++ b/av1/common/x86/convolve_2d_sse4.c
@@ -190,7 +190,7 @@
         const __m128i res_hi_round =
             _mm_sra_epi32(_mm_add_epi32(res_hi, round_const), round_shift);
 
-        if (conv_params->fwd_offset != -1 && conv_params->bck_offset != -1) {
+        if (conv_params->use_jnt_comp_avg) {
           // NOTE(chengchen):
           // only this part is different from av1_convolve_2d_sse2
           // original c function at: av1/common/convolve.c:
@@ -409,7 +409,7 @@
         const __m128i res_hi_round =
             _mm_sra_epi32(_mm_add_epi32(res_hi, round_const), round_shift);
 
-        if (conv_params->fwd_offset != -1 && conv_params->bck_offset != -1) {
+        if (conv_params->use_jnt_comp_avg) {
           // FIXME(chengchen): validate this implementation
           // original c function at: av1/common/convolve.c: av1_convolve_2d_c
           __m128i *const p = (__m128i *)&dst[i * dst_stride + j];
diff --git a/av1/common/x86/highbd_warp_plane_sse4.c b/av1/common/x86/highbd_warp_plane_sse4.c
index ed71df7..7c358ec 100644
--- a/av1/common/x86/highbd_warp_plane_sse4.c
+++ b/av1/common/x86/highbd_warp_plane_sse4.c
@@ -322,7 +322,7 @@
           res_lo =
               _mm_srl_epi32(res_lo, _mm_cvtsi32_si128(conv_params->round_1));
 #if CONFIG_JNT_COMP
-          if (conv_params->fwd_offset != -1 && conv_params->bck_offset != -1) {
+          if (conv_params->use_jnt_comp_avg) {
             if (comp_avg) {
               const __m128i sum = _mm_add_epi32(_mm_loadu_si128(p),
                                                 _mm_mullo_epi32(res_lo, wt1));
@@ -347,8 +347,7 @@
                 _mm_srl_epi32(res_hi, _mm_cvtsi32_si128(conv_params->round_1));
 
 #if CONFIG_JNT_COMP
-            if (conv_params->fwd_offset != -1 &&
-                conv_params->bck_offset != -1) {
+            if (conv_params->use_jnt_comp_avg) {
               if (comp_avg) {
                 const __m128i sum = _mm_add_epi32(_mm_loadu_si128(p + 1),
                                                   _mm_mullo_epi32(res_hi, wt1));
diff --git a/av1/common/x86/warp_plane_sse4.c b/av1/common/x86/warp_plane_sse4.c
index b48ba62..6385c17 100644
--- a/av1/common/x86/warp_plane_sse4.c
+++ b/av1/common/x86/warp_plane_sse4.c
@@ -319,7 +319,7 @@
           res_lo =
               _mm_srl_epi16(res_lo, _mm_cvtsi32_si128(conv_params->round_1));
 #if CONFIG_JNT_COMP
-          if (conv_params->fwd_offset != -1 && conv_params->bck_offset != -1) {
+          if (conv_params->use_jnt_comp_avg) {
             if (comp_avg) {
               const __m128i sum = _mm_add_epi32(_mm_loadu_si128(p),
                                                 _mm_mullo_epi32(res_lo, wt1));
@@ -342,8 +342,7 @@
             res_hi =
                 _mm_srl_epi16(res_hi, _mm_cvtsi32_si128(conv_params->round_1));
 #if CONFIG_JNT_COMP
-            if (conv_params->fwd_offset != -1 &&
-                conv_params->bck_offset != -1) {
+            if (conv_params->use_jnt_comp_avg) {
               if (comp_avg) {
                 const __m128i sum = _mm_add_epi32(_mm_loadu_si128(p + 1),
                                                   _mm_mullo_epi32(res_hi, wt1));
diff --git a/av1/encoder/mcomp.c b/av1/encoder/mcomp.c
index 463252e..bb50f0f 100644
--- a/av1/encoder/mcomp.c
+++ b/av1/encoder/mcomp.c
@@ -189,7 +189,7 @@
                           src_address, src_stride, second_pred, mask,        \
                           mask_stride, invert_mask, &sse);                   \
     } else {                                                                 \
-      if (xd->jcp_param.fwd_offset != -1 && xd->jcp_param.bck_offset != -1)  \
+      if (xd->jcp_param.use_jnt_comp_avg)                                    \
         thismse = vfp->jsvaf(pre(y, y_stride, r, c), y_stride, sp(c), sp(r), \
                              src_address, src_stride, &sse, second_pred,     \
                              &xd->jcp_param);                                \
@@ -384,7 +384,7 @@
                            mask, mask_stride, invert_mask);
       } else {
 #if CONFIG_JNT_COMP
-        if (xd->jcp_param.fwd_offset != -1 && xd->jcp_param.bck_offset != -1)
+        if (xd->jcp_param.use_jnt_comp_avg)
           aom_jnt_comp_avg_pred(comp_pred, second_pred, w, h, y + offset,
                                 y_stride, &xd->jcp_param);
         else
@@ -407,7 +407,7 @@
                          mask, mask_stride, invert_mask);
     } else {
 #if CONFIG_JNT_COMP
-      if (xd->jcp_param.fwd_offset != -1 && xd->jcp_param.bck_offset != -1)
+      if (xd->jcp_param.use_jnt_comp_avg)
         aom_jnt_comp_avg_pred(comp_pred, second_pred, w, h, y + offset,
                               y_stride, &xd->jcp_param);
       else
@@ -712,7 +712,7 @@
                                      mask_stride, invert_mask);
       } else {
 #if CONFIG_JNT_COMP
-        if (xd->jcp_param.fwd_offset != -1 && xd->jcp_param.bck_offset != -1)
+        if (xd->jcp_param.use_jnt_comp_avg)
           aom_jnt_comp_avg_upsampled_pred(pred, second_pred, w, h, subpel_x_q3,
                                           subpel_y_q3, y, y_stride,
                                           &xd->jcp_param);
@@ -823,8 +823,7 @@
                                 mask_stride, invert_mask, &sse);
           } else {
 #if CONFIG_JNT_COMP
-            if (xd->jcp_param.fwd_offset != -1 &&
-                xd->jcp_param.bck_offset != -1)
+            if (xd->jcp_param.use_jnt_comp_avg)
               thismse =
                   vfp->jsvaf(pre_address, y_stride, sp(tc), sp(tr), src_address,
                              src_stride, &sse, second_pred, &xd->jcp_param);
@@ -875,7 +874,7 @@
                               mask_stride, invert_mask, &sse);
         } else {
 #if CONFIG_JNT_COMP
-          if (xd->jcp_param.fwd_offset != -1 && xd->jcp_param.bck_offset != -1)
+          if (xd->jcp_param.use_jnt_comp_avg)
             thismse =
                 vfp->jsvaf(pre_address, y_stride, sp(tc), sp(tr), src_address,
                            src_stride, &sse, second_pred, &xd->jcp_param);
@@ -1458,7 +1457,7 @@
   unsigned int unused;
 
 #if CONFIG_JNT_COMP
-  if (xd->jcp_param.fwd_offset != -1 && xd->jcp_param.bck_offset != -1)
+  if (xd->jcp_param.use_jnt_comp_avg)
     return vfp->jsvaf(get_buf_from_mv(in_what, best_mv), in_what->stride, 0, 0,
                       what->buf, what->stride, &unused, second_pred,
                       &xd->jcp_param) +
@@ -2482,7 +2481,7 @@
                mvsad_err_cost(x, best_mv, &fcenter_mv, error_per_bit);
   } else {
 #if CONFIG_JNT_COMP
-    if (xd->jcp_param.fwd_offset != -1 && xd->jcp_param.bck_offset != -1)
+    if (xd->jcp_param.use_jnt_comp_avg)
       best_sad = fn_ptr->jsdaf(what->buf, what->stride,
                                get_buf_from_mv(in_what, best_mv),
                                in_what->stride, second_pred, &xd->jcp_param) +
@@ -2510,7 +2509,7 @@
                              second_pred, mask, mask_stride, invert_mask);
         } else {
 #if CONFIG_JNT_COMP
-          if (xd->jcp_param.fwd_offset != -1 && xd->jcp_param.bck_offset != -1)
+          if (xd->jcp_param.use_jnt_comp_avg)
             sad = fn_ptr->jsdaf(what->buf, what->stride,
                                 get_buf_from_mv(in_what, &mv), in_what->stride,
                                 second_pred, &xd->jcp_param);
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 416171e..7734d59 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -5894,7 +5894,8 @@
 #if CONFIG_JNT_COMP
     const int order_idx = id != 0;
     av1_jnt_comp_weight_assign(cm, mbmi, order_idx, &xd->jcp_param.fwd_offset,
-                               &xd->jcp_param.bck_offset, 1);
+                               &xd->jcp_param.bck_offset,
+                               &xd->jcp_param.use_jnt_comp_avg, 1);
 #endif  // CONFIG_JNT_COMP
 
     // Do compound motion search on the current reference frame.
@@ -6537,7 +6538,8 @@
 
 #if CONFIG_JNT_COMP
   av1_jnt_comp_weight_assign(cm, mbmi, 0, &xd->jcp_param.fwd_offset,
-                             &xd->jcp_param.bck_offset, 1);
+                             &xd->jcp_param.bck_offset,
+                             &xd->jcp_param.use_jnt_comp_avg, 1);
 #endif  // CONFIG_JNT_COMP
 
   if (scaled_ref_frame) {