diff options
-rw-r--r-- | build/make/configure.sh | 3 | ||||
-rwxr-xr-x | configure | 5 | ||||
-rw-r--r-- | vp8/common/generic/systemdependent.c | 2 | ||||
-rw-r--r-- | vp8/decoder/decodeframe.c | 5 | ||||
-rw-r--r-- | vp8/decoder/error_concealment.c | 13 | ||||
-rw-r--r-- | vp8/decoder/error_concealment.h | 8 | ||||
-rw-r--r-- | vp8/decoder/threading.c | 5 | ||||
-rw-r--r-- | vp8/vp8_cx_iface.c | 1 | ||||
-rw-r--r-- | vp9/encoder/vp9_encodeframe.c | 7 | ||||
-rw-r--r-- | vp9/encoder/vp9_encodemb.c | 5 | ||||
-rw-r--r-- | vp9/encoder/vp9_pickmode.c | 14 | ||||
-rw-r--r-- | vpx_dsp/x86/loopfilter_sse2.c | 1 |
12 files changed, 28 insertions, 41 deletions
diff --git a/build/make/configure.sh b/build/make/configure.sh index e5ce21a92..f8383da27 100644 --- a/build/make/configure.sh +++ b/build/make/configure.sh @@ -945,6 +945,9 @@ EOF check_add_cflags -mfpu=neon #-ftree-vectorize check_add_asflags -mfpu=neon fi + elif [ ${tgt_isa} = "arm64" ] || [ ${tgt_isa} = "armv8" ]; then + check_add_cflags -march=armv8-a + check_add_asflags -march=armv8-a else check_add_cflags -march=${tgt_isa} check_add_asflags -march=${tgt_isa} @@ -97,11 +97,11 @@ EOF # all_platforms is a list of all supported target platforms. Maintain # alphabetically by architecture, generic-gnu last. +all_platforms="${all_platforms} arm64-darwin-gcc" +all_platforms="${all_platforms} arm64-linux-gcc" all_platforms="${all_platforms} armv6-linux-rvct" all_platforms="${all_platforms} armv6-linux-gcc" all_platforms="${all_platforms} armv6-none-rvct" -all_platforms="${all_platforms} arm64-darwin-gcc" -all_platforms="${all_platforms} arm64-linux-gcc" all_platforms="${all_platforms} armv7-android-gcc" #neon Cortex-A8 all_platforms="${all_platforms} armv7-darwin-gcc" #neon Cortex-A8 all_platforms="${all_platforms} armv7-linux-rvct" #neon Cortex-A8 @@ -111,6 +111,7 @@ all_platforms="${all_platforms} armv7-win32-vs11" all_platforms="${all_platforms} armv7-win32-vs12" all_platforms="${all_platforms} armv7-win32-vs14" all_platforms="${all_platforms} armv7s-darwin-gcc" +all_platforms="${all_platforms} armv8-linux-gcc" all_platforms="${all_platforms} mips32-linux-gcc" all_platforms="${all_platforms} mips64-linux-gcc" all_platforms="${all_platforms} sparc-solaris-gcc" diff --git a/vp8/common/generic/systemdependent.c b/vp8/common/generic/systemdependent.c index 28dc262ae..6d5f302d7 100644 --- a/vp8/common/generic/systemdependent.c +++ b/vp8/common/generic/systemdependent.c @@ -94,6 +94,8 @@ void vp8_machine_specific_config(VP8_COMMON *ctx) { #if CONFIG_MULTITHREAD ctx->processor_core_count = get_cpu_count(); +#else + (void)ctx; #endif /* CONFIG_MULTITHREAD */ #if ARCH_ARM diff --git a/vp8/decoder/decodeframe.c b/vp8/decoder/decodeframe.c index 566972ea7..51acdbb9c 100644 --- a/vp8/decoder/decodeframe.c +++ b/vp8/decoder/decodeframe.c @@ -144,8 +144,6 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, */ pbi->frame_corrupt_residual = 1; memset(xd->qcoeff, 0, sizeof(xd->qcoeff)); - vp8_conceal_corrupt_mb(xd); - corruption_detected = 1; @@ -625,8 +623,7 @@ static void decode_mb_rows(VP8D_COMP *pbi) */ vp8_interpolate_motion(xd, mb_row, mb_col, - pc->mb_rows, pc->mb_cols, - pc->mode_info_stride); + pc->mb_rows, pc->mb_cols); } } #endif diff --git a/vp8/decoder/error_concealment.c b/vp8/decoder/error_concealment.c index fbfae61e7..a73813fc0 100644 --- a/vp8/decoder/error_concealment.c +++ b/vp8/decoder/error_concealment.c @@ -558,8 +558,7 @@ static void interpolate_mvs(MACROBLOCKD *mb, void vp8_interpolate_motion(MACROBLOCKD *mb, int mb_row, int mb_col, - int mb_rows, int mb_cols, - int mi_stride) + int mb_rows, int mb_cols) { /* Find relevant neighboring blocks */ EC_BLOCK neighbors[NUM_NEIGHBORS]; @@ -585,13 +584,3 @@ void vp8_interpolate_motion(MACROBLOCKD *mb, mb->mode_info_context->mbmi.partitioning = 3; mb->mode_info_context->mbmi.segment_id = 0; } - -void vp8_conceal_corrupt_mb(MACROBLOCKD *xd) -{ - /* This macroblock has corrupt residual, use the motion compensated - image (predictor) for concealment */ - - /* The build predictor functions now output directly into the dst buffer, - * so the copies are no longer necessary */ - -} diff --git a/vp8/decoder/error_concealment.h b/vp8/decoder/error_concealment.h index 9a1e02486..b6b49725b 100644 --- a/vp8/decoder/error_concealment.h +++ b/vp8/decoder/error_concealment.h @@ -34,13 +34,7 @@ void vp8_estimate_missing_mvs(VP8D_COMP *pbi); * (mb_row, mb_col). */ void vp8_interpolate_motion(MACROBLOCKD *mb, int mb_row, int mb_col, - int mb_rows, int mb_cols, - int mi_stride); - -/* Conceal a macroblock with corrupt residual. - * Copies the prediction signal to the reconstructed image. - */ -void vp8_conceal_corrupt_mb(MACROBLOCKD *xd); + int mb_rows, int mb_cols); #ifdef __cplusplus } // extern "C" diff --git a/vp8/decoder/threading.c b/vp8/decoder/threading.c index 97979e3b2..3c1b8387e 100644 --- a/vp8/decoder/threading.c +++ b/vp8/decoder/threading.c @@ -136,8 +136,6 @@ static void mt_decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, */ pbi->frame_corrupt_residual = 1; memset(xd->qcoeff, 0, sizeof(xd->qcoeff)); - vp8_conceal_corrupt_mb(xd); - corruption_detected = 1; @@ -447,8 +445,7 @@ static void mt_decode_mb_rows(VP8D_COMP *pbi, MACROBLOCKD *xd, int start_mb_row) */ vp8_interpolate_motion(xd, mb_row, mb_col, - pc->mb_rows, pc->mb_cols, - pc->mode_info_stride); + pc->mb_rows, pc->mb_cols); } } #endif diff --git a/vp8/vp8_cx_iface.c b/vp8/vp8_cx_iface.c index b19ab7a23..22a82b734 100644 --- a/vp8/vp8_cx_iface.c +++ b/vp8/vp8_cx_iface.c @@ -783,6 +783,7 @@ static void pick_quickcompress_mode(vpx_codec_alg_priv_t *ctx, } #else + (void)duration; new_qc = MODE_REALTIME; #endif diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index 984f98a91..f55804c97 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@ -1299,11 +1299,8 @@ static void set_mode_info_seg_skip(MACROBLOCK *x, TX_MODE tx_mode, MODE_INFO *const mi = xd->mi[0]; INTERP_FILTER filter_ref; - if (xd->above_mi) - filter_ref = xd->above_mi->interp_filter; - else if (xd->left_mi) - filter_ref = xd->left_mi->interp_filter; - else + filter_ref = vp9_get_pred_context_switchable_interp(xd); + if (filter_ref == SWITCHABLE_FILTERS) filter_ref = EIGHTTAP; mi->sb_type = bsize; diff --git a/vp9/encoder/vp9_encodemb.c b/vp9/encoder/vp9_encodemb.c index fdf403eb3..169943c10 100644 --- a/vp9/encoder/vp9_encodemb.c +++ b/vp9/encoder/vp9_encodemb.c @@ -50,11 +50,10 @@ void vp9_subtract_plane(MACROBLOCK *x, BLOCK_SIZE bsize, int plane) { pd->dst.buf, pd->dst.stride); } -// TODO(aconverse): Re-pack this structure. typedef struct vp9_token_state { - int rate; int64_t error; - int next; + int rate; + int16_t next; int16_t token; tran_low_t qc; tran_low_t dqc; diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c index c13f24fb0..f1fbd69ab 100644 --- a/vp9/encoder/vp9_pickmode.c +++ b/vp9/encoder/vp9_pickmode.c @@ -1410,9 +1410,13 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, x->skip_encode = cpi->sf.skip_encode_frame && x->q_index < QIDX_SKIP_THRESH; x->skip = 0; - if (xd->above_mi) + // Instead of using vp9_get_pred_context_switchable_interp(xd) to assign + // filter_ref, we use a less strict condition on assigning filter_ref. + // This is to reduce the probabily of entering the flow of not assigning + // filter_ref and then skip filter search. + if (xd->above_mi && is_inter_block(xd->above_mi)) filter_ref = xd->above_mi->interp_filter; - else if (xd->left_mi) + else if (xd->left_mi && is_inter_block(xd->left_mi)) filter_ref = xd->left_mi->interp_filter; else filter_ref = cm->interp_filter; @@ -1723,7 +1727,7 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize); // For large partition blocks, extra testing is done. - if (cpi->oxcf.rc_mode == VPX_CBR && bsize > BLOCK_32X32 && + if (cpi->oxcf.rc_mode == VPX_CBR && bsize >= BLOCK_32X32 && !cyclic_refresh_segment_id_boosted(xd->mi[0]->segment_id) && cm->base_qindex) { model_rd_for_sb_y_large(cpi, bsize, x, xd, &this_rdc.rate, @@ -1977,6 +1981,10 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, mi->ref_frame[0] = best_ref_frame; x->skip_txfm[0] = best_mode_skip_txfm; + if (!is_inter_block(mi)) { + mi->interp_filter = SWITCHABLE_FILTERS; + } + if (reuse_inter_pred && best_pred != NULL) { if (best_pred->data != orig_dst.buf && is_inter_mode(mi->mode)) { #if CONFIG_VP9_HIGHBITDEPTH diff --git a/vpx_dsp/x86/loopfilter_sse2.c b/vpx_dsp/x86/loopfilter_sse2.c index 39a6ae3a8..739adf31d 100644 --- a/vpx_dsp/x86/loopfilter_sse2.c +++ b/vpx_dsp/x86/loopfilter_sse2.c @@ -111,7 +111,6 @@ void vpx_lpf_horizontal_4_sse2(uint8_t *s, int p /* pitch */, __m128i q1p1, q0p0, p3p2, p2p1, p1p0, q3q2, q2q1, q1q0, ps1ps0, qs1qs0; __m128i mask, hev; - p3p2 = _mm_loadl_epi64((__m128i *)(s - 3 * p)); p3p2 = _mm_unpacklo_epi64(_mm_loadl_epi64((__m128i *)(s - 3 * p)), _mm_loadl_epi64((__m128i *)(s - 4 * p))); q1p1 = _mm_unpacklo_epi64(_mm_loadl_epi64((__m128i *)(s - 2 * p)), |