Wrap unsafe downcast from int32_t to tran_low_t And assert that sizeof(tran_low_t) == sizeof(int32_t). Change-Id: I0bf1b7f3d1ba63eeea1eee87a9a0fe0b80b95078
diff --git a/av1/common/idct.c b/av1/common/idct.c index 5cde3b7..9d64afb 100644 --- a/av1/common/idct.c +++ b/av1/common/idct.c
@@ -2184,12 +2184,17 @@ } #endif +static const int32_t *cast_to_int32(const tran_low_t *input) { + assert(sizeof(int32_t) == sizeof(tran_low_t)); + return (const int32_t *)input; +} + void av1_highbd_inv_txfm_add_4x4(const tran_low_t *input, uint8_t *dest, int stride, const TxfmParam *txfm_param) { int eob = txfm_param->eob; int bd = txfm_param->bd; int lossless = txfm_param->lossless; - const int32_t *src = (const int32_t *)input; + const int32_t *src = cast_to_int32(input); TX_TYPE tx_type = txfm_param->tx_type; if (lossless) { assert(tx_type == DCT_DCT); @@ -2231,42 +2236,42 @@ void av1_highbd_inv_txfm_add_4x8(const tran_low_t *input, uint8_t *dest, int stride, const TxfmParam *txfm_param) { - const int32_t *src = (const int32_t *)input; + const int32_t *src = cast_to_int32(input); av1_inv_txfm2d_add_4x8_c(src, CONVERT_TO_SHORTPTR(dest), stride, txfm_param->tx_type, txfm_param->bd); } void av1_highbd_inv_txfm_add_8x4(const tran_low_t *input, uint8_t *dest, int stride, const TxfmParam *txfm_param) { - const int32_t *src = (const int32_t *)input; + const int32_t *src = cast_to_int32(input); av1_inv_txfm2d_add_8x4_c(src, CONVERT_TO_SHORTPTR(dest), stride, txfm_param->tx_type, txfm_param->bd); } static void highbd_inv_txfm_add_8x16(const tran_low_t *input, uint8_t *dest, int stride, const TxfmParam *txfm_param) { - const int32_t *src = (const int32_t *)input; + const int32_t *src = cast_to_int32(input); av1_inv_txfm2d_add_8x16_c(src, CONVERT_TO_SHORTPTR(dest), stride, txfm_param->tx_type, txfm_param->bd); } static void highbd_inv_txfm_add_16x8(const tran_low_t *input, uint8_t *dest, int stride, const TxfmParam *txfm_param) { - const int32_t *src = (const int32_t *)input; + const int32_t *src = cast_to_int32(input); av1_inv_txfm2d_add_16x8_c(src, CONVERT_TO_SHORTPTR(dest), stride, txfm_param->tx_type, txfm_param->bd); } static void highbd_inv_txfm_add_16x32(const tran_low_t *input, uint8_t *dest, int stride, const TxfmParam *txfm_param) { - const int32_t *src = (const int32_t *)input; + const int32_t *src = cast_to_int32(input); av1_inv_txfm2d_add_16x32_c(src, CONVERT_TO_SHORTPTR(dest), stride, txfm_param->tx_type, txfm_param->bd); } static void highbd_inv_txfm_add_32x16(const tran_low_t *input, uint8_t *dest, int stride, const TxfmParam *txfm_param) { - const int32_t *src = (const int32_t *)input; + const int32_t *src = cast_to_int32(input); av1_inv_txfm2d_add_32x16_c(src, CONVERT_TO_SHORTPTR(dest), stride, txfm_param->tx_type, txfm_param->bd); } @@ -2274,14 +2279,14 @@ #if CONFIG_TX64X64 static void highbd_inv_txfm_add_32x64(const tran_low_t *input, uint8_t *dest, int stride, const TxfmParam *txfm_param) { - const int32_t *src = (const int32_t *)input; + const int32_t *src = cast_to_int32(input); av1_inv_txfm2d_add_32x64_c(src, CONVERT_TO_SHORTPTR(dest), stride, txfm_param->tx_type, txfm_param->bd); } static void highbd_inv_txfm_add_64x32(const tran_low_t *input, uint8_t *dest, int stride, const TxfmParam *txfm_param) { - const int32_t *src = (const int32_t *)input; + const int32_t *src = cast_to_int32(input); av1_inv_txfm2d_add_64x32_c(src, CONVERT_TO_SHORTPTR(dest), stride, txfm_param->tx_type, txfm_param->bd); } @@ -2291,7 +2296,7 @@ int stride, const TxfmParam *txfm_param) { int bd = txfm_param->bd; TX_TYPE tx_type = txfm_param->tx_type; - const int32_t *src = (const int32_t *)input; + const int32_t *src = cast_to_int32(input); switch (tx_type) { case DCT_DCT: case ADST_DCT: @@ -2329,7 +2334,7 @@ int stride, const TxfmParam *txfm_param) { int bd = txfm_param->bd; TX_TYPE tx_type = txfm_param->tx_type; - const int32_t *src = (const int32_t *)input; + const int32_t *src = cast_to_int32(input); switch (tx_type) { case DCT_DCT: case ADST_DCT: @@ -2367,7 +2372,7 @@ int stride, const TxfmParam *txfm_param) { int bd = txfm_param->bd; TX_TYPE tx_type = txfm_param->tx_type; - const int32_t *src = (const int32_t *)input; + const int32_t *src = cast_to_int32(input); switch (tx_type) { case DCT_DCT: av1_inv_txfm2d_add_32x32(src, CONVERT_TO_SHORTPTR(dest), stride, tx_type, @@ -2406,7 +2411,7 @@ int stride, const TxfmParam *txfm_param) { int bd = txfm_param->bd; TX_TYPE tx_type = txfm_param->tx_type; - const int32_t *src = (const int32_t *)input; + const int32_t *src = cast_to_int32(input); switch (tx_type) { case DCT_DCT: av1_inv_txfm2d_add_64x64(src, CONVERT_TO_SHORTPTR(dest), stride, DCT_DCT,