Refine mv equal check by using int_mv
Use union can check two MVs' equality by one
statement, no need to check col and row separately.
Change-Id: I94120435bc3f7bb3d3aa595f2c7c75a8c7579d87
diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index bbd5734..28cc1b4 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -169,7 +169,7 @@
#define MAX_INTERP_FILTER_STATS 64
typedef struct {
InterpFilters filters;
- MV mv[2];
+ int_mv mv[2];
int8_t ref_frames[2];
} INTERPOLATION_FILTER_STATS;
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 92a14ca..5af8003 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -7438,9 +7438,8 @@
static INLINE int is_interp_filter_match(const INTERPOLATION_FILTER_STATS *st,
MB_MODE_INFO *const mi) {
for (int i = 0; i < 2; ++i) {
- const MV *mv = &mi->mv[i].as_mv;
- if ((st->ref_frames[i] != mi->ref_frame[i]) || (st->mv[i].row != mv->row) ||
- (st->mv[i].col != mv->col)) {
+ if ((st->ref_frames[i] != mi->ref_frame[i]) ||
+ (st->mv[i].as_int != mi->mv[i].as_int)) {
return 0;
}
}
@@ -7466,11 +7465,9 @@
const int comp_idx = mbmi->compound_idx;
const int offset = x->interp_filter_stats_idx[comp_idx];
if (offset < MAX_INTERP_FILTER_STATS) {
- const MV mv0 = mbmi->mv[0].as_mv;
- const MV mv1 = mbmi->mv[1].as_mv;
INTERPOLATION_FILTER_STATS stat = {
mbmi->interp_filters,
- { mv0, mv1 },
+ { mbmi->mv[0], mbmi->mv[1] },
{ mbmi->ref_frame[0], mbmi->ref_frame[1] },
};
x->interp_filter_stats[comp_idx][offset] = stat;