Merge changes I4e2aeaef,Ie3e478ef * changes: vpxdec warning errors addressed cast enums to int to avoid gcc warning in pred_common
diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index 3dbd251..7c82b20 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c
@@ -2091,10 +2091,10 @@ for (r = mb_row; r < mb_row_end; r++) { for (c = mb_col; c < mb_col_end; c++) { const int mb_index = r * cm->mb_cols + c; - if ((cpi->twopass.this_frame_mb_stats[mb_index] & - FPMB_NONZERO_MOTION_MASK) || + if (!(cpi->twopass.this_frame_mb_stats[mb_index] & + FPMB_MOTION_ZERO_MASK) || !(cpi->twopass.this_frame_mb_stats[mb_index] & - FPMB_ERROR_LEVEL0_MASK)) { + FPMB_ERROR_SMALL_MASK)) { skip = 0; break; }
diff --git a/vp9/encoder/vp9_firstpass.c b/vp9/encoder/vp9_firstpass.c index cf20e78..0b5bce3 100644 --- a/vp9/encoder/vp9_firstpass.c +++ b/vp9/encoder/vp9_firstpass.c
@@ -689,18 +689,11 @@ // intra predication statistics cpi->twopass.frame_mb_stats_buf[mb_index] = 0; cpi->twopass.frame_mb_stats_buf[mb_index] |= FPMB_DCINTRA_MASK; - cpi->twopass.frame_mb_stats_buf[mb_index] &= - ~FPMB_NONZERO_MOTION_MASK; - if (this_error > FPMB_ERROR_LEVEL4_TH) { - cpi->twopass.frame_mb_stats_buf[mb_index] |= FPMB_ERROR_LEVEL4_MASK; - } else if (this_error > FPMB_ERROR_LEVEL3_TH) { - cpi->twopass.frame_mb_stats_buf[mb_index] |= FPMB_ERROR_LEVEL3_MASK; - } else if (this_error > FPMB_ERROR_LEVEL2_TH) { - cpi->twopass.frame_mb_stats_buf[mb_index] |= FPMB_ERROR_LEVEL2_MASK; - } else if (this_error > FPMB_ERROR_LEVEL1_TH) { - cpi->twopass.frame_mb_stats_buf[mb_index] |= FPMB_ERROR_LEVEL1_MASK; - } else { - cpi->twopass.frame_mb_stats_buf[mb_index] |= FPMB_ERROR_LEVEL0_MASK; + cpi->twopass.frame_mb_stats_buf[mb_index] |= FPMB_MOTION_ZERO_MASK; + if (this_error > FPMB_ERROR_LARGE_TH) { + cpi->twopass.frame_mb_stats_buf[mb_index] |= FPMB_ERROR_LARGE_MASK; + } else if (this_error < FPMB_ERROR_SMALL_TH) { + cpi->twopass.frame_mb_stats_buf[mb_index] |= FPMB_ERROR_SMALL_MASK; } } #endif @@ -738,23 +731,13 @@ // inter predication statistics cpi->twopass.frame_mb_stats_buf[mb_index] = 0; cpi->twopass.frame_mb_stats_buf[mb_index] &= ~FPMB_DCINTRA_MASK; - cpi->twopass.frame_mb_stats_buf[mb_index] &= - ~FPMB_NONZERO_MOTION_MASK; - if (this_error > FPMB_ERROR_LEVEL4_TH) { + cpi->twopass.frame_mb_stats_buf[mb_index] |= FPMB_MOTION_ZERO_MASK; + if (this_error > FPMB_ERROR_LARGE_TH) { cpi->twopass.frame_mb_stats_buf[mb_index] |= - FPMB_ERROR_LEVEL4_MASK; - } else if (this_error > FPMB_ERROR_LEVEL3_TH) { + FPMB_ERROR_LARGE_MASK; + } else if (this_error < FPMB_ERROR_SMALL_TH) { cpi->twopass.frame_mb_stats_buf[mb_index] |= - FPMB_ERROR_LEVEL3_MASK; - } else if (this_error > FPMB_ERROR_LEVEL2_TH) { - cpi->twopass.frame_mb_stats_buf[mb_index] |= - FPMB_ERROR_LEVEL2_MASK; - } else if (this_error > FPMB_ERROR_LEVEL1_TH) { - cpi->twopass.frame_mb_stats_buf[mb_index] |= - FPMB_ERROR_LEVEL1_MASK; - } else { - cpi->twopass.frame_mb_stats_buf[mb_index] |= - FPMB_ERROR_LEVEL0_MASK; + FPMB_ERROR_SMALL_MASK; } } #endif @@ -764,8 +747,28 @@ #if CONFIG_FP_MB_STATS if (cpi->use_fp_mb_stats) { - cpi->twopass.frame_mb_stats_buf[mb_index] |= - FPMB_NONZERO_MOTION_MASK; + cpi->twopass.frame_mb_stats_buf[mb_index] &= + ~FPMB_MOTION_ZERO_MASK; + // check estimated motion direction + if (mv.as_mv.col > 0 && mv.as_mv.col >= abs(mv.as_mv.row)) { + // right direction + cpi->twopass.frame_mb_stats_buf[mb_index] |= + FPMB_MOTION_RIGHT_MASK; + } else if (mv.as_mv.row < 0 && + abs(mv.as_mv.row) >= abs(mv.as_mv.col)) { + // up direction + cpi->twopass.frame_mb_stats_buf[mb_index] |= + FPMB_MOTION_UP_MASK; + } else if (mv.as_mv.col < 0 && + abs(mv.as_mv.col) >= abs(mv.as_mv.row)) { + // left direction + cpi->twopass.frame_mb_stats_buf[mb_index] |= + FPMB_MOTION_LEFT_MASK; + } else { + // down direction + cpi->twopass.frame_mb_stats_buf[mb_index] |= + FPMB_MOTION_DOWN_MASK; + } } #endif
diff --git a/vp9/encoder/vp9_firstpass.h b/vp9/encoder/vp9_firstpass.h index e898abc..bf8c9fd 100644 --- a/vp9/encoder/vp9_firstpass.h +++ b/vp9/encoder/vp9_firstpass.h
@@ -21,17 +21,17 @@ #if CONFIG_FP_MB_STATS #define FPMB_DCINTRA_MASK 0x01 -#define FPMB_NONZERO_MOTION_MASK 0x02 -#define FPMB_ERROR_LEVEL0_MASK 0x04 -#define FPMB_ERROR_LEVEL1_MASK 0x10 -#define FPMB_ERROR_LEVEL2_MASK 0x20 -#define FPMB_ERROR_LEVEL3_MASK 0x40 -#define FPMB_ERROR_LEVEL4_MASK 0x80 -#define FPMB_ERROR_LEVEL1_TH 2000 -#define FPMB_ERROR_LEVEL2_TH 8000 -#define FPMB_ERROR_LEVEL3_TH 24000 -#define FPMB_ERROR_LEVEL4_TH 48000 +#define FPMB_MOTION_ZERO_MASK 0x02 +#define FPMB_MOTION_LEFT_MASK 0x04 +#define FPMB_MOTION_RIGHT_MASK 0x08 +#define FPMB_MOTION_UP_MASK 0x10 +#define FPMB_MOTION_DOWN_MASK 0x20 + +#define FPMB_ERROR_SMALL_MASK 0x40 +#define FPMB_ERROR_LARGE_MASK 0x80 +#define FPMB_ERROR_SMALL_TH 2000 +#define FPMB_ERROR_LARGE_TH 48000 typedef struct { uint8_t *mb_stats_start;
diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c index fa71a94..5caafd3 100644 --- a/vp9/encoder/vp9_rdopt.c +++ b/vp9/encoder/vp9_rdopt.c
@@ -2519,9 +2519,8 @@ for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) { x->pred_mv_sad[ref_frame] = INT_MAX; if (cpi->ref_frame_flags & flag_list[ref_frame]) { - setup_buffer_inter(cpi, x, tile, - ref_frame, bsize, mi_row, mi_col, - frame_mv[NEARESTMV], frame_mv[NEARMV], yv12_mb); + setup_buffer_inter(cpi, x, tile, ref_frame, bsize, mi_row, mi_col, + frame_mv[NEARESTMV], frame_mv[NEARMV], yv12_mb); } frame_mv[NEWMV][ref_frame].as_int = INVALID_MV; frame_mv[ZEROMV][ref_frame].as_int = 0;