summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/convolve_test.cc6
-rw-r--r--test/external_frame_buffer_test.cc8
-rw-r--r--test/invalid_file_test.cc4
-rw-r--r--test/test-data.mk8
-rw-r--r--test/test-data.sha18
-rw-r--r--vp8/decoder/decodeframe.c1
-rw-r--r--vp8/decoder/onyxd_if.c4
-rw-r--r--vp8/decoder/onyxd_int.h6
-rw-r--r--vp8/vp8_dx_iface.c43
-rw-r--r--vp9/encoder/vp9_encoder.h6
-rw-r--r--vp9/encoder/vp9_mcomp.c16
-rw-r--r--vp9/encoder/vp9_mcomp.h3
-rw-r--r--vp9/encoder/vp9_ratectrl.c2
-rw-r--r--vp9/encoder/vp9_svc_layercontext.c22
-rw-r--r--vp9/encoder/vp9_svc_layercontext.h1
-rw-r--r--vp9/encoder/vp9_temporal_filter.c20
-rw-r--r--vpx/vpx_frame_buffer.h6
-rw-r--r--vpx_dsp/arm/highbd_idct16x16_add_neon.c23
-rw-r--r--vpx_scale/generic/yv12config.c1
19 files changed, 137 insertions, 51 deletions
diff --git a/test/convolve_test.cc b/test/convolve_test.cc
index 02cc7ff5c..cef602eec 100644
--- a/test/convolve_test.cc
+++ b/test/convolve_test.cc
@@ -416,8 +416,14 @@ class ConvolveTest : public ::testing::TestWithParam<ConvolveParam> {
for (int i = 0; i < kOutputBufferSize; ++i) {
if (IsIndexInBorder(i)) {
output_[i] = 255;
+#if CONFIG_VP9_HIGHBITDEPTH
+ output16_[i] = mask_;
+#endif
} else {
output_[i] = 0;
+#if CONFIG_VP9_HIGHBITDEPTH
+ output16_[i] = 0;
+#endif
}
}
diff --git a/test/external_frame_buffer_test.cc b/test/external_frame_buffer_test.cc
index b0ea61f9d..438eeb3ec 100644
--- a/test/external_frame_buffer_test.cc
+++ b/test/external_frame_buffer_test.cc
@@ -114,9 +114,9 @@ class ExternalFrameBufferList {
return 0;
}
- // Checks that the ximage data is contained within the external frame buffer
- // private data passed back in the ximage.
- void CheckXImageFrameBuffer(const vpx_image_t *img) {
+ // Checks that the vpx_image_t data is contained within the external frame
+ // buffer private data passed back in the vpx_image_t.
+ void CheckImageFrameBuffer(const vpx_image_t *img) {
if (img->fb_priv != NULL) {
const struct ExternalFrameBuffer *const ext_fb =
reinterpret_cast<ExternalFrameBuffer *>(img->fb_priv);
@@ -342,7 +342,7 @@ class ExternalFrameBufferTest : public ::testing::Test {
// Get decompressed data
while ((img = dec_iter.Next()) != NULL) {
- fb_list_.CheckXImageFrameBuffer(img);
+ fb_list_.CheckImageFrameBuffer(img);
}
}
diff --git a/test/invalid_file_test.cc b/test/invalid_file_test.cc
index a92612af4..8eed05eb4 100644
--- a/test/invalid_file_test.cc
+++ b/test/invalid_file_test.cc
@@ -123,9 +123,9 @@ TEST_P(InvalidFileTest, ReturnCode) { RunTest(); }
#if CONFIG_VP8_DECODER
const DecodeParam kVP8InvalidFileTests[] = {
- { 1, "invalid-bug-1443-v2.ivf" },
+ { 1, "invalid-bug-1443.ivf" },
{ 1, "invalid-token-partition.ivf" },
- { 1, "invalid-vp80-00-comprehensive-s17661_r01-05_b6-.v2.ivf" },
+ { 1, "invalid-vp80-00-comprehensive-s17661_r01-05_b6-.ivf" },
};
VP8_INSTANTIATE_TEST_CASE(InvalidFileTest,
diff --git a/test/test-data.mk b/test/test-data.mk
index 49edc3087..88f3c658f 100644
--- a/test/test-data.mk
+++ b/test/test-data.mk
@@ -734,14 +734,14 @@ LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp93-2-20-12bit-yuv444.webm.md5
endif # CONFIG_VP9_HIGHBITDEPTH
# Invalid files for testing libvpx error checking.
-LIBVPX_TEST_DATA-$(CONFIG_VP8_DECODER) += invalid-bug-1443-v2.ivf
-LIBVPX_TEST_DATA-$(CONFIG_VP8_DECODER) += invalid-bug-1443-v2.ivf.res
+LIBVPX_TEST_DATA-$(CONFIG_VP8_DECODER) += invalid-bug-1443.ivf
+LIBVPX_TEST_DATA-$(CONFIG_VP8_DECODER) += invalid-bug-1443.ivf.res
LIBVPX_TEST_DATA-$(CONFIG_VP8_DECODER) += invalid-token-partition.ivf
LIBVPX_TEST_DATA-$(CONFIG_VP8_DECODER) += invalid-token-partition.ivf.res
LIBVPX_TEST_DATA-$(CONFIG_VP8_DECODER) += invalid-vp80-00-comprehensive-018.ivf.2kf_0x6.ivf
LIBVPX_TEST_DATA-$(CONFIG_VP8_DECODER) += invalid-vp80-00-comprehensive-018.ivf.2kf_0x6.ivf.res
-LIBVPX_TEST_DATA-$(CONFIG_VP8_DECODER) += invalid-vp80-00-comprehensive-s17661_r01-05_b6-.v2.ivf
-LIBVPX_TEST_DATA-$(CONFIG_VP8_DECODER) += invalid-vp80-00-comprehensive-s17661_r01-05_b6-.v2.ivf.res
+LIBVPX_TEST_DATA-$(CONFIG_VP8_DECODER) += invalid-vp80-00-comprehensive-s17661_r01-05_b6-.ivf
+LIBVPX_TEST_DATA-$(CONFIG_VP8_DECODER) += invalid-vp80-00-comprehensive-s17661_r01-05_b6-.ivf.res
LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += invalid-vp90-01-v3.webm
LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += invalid-vp90-01-v3.webm.res
LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += invalid-vp90-02-v2.webm
diff --git a/test/test-data.sha1 b/test/test-data.sha1
index 2e279e191..cfe4df40d 100644
--- a/test/test-data.sha1
+++ b/test/test-data.sha1
@@ -850,14 +850,14 @@ a000d568431d07379dd5a8ec066061c07e560b47 *invalid-vp90-2-00-quantizer-63.ivf.kf_
6fa3d3ac306a3d9ce1d610b78441dc00d2c2d4b9 *tos_vp8.webm
e402cbbf9e550ae017a1e9f1f73931c1d18474e8 *invalid-crbug-667044.webm
d3964f9dad9f60363c81b688324d95b4ec7c8038 *invalid-crbug-667044.webm.res
-fd9df7f3f6992af1d7a9dde975c9a0d6f28c053d *invalid-bug-1443-v2.ivf
-3198c7af55a7d50173ce3c369c0cf2d9cdfface6 *invalid-bug-1443-v2.ivf.res
+fd9df7f3f6992af1d7a9dde975c9a0d6f28c053d *invalid-bug-1443.ivf
+fd3020fa6e9ca5966206738654c97dec313b0a95 *invalid-bug-1443.ivf.res
1a0e405606939f2febab1a21b30c37cb8f2c8cb1 *invalid-token-partition.ivf
90a8a95e7024f015b87f5483a65036609b3d1b74 *invalid-token-partition.ivf.res
17696cd21e875f1d6e5d418cbf89feab02c8850a *vp90-2-22-svc_1280x720_1.webm
e2f9e1e47a791b4e939a9bdc50bf7a25b3761f77 *vp90-2-22-svc_1280x720_1.webm.md5
-a0fbbbc5dd50fd452096f4455a58c1a8c9f66697 *invalid-vp80-00-comprehensive-s17661_r01-05_b6-.v2.ivf
-591715fc7ea37dbda0397f45eee9d530f7f4f8ce *invalid-vp80-00-comprehensive-s17661_r01-05_b6-.v2.ivf.res
+a0fbbbc5dd50fd452096f4455a58c1a8c9f66697 *invalid-vp80-00-comprehensive-s17661_r01-05_b6-.ivf
+a61774cf03fc584bd9f0904fc145253bb8ea6c4c *invalid-vp80-00-comprehensive-s17661_r01-05_b6-.ivf.res
894fae3afee0290546590823974203ab4b8abd95 *crbug-1539.rawfile
f1026c03efd5da21b381c8eb21f0d64e6d7e4ba3 *invalid-crbug-1558.ivf
eb198c25f861c3fe2cbd310de11eb96843019345 *invalid-crbug-1558.ivf.res
diff --git a/vp8/decoder/decodeframe.c b/vp8/decoder/decodeframe.c
index 617abf77c..650d1d040 100644
--- a/vp8/decoder/decodeframe.c
+++ b/vp8/decoder/decodeframe.c
@@ -1222,6 +1222,7 @@ int vp8_decode_frame(VP8D_COMP *pbi) {
unsigned int thread;
if (vp8mt_decode_mb_rows(pbi, xd)) {
vp8_decoder_remove_threads(pbi);
+ pbi->restart_threads = 1;
vpx_internal_error(&pbi->common.error, VPX_CODEC_CORRUPT_FRAME, NULL);
}
vp8_yv12_extend_frame_borders(yv12_fb_new);
diff --git a/vp8/decoder/onyxd_if.c b/vp8/decoder/onyxd_if.c
index e7e1cfc94..c6fb51d0c 100644
--- a/vp8/decoder/onyxd_if.c
+++ b/vp8/decoder/onyxd_if.c
@@ -16,6 +16,7 @@
#include "onyxd_int.h"
#include "vpx_mem/vpx_mem.h"
#include "vp8/common/alloccommon.h"
+#include "vp8/common/common.h"
#include "vp8/common/loopfilter.h"
#include "vp8/common/swapyv12buffer.h"
#include "vp8/common/threading.h"
@@ -428,7 +429,6 @@ int vp8dx_references_buffer(VP8_COMMON *oci, int ref_frame) {
}
int vp8_create_decoder_instances(struct frame_buffers *fb, VP8D_CONFIG *oxcf) {
- if (fb->pbi[0]) remove_decompressor(fb->pbi[0]);
/* decoder instance for single thread mode */
fb->pbi[0] = create_decompressor(oxcf);
if (!fb->pbi[0]) return VPX_CODEC_ERROR;
@@ -436,7 +436,7 @@ int vp8_create_decoder_instances(struct frame_buffers *fb, VP8D_CONFIG *oxcf) {
#if CONFIG_MULTITHREAD
if (setjmp(fb->pbi[0]->common.error.jmp)) {
vp8_remove_decoder_instances(fb);
- memset(fb->pbi, 0, sizeof(fb->pbi));
+ vp8_zero(fb->pbi);
vpx_clear_system_state();
return VPX_CODEC_ERROR;
}
diff --git a/vp8/decoder/onyxd_int.h b/vp8/decoder/onyxd_int.h
index 5e1687d1a..75286e430 100644
--- a/vp8/decoder/onyxd_int.h
+++ b/vp8/decoder/onyxd_int.h
@@ -118,6 +118,12 @@ typedef struct VP8D_COMP {
vpx_decrypt_cb decrypt_cb;
void *decrypt_state;
+#if CONFIG_MULTITHREAD
+ // Restart threads on next frame if set to 1.
+ // This is set when error happens in multithreaded decoding and all threads
+ // are shut down.
+ int restart_threads;
+#endif
} VP8D_COMP;
void vp8cx_init_de_quantizer(VP8D_COMP *pbi);
diff --git a/vp8/vp8_dx_iface.c b/vp8/vp8_dx_iface.c
index a72d80505..7db77195b 100644
--- a/vp8/vp8_dx_iface.c
+++ b/vp8/vp8_dx_iface.c
@@ -45,6 +45,12 @@ struct vpx_codec_alg_priv {
vpx_codec_dec_cfg_t cfg;
vp8_stream_info_t si;
int decoder_init;
+#if CONFIG_MULTITHREAD
+ // Restart threads on next frame if set to 1.
+ // This is set when error happens in multithreaded decoding and all threads
+ // are shut down.
+ int restart_threads;
+#endif
int postproc_cfg_set;
vp8_postproc_cfg_t postproc_cfg;
vpx_decrypt_cb decrypt_cb;
@@ -268,7 +274,7 @@ static vpx_codec_err_t vp8_decode(vpx_codec_alg_priv_t *ctx,
const uint8_t *data, unsigned int data_sz,
void *user_priv, long deadline) {
volatile vpx_codec_err_t res;
- unsigned int resolution_change = 0;
+ volatile unsigned int resolution_change = 0;
unsigned int w, h;
if (!ctx->fragments.enabled && (data == NULL && data_sz == 0)) {
@@ -298,6 +304,27 @@ static vpx_codec_err_t vp8_decode(vpx_codec_alg_priv_t *ctx,
if ((ctx->si.h != h) || (ctx->si.w != w)) resolution_change = 1;
+#if CONFIG_MULTITHREAD
+ if (!res && ctx->restart_threads) {
+ struct frame_buffers *fb = &ctx->yv12_frame_buffers;
+ VP8D_COMP *pbi = ctx->yv12_frame_buffers.pbi[0];
+ VP8_COMMON *const pc = &pbi->common;
+ if (setjmp(pbi->common.error.jmp)) {
+ vp8_remove_decoder_instances(fb);
+ vp8_zero(fb->pbi);
+ vpx_clear_system_state();
+ return VPX_CODEC_ERROR;
+ }
+ pbi->common.error.setjmp = 1;
+ pbi->max_threads = ctx->cfg.threads;
+ vp8_decoder_create_threads(pbi);
+ if (vpx_atomic_load_acquire(&pbi->b_multithreaded_rd)) {
+ vp8mt_alloc_temp_buffers(pbi, pc->Width, pc->mb_rows);
+ }
+ ctx->restart_threads = 0;
+ pbi->common.error.setjmp = 0;
+ }
+#endif
/* Initialize the decoder instance on the first frame*/
if (!res && !ctx->decoder_init) {
VP8D_CONFIG oxcf;
@@ -439,9 +466,13 @@ static vpx_codec_err_t vp8_decode(vpx_codec_alg_priv_t *ctx,
pc->fb_idx_ref_cnt[pc->new_fb_idx]--;
}
pc->error.setjmp = 0;
- ctx->si.w = 0;
- ctx->si.h = 0;
- ctx->decoder_init = 0;
+#if CONFIG_MULTITHREAD
+ if (pbi->restart_threads) {
+ ctx->si.w = 0;
+ ctx->si.h = 0;
+ ctx->restart_threads = 1;
+ }
+#endif
res = update_error_state(ctx, &pbi->common.error);
return res;
}
@@ -450,7 +481,9 @@ static vpx_codec_err_t vp8_decode(vpx_codec_alg_priv_t *ctx,
/* update the pbi fragment data */
pbi->fragments = ctx->fragments;
-
+#if CONFIG_MULTITHREAD
+ pbi->restart_threads = 0;
+#endif
ctx->user_priv = user_priv;
if (vp8dx_receive_compressed_data(pbi, data_sz, data, deadline)) {
res = update_error_state(ctx, &pbi->common.error);
diff --git a/vp9/encoder/vp9_encoder.h b/vp9/encoder/vp9_encoder.h
index 18adfebfe..cb9ea2de2 100644
--- a/vp9/encoder/vp9_encoder.h
+++ b/vp9/encoder/vp9_encoder.h
@@ -337,8 +337,7 @@ static INLINE int get_square_block_idx(BLOCK_SIZE bsize) {
if (bsize == BLOCK_32X32) {
return 3;
}
- printf("ERROR: non-square block size\n");
- assert(0);
+ assert(0 && "ERROR: non-square block size");
return -1;
}
@@ -355,8 +354,7 @@ static INLINE BLOCK_SIZE square_block_idx_to_bsize(int square_block_idx) {
if (square_block_idx == 3) {
return BLOCK_32X32;
}
- printf("ERROR: invalid square_block_idx\n");
- assert(0);
+ assert(0 && "ERROR: invalid square_block_idx");
return BLOCK_INVALID;
}
diff --git a/vp9/encoder/vp9_mcomp.c b/vp9/encoder/vp9_mcomp.c
index 05f3f2857..534b15acc 100644
--- a/vp9/encoder/vp9_mcomp.c
+++ b/vp9/encoder/vp9_mcomp.c
@@ -1646,7 +1646,7 @@ static int fast_dia_search(const MACROBLOCK *x, MV *ref_mv, int search_param,
// Exhuastive motion search around a given centre position with a given
// step size.
-static int exhuastive_mesh_search(const MACROBLOCK *x, MV *ref_mv, MV *best_mv,
+static int exhaustive_mesh_search(const MACROBLOCK *x, MV *ref_mv, MV *best_mv,
int range, int step, int sad_per_bit,
const vp9_variance_fn_ptr_t *fn_ptr,
const MV *center_mv) {
@@ -1760,7 +1760,7 @@ double vp9_nb_mvs_inconsistency(const MV *mv, const int_mv *nb_mvs,
return best_cost;
}
-static double exhuastive_mesh_search_new(const MACROBLOCK *x, MV *best_mv,
+static double exhaustive_mesh_search_new(const MACROBLOCK *x, MV *best_mv,
int range, int step,
const vp9_variance_fn_ptr_t *fn_ptr,
const MV *center_mv, double lambda,
@@ -1883,7 +1883,7 @@ static double full_pixel_exhaustive_new(const VP9_COMP *cpi, MACROBLOCK *x,
// initial search
bestsme =
- exhuastive_mesh_search_new(x, &temp_mv, range, interval, fn_ptr, &temp_mv,
+ exhaustive_mesh_search_new(x, &temp_mv, range, interval, fn_ptr, &temp_mv,
lambda, nb_full_mvs, full_mv_num);
if ((interval > MIN_INTERVAL) && (range > MIN_RANGE)) {
@@ -1891,7 +1891,7 @@ static double full_pixel_exhaustive_new(const VP9_COMP *cpi, MACROBLOCK *x,
// till we reach a step size of 1. Then break out.
for (i = 1; i < MAX_MESH_STEP; ++i) {
// First pass with coarser step and longer range
- bestsme = exhuastive_mesh_search_new(
+ bestsme = exhaustive_mesh_search_new(
x, &temp_mv, sf->mesh_patterns[i].range,
sf->mesh_patterns[i].interval, fn_ptr, &temp_mv, lambda, nb_full_mvs,
full_mv_num);
@@ -2581,7 +2581,7 @@ static int full_pixel_exhaustive(VP9_COMP *cpi, MACROBLOCK *x,
interval = VPXMAX(interval, range / baseline_interval_divisor);
// initial search
- bestsme = exhuastive_mesh_search(x, &f_ref_mv, &temp_mv, range, interval,
+ bestsme = exhaustive_mesh_search(x, &f_ref_mv, &temp_mv, range, interval,
sadpb, fn_ptr, &temp_mv);
if ((interval > MIN_INTERVAL) && (range > MIN_RANGE)) {
@@ -2589,7 +2589,7 @@ static int full_pixel_exhaustive(VP9_COMP *cpi, MACROBLOCK *x,
// till we reach a step size of 1. Then break out.
for (i = 1; i < MAX_MESH_STEP; ++i) {
// First pass with coarser step and longer range
- bestsme = exhuastive_mesh_search(
+ bestsme = exhaustive_mesh_search(
x, &f_ref_mv, &temp_mv, sf->mesh_patterns[i].range,
sf->mesh_patterns[i].interval, sadpb, fn_ptr, &temp_mv);
@@ -2868,10 +2868,10 @@ int vp9_full_pixel_search(VP9_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize,
if (method == NSTEP) {
if (sf->exhaustive_searches_thresh < INT_MAX &&
!cpi->rc.is_src_frame_alt_ref) {
- const int64_t exhuastive_thr =
+ const int64_t exhaustive_thr =
sf->exhaustive_searches_thresh >>
(8 - (b_width_log2_lookup[bsize] + b_height_log2_lookup[bsize]));
- if (var > exhuastive_thr) run_exhaustive_search = 1;
+ if (var > exhaustive_thr) run_exhaustive_search = 1;
}
} else if (method == MESH) {
run_exhaustive_search = 1;
diff --git a/vp9/encoder/vp9_mcomp.h b/vp9/encoder/vp9_mcomp.h
index ab880ff9c..6bef88747 100644
--- a/vp9/encoder/vp9_mcomp.h
+++ b/vp9/encoder/vp9_mcomp.h
@@ -167,8 +167,7 @@ static INLINE BLOCK_SIZE get_square_block_size(BLOCK_SIZE bsize) {
case BLOCK_64X64: square_bsize = BLOCK_32X32; break;
default:
square_bsize = BLOCK_INVALID;
- printf("ERROR: invlid block size %d\n", bsize);
- assert(0);
+ assert(0 && "ERROR: invalid block size");
break;
}
return square_bsize;
diff --git a/vp9/encoder/vp9_ratectrl.c b/vp9/encoder/vp9_ratectrl.c
index 5ad68e2e5..4b9fb2754 100644
--- a/vp9/encoder/vp9_ratectrl.c
+++ b/vp9/encoder/vp9_ratectrl.c
@@ -1800,6 +1800,8 @@ void vp9_rc_postencode_update(VP9_COMP *cpi, uint64_t bytes_used) {
}
}
+ if (cpi->use_svc) vp9_svc_adjust_avg_frame_qindex(cpi);
+
// Keep record of last boosted (KF/KF/ARF) Q value.
// If the current frame is coded at a lower Q then we also update it.
// If all mbs in this group are skipped only update if the Q value is
diff --git a/vp9/encoder/vp9_svc_layercontext.c b/vp9/encoder/vp9_svc_layercontext.c
index 3223f714b..35155c71f 100644
--- a/vp9/encoder/vp9_svc_layercontext.c
+++ b/vp9/encoder/vp9_svc_layercontext.c
@@ -1227,3 +1227,25 @@ void vp9_svc_adjust_frame_rate(VP9_COMP *const cpi) {
cpi->svc.timebase_fac * cpi->svc.duration[cpi->svc.spatial_layer_id];
vp9_new_framerate(cpi, 10000000.0 / this_duration);
}
+
+void vp9_svc_adjust_avg_frame_qindex(VP9_COMP *const cpi) {
+ VP9_COMMON *const cm = &cpi->common;
+ SVC *const svc = &cpi->svc;
+ RATE_CONTROL *const rc = &cpi->rc;
+ // On key frames in CBR mode: reset the avg_frame_index for base layer
+ // (to level closer to worst_quality) if the overshoot is significant.
+ // Reset it for all temporal layers on base spatial layer.
+ if (cm->frame_type == KEY_FRAME && cpi->oxcf.rc_mode == VPX_CBR &&
+ rc->projected_frame_size > 3 * rc->avg_frame_bandwidth) {
+ int tl;
+ rc->avg_frame_qindex[INTER_FRAME] =
+ VPXMAX(rc->avg_frame_qindex[INTER_FRAME],
+ (cm->base_qindex + rc->worst_quality) >> 1);
+ for (tl = 0; tl < svc->number_temporal_layers; ++tl) {
+ const int layer = LAYER_IDS_TO_IDX(0, tl, svc->number_temporal_layers);
+ LAYER_CONTEXT *lc = &svc->layer_context[layer];
+ RATE_CONTROL *lrc = &lc->rc;
+ lrc->avg_frame_qindex[INTER_FRAME] = rc->avg_frame_qindex[INTER_FRAME];
+ }
+ }
+}
diff --git a/vp9/encoder/vp9_svc_layercontext.h b/vp9/encoder/vp9_svc_layercontext.h
index c25644617..34795d841 100644
--- a/vp9/encoder/vp9_svc_layercontext.h
+++ b/vp9/encoder/vp9_svc_layercontext.h
@@ -262,6 +262,7 @@ void vp9_svc_update_ref_frame(struct VP9_COMP *const cpi);
void vp9_svc_adjust_frame_rate(struct VP9_COMP *const cpi);
+void vp9_svc_adjust_avg_frame_qindex(struct VP9_COMP *const cpi);
#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/vp9/encoder/vp9_temporal_filter.c b/vp9/encoder/vp9_temporal_filter.c
index db23b8e6f..cd340c394 100644
--- a/vp9/encoder/vp9_temporal_filter.c
+++ b/vp9/encoder/vp9_temporal_filter.c
@@ -110,11 +110,16 @@ static void temporal_filter_predictors_mb_c(
CONVERT_TO_SHORTPTR(y_mb_ptr + y_offset), stride,
CONVERT_TO_SHORTPTR(&pred[p_offset]), BW, &mv, scale, xs, ys,
which_mv, kernel, MV_PRECISION_Q3, x, y, xd->bd);
+ } else {
+ vp9_build_inter_predictor(y_mb_ptr + y_offset, stride, &pred[p_offset],
+ BW, &mv, scale, xs, ys, which_mv, kernel,
+ MV_PRECISION_Q3, x, y);
}
-#endif // CONFIG_VP9_HIGHBITDEPTH
+#else
vp9_build_inter_predictor(y_mb_ptr + y_offset, stride, &pred[p_offset],
BW, &mv, scale, xs, ys, which_mv, kernel,
MV_PRECISION_Q3, x, y);
+#endif // CONFIG_VP9_HIGHBITDEPTH
k++;
}
}
@@ -143,8 +148,18 @@ static void temporal_filter_predictors_mb_c(
CONVERT_TO_SHORTPTR(&pred[(BLK_PELS << 1) + p_offset]),
uv_block_width, &mv, scale, xs, ys, which_mv, kernel,
mv_precision_uv, x, y, xd->bd);
+ } else {
+ vp9_build_inter_predictor(u_mb_ptr + uv_offset, uv_stride,
+ &pred[BLK_PELS + p_offset], uv_block_width,
+ &mv, scale, xs, ys, which_mv, kernel,
+ mv_precision_uv, x, y);
+
+ vp9_build_inter_predictor(v_mb_ptr + uv_offset, uv_stride,
+ &pred[(BLK_PELS << 1) + p_offset],
+ uv_block_width, &mv, scale, xs, ys, which_mv,
+ kernel, mv_precision_uv, x, y);
}
-#endif // CONFIG_VP9_HIGHBITDEPTH
+#else
vp9_build_inter_predictor(u_mb_ptr + uv_offset, uv_stride,
&pred[BLK_PELS + p_offset], uv_block_width, &mv,
scale, xs, ys, which_mv, kernel,
@@ -154,6 +169,7 @@ static void temporal_filter_predictors_mb_c(
&pred[(BLK_PELS << 1) + p_offset],
uv_block_width, &mv, scale, xs, ys, which_mv,
kernel, mv_precision_uv, x, y);
+#endif // CONFIG_VP9_HIGHBITDEPTH
k++;
}
}
diff --git a/vpx/vpx_frame_buffer.h b/vpx/vpx_frame_buffer.h
index 2813ca6d9..fc8320017 100644
--- a/vpx/vpx_frame_buffer.h
+++ b/vpx/vpx_frame_buffer.h
@@ -52,9 +52,9 @@ typedef struct vpx_codec_frame_buffer {
* data. The callback is triggered when the decoder needs a frame buffer to
* decode a compressed image into. This function may be called more than once
* for every call to vpx_codec_decode. The application may set fb->priv to
- * some data which will be passed back in the ximage and the release function
- * call. |fb| is guaranteed to not be NULL. On success the callback must
- * return 0. Any failure the callback must return a value less than 0.
+ * some data which will be passed back in the vpx_image_t and the release
+ * function call. |fb| is guaranteed to not be NULL. On success the callback
+ * must return 0. Any failure the callback must return a value less than 0.
*
* \param[in] priv Callback's private data
* \param[in] min_size Size in bytes needed by the buffer
diff --git a/vpx_dsp/arm/highbd_idct16x16_add_neon.c b/vpx_dsp/arm/highbd_idct16x16_add_neon.c
index 69196e174..654ab42ca 100644
--- a/vpx_dsp/arm/highbd_idct16x16_add_neon.c
+++ b/vpx_dsp/arm/highbd_idct16x16_add_neon.c
@@ -926,8 +926,8 @@ static void vpx_highbd_idct16x16_38_add_half1d(const int32_t *input,
}
}
-void vpx_highbd_idct16x16_10_add_half1d_pass1(const tran_low_t *input,
- int32_t *output) {
+static void highbd_idct16x16_10_add_half1d_pass1(const tran_low_t *input,
+ int32_t *output) {
const int32x4_t cospi_0_8_16_24 = vld1q_s32(kCospi32 + 0);
const int32x4_t cospi_4_12_20N_28 = vld1q_s32(kCospi32 + 4);
const int32x4_t cospi_2_30_10_22 = vld1q_s32(kCospi32 + 8);
@@ -1065,10 +1065,11 @@ void vpx_highbd_idct16x16_10_add_half1d_pass1(const tran_low_t *input,
vst1q_s32(output, out[15]);
}
-void vpx_highbd_idct16x16_10_add_half1d_pass2(const int32_t *input,
- int32_t *const output,
- uint16_t *const dest,
- const int stride, const int bd) {
+static void highbd_idct16x16_10_add_half1d_pass2(const int32_t *input,
+ int32_t *const output,
+ uint16_t *const dest,
+ const int stride,
+ const int bd) {
const int32x4_t cospi_0_8_16_24 = vld1q_s32(kCospi32 + 0);
const int32x4_t cospi_4_12_20N_28 = vld1q_s32(kCospi32 + 4);
const int32x4_t cospi_2_30_10_22 = vld1q_s32(kCospi32 + 8);
@@ -1289,16 +1290,16 @@ void vpx_highbd_idct16x16_10_add_neon(const tran_low_t *input, uint16_t *dest,
// pass 1
// Parallel idct on the upper 8 rows
- vpx_highbd_idct16x16_10_add_half1d_pass1(input, row_idct_output);
+ highbd_idct16x16_10_add_half1d_pass1(input, row_idct_output);
// pass 2
// Parallel idct to get the left 8 columns
- vpx_highbd_idct16x16_10_add_half1d_pass2(row_idct_output, NULL, dest,
- stride, bd);
+ highbd_idct16x16_10_add_half1d_pass2(row_idct_output, NULL, dest, stride,
+ bd);
// Parallel idct to get the right 8 columns
- vpx_highbd_idct16x16_10_add_half1d_pass2(row_idct_output + 4 * 8, NULL,
- dest + 8, stride, bd);
+ highbd_idct16x16_10_add_half1d_pass2(row_idct_output + 4 * 8, NULL,
+ dest + 8, stride, bd);
}
}
diff --git a/vpx_scale/generic/yv12config.c b/vpx_scale/generic/yv12config.c
index 08679a472..eee291c30 100644
--- a/vpx_scale/generic/yv12config.c
+++ b/vpx_scale/generic/yv12config.c
@@ -228,6 +228,7 @@ int vpx_realloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, int width, int height,
// Allocation to hold larger frame, or first allocation.
vpx_free(ybf->buffer_alloc);
ybf->buffer_alloc = NULL;
+ ybf->buffer_alloc_sz = 0;
ybf->buffer_alloc = (uint8_t *)vpx_memalign(32, (size_t)frame_size);
if (!ybf->buffer_alloc) return -1;