| 9 | using namespace WelsVP; |
| 10 | |
| 11 | void DyadicBilinearDownsampler_ref (uint8_t* pDst, const int32_t kiDstStride, |
| 12 | uint8_t* pSrc, const int32_t kiSrcStride, |
| 13 | const int32_t kiSrcWidth, const int32_t kiSrcHeight) { |
| 14 | uint8_t* pDstLine = pDst; |
| 15 | uint8_t* pSrcLine = pSrc; |
| 16 | const int32_t kiSrcStridex2 = kiSrcStride << 1; |
| 17 | const int32_t kiDstWidth = kiSrcWidth >> 1; |
| 18 | const int32_t kiDstHeight = kiSrcHeight >> 1; |
| 19 | |
| 20 | for (int32_t j = 0; j < kiDstHeight; j ++) { |
| 21 | for (int32_t i = 0; i < kiDstWidth; i ++) { |
| 22 | const int32_t kiSrcX = i << 1; |
| 23 | const int32_t kiTempRow1 = (pSrcLine[kiSrcX] + pSrcLine[kiSrcX + 1] + 1) >> 1; |
| 24 | const int32_t kiTempRow2 = (pSrcLine[kiSrcX + kiSrcStride] + pSrcLine[kiSrcX + kiSrcStride + 1] + 1) >> 1; |
| 25 | |
| 26 | pDstLine[i] = (uint8_t) ((kiTempRow1 + kiTempRow2 + 1) >> 1); |
| 27 | } |
| 28 | pDstLine += kiDstStride; |
| 29 | pSrcLine += kiSrcStridex2; |
| 30 | } |
| 31 | } |
| 32 | |
| 33 | void DyadicBilinearDownsampler2_ref (uint8_t* pDst, const int32_t kiDstStride, |
| 34 | const uint8_t* pSrc, const int32_t kiSrcStride, |
nothing calls this directly
no outgoing calls
no test coverage detected