Use highbd for obmc dsp functions Low bd functions were used for obmc dsp functions for 8 bits input, however this caused crash when forcing 16bits pipeline. Add example test. Bug: aomedia:2940 Change-Id: I41e3845b410ea258ed05ae66926d34212e86788e
diff --git a/av1/encoder/encoder_utils.h b/av1/encoder/encoder_utils.h index 4e854ab..40652e9 100644 --- a/av1/encoder/encoder_utils.h +++ b/av1/encoder/encoder_utils.h
@@ -479,17 +479,13 @@ #if !CONFIG_REALTIME_ONLY -#define LOWBD_OBFP(BT, OSDF, OVF, OSVF) \ - cpi->fn_ptr[BT].osdf = OSDF; \ - cpi->fn_ptr[BT].ovf = OVF; \ - cpi->fn_ptr[BT].osvf = OSVF; - -#define LOWBD_OBFP_WRAPPER(WIDTH, HEIGHT) \ - LOWBD_OBFP(BLOCK_##WIDTH##X##HEIGHT, aom_obmc_sad##WIDTH##x##HEIGHT, \ - aom_obmc_variance##WIDTH##x##HEIGHT, \ - aom_obmc_sub_pixel_variance##WIDTH##x##HEIGHT) - #if CONFIG_AV1_HIGHBITDEPTH +#define HIGHBD_OBFP_WRAPPER_8(WIDTH, HEIGHT) \ + HIGHBD_OBFP(BLOCK_##WIDTH##X##HEIGHT, \ + aom_highbd_obmc_sad##WIDTH##x##HEIGHT##_bits8, \ + aom_highbd_obmc_variance##WIDTH##x##HEIGHT, \ + aom_highbd_obmc_sub_pixel_variance##WIDTH##x##HEIGHT) + #define HIGHBD_OBFP(BT, OSDF, OVF, OSVF) \ cpi->fn_ptr[BT].osdf = OSDF; \ cpi->fn_ptr[BT].ovf = OVF; \ @@ -502,6 +498,11 @@ aom_highbd_##BD##_obmc_sub_pixel_variance##WIDTH##x##HEIGHT) #define MAKE_OBFP_SAD_WRAPPER(fnname) \ + static unsigned int fnname##_bits8(const uint8_t *ref, int ref_stride, \ + const int32_t *wsrc, \ + const int32_t *msk) { \ + return fnname(ref, ref_stride, wsrc, msk); \ + } \ static unsigned int fnname##_bits10(const uint8_t *ref, int ref_stride, \ const int32_t *wsrc, \ const int32_t *msk) { \ @@ -598,28 +599,28 @@ // OBMC excluded from realtime only build. #if !CONFIG_REALTIME_ONLY - LOWBD_OBFP_WRAPPER(128, 128) - LOWBD_OBFP_WRAPPER(128, 64) - LOWBD_OBFP_WRAPPER(64, 128) - LOWBD_OBFP_WRAPPER(64, 64) - LOWBD_OBFP_WRAPPER(64, 32) - LOWBD_OBFP_WRAPPER(32, 64) - LOWBD_OBFP_WRAPPER(32, 32) - LOWBD_OBFP_WRAPPER(32, 16) - LOWBD_OBFP_WRAPPER(16, 32) - LOWBD_OBFP_WRAPPER(16, 16) - LOWBD_OBFP_WRAPPER(8, 16) - LOWBD_OBFP_WRAPPER(16, 8) - LOWBD_OBFP_WRAPPER(8, 8) - LOWBD_OBFP_WRAPPER(4, 8) - LOWBD_OBFP_WRAPPER(8, 4) - LOWBD_OBFP_WRAPPER(4, 4) - LOWBD_OBFP_WRAPPER(64, 16) - LOWBD_OBFP_WRAPPER(16, 64) - LOWBD_OBFP_WRAPPER(32, 8) - LOWBD_OBFP_WRAPPER(8, 32) - LOWBD_OBFP_WRAPPER(16, 4) - LOWBD_OBFP_WRAPPER(4, 16) + HIGHBD_OBFP_WRAPPER_8(128, 128) + HIGHBD_OBFP_WRAPPER_8(128, 64) + HIGHBD_OBFP_WRAPPER_8(64, 128) + HIGHBD_OBFP_WRAPPER_8(64, 64) + HIGHBD_OBFP_WRAPPER_8(64, 32) + HIGHBD_OBFP_WRAPPER_8(32, 64) + HIGHBD_OBFP_WRAPPER_8(32, 32) + HIGHBD_OBFP_WRAPPER_8(32, 16) + HIGHBD_OBFP_WRAPPER_8(16, 32) + HIGHBD_OBFP_WRAPPER_8(16, 16) + HIGHBD_OBFP_WRAPPER_8(8, 16) + HIGHBD_OBFP_WRAPPER_8(16, 8) + HIGHBD_OBFP_WRAPPER_8(8, 8) + HIGHBD_OBFP_WRAPPER_8(4, 8) + HIGHBD_OBFP_WRAPPER_8(8, 4) + HIGHBD_OBFP_WRAPPER_8(4, 4) + HIGHBD_OBFP_WRAPPER_8(64, 16) + HIGHBD_OBFP_WRAPPER_8(16, 64) + HIGHBD_OBFP_WRAPPER_8(32, 8) + HIGHBD_OBFP_WRAPPER_8(8, 32) + HIGHBD_OBFP_WRAPPER_8(16, 4) + HIGHBD_OBFP_WRAPPER_8(4, 16) #endif HIGHBD_SDSFP_WRAPPER(128, 128, 8);
diff --git a/test/aomenc.sh b/test/aomenc.sh index 0c0d1b1..86fe5f6 100755 --- a/test/aomenc.sh +++ b/test/aomenc.sh
@@ -98,6 +98,25 @@ fi } +aomenc_av1_ivf_use_16bit_internal() { + if [ "$(aomenc_can_encode_av1)" = "yes" ]; then + local output="${AV1_IVF_FILE}" + if [ -e "${AV1_IVF_FILE}" ]; then + output="${AOM_TEST_OUTPUT_DIR}/av1_test_16bit.ivf" + fi + aomenc $(yuv_raw_input) \ + $(aomenc_encode_test_fast_params) \ + --ivf \ + --use-16bit-internal \ + --output="${output}" || return 1 + + if [ ! -e "${output}" ]; then + elog "Output file does not exist." + return 1 + fi + fi +} + aomenc_av1_obu_annexb() { if [ "$(aomenc_can_encode_av1)" = "yes" ]; then local output="${AV1_OBU_ANNEXB_FILE}" @@ -262,6 +281,7 @@ aomenc_av1_webm_1pass aomenc_av1_ivf_lossless aomenc_av1_ivf_minq0_maxq0 + aomenc_av1_ivf_use_16bit_internal aomenc_av1_webm_lag5_frames10 aomenc_av1_webm_non_square_par aomenc_av1_webm_cdf_update_mode"