summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build/make/configure.sh3
-rwxr-xr-xconfigure5
-rw-r--r--vp8/common/generic/systemdependent.c2
-rw-r--r--vp8/decoder/decodeframe.c5
-rw-r--r--vp8/decoder/error_concealment.c13
-rw-r--r--vp8/decoder/error_concealment.h8
-rw-r--r--vp8/decoder/threading.c5
-rw-r--r--vp8/vp8_cx_iface.c1
-rw-r--r--vp9/encoder/vp9_encodeframe.c7
-rw-r--r--vp9/encoder/vp9_encodemb.c5
-rw-r--r--vp9/encoder/vp9_pickmode.c14
-rw-r--r--vpx_dsp/x86/loopfilter_sse2.c1
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}
diff --git a/configure b/configure
index d07859667..f82ee046b 100755
--- a/configure
+++ b/configure
@@ -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)),