Showing the changes to codec/processing/src/downsample/downsamplefuncs.cpp (1 of 9 files). Show all
Unified · Split
| @@ -68,6 +68,53 @@ void DyadicBilinearDownsampler_c (uint8_t* pDst, const int32_t kiDstStride, · 67 unmodified lines | |||
| 68 | } | 68 | } |
| 69 | } | 69 | } |
| 70 | 70 | ||
| 71 | void DyadicBilinearQuarterDownsampler_c (uint8_t* pDst, const int32_t kiDstStride, | ||
| 72 | uint8_t* pSrc, const int32_t kiSrcStride, | ||
| 73 | const int32_t kiSrcWidth, const int32_t kiSrcHeight) | ||
| 74 | |||
| 75 | { | ||
| 76 | uint8_t* pDstLine = pDst; | ||
| 77 | uint8_t* pSrcLine = pSrc; | ||
| 78 | const int32_t kiSrcStridex4 = kiSrcStride << 2; | ||
| 79 | const int32_t kiDstWidth = kiSrcWidth >> 2; | ||
| 80 | const int32_t kiDstHeight = kiSrcHeight >> 2; | ||
| 81 | |||
| 82 | for (int32_t j = 0; j < kiDstHeight; j ++) { | ||
| 83 | for (int32_t i = 0; i < kiDstWidth; i ++) { | ||
| 84 | const int32_t kiSrcX = i << 2; | ||
| 85 | const int32_t kiTempRow1 = (pSrcLine[kiSrcX] + pSrcLine[kiSrcX + 1] + 1) >> 1; | ||
| 86 | const int32_t kiTempRow2 = (pSrcLine[kiSrcX + kiSrcStride] + pSrcLine[kiSrcX + kiSrcStride + 1] + 1) >> 1; | ||
| 87 | |||
| 88 | pDstLine[i] = (uint8_t) ((kiTempRow1 + kiTempRow2 + 1) >> 1); | ||
| 89 | } | ||
| 90 | pDstLine += kiDstStride; | ||
| 91 | pSrcLine += kiSrcStridex4; | ||
| 92 | } | ||
| 93 | } | ||
| 94 | |||
| 95 | void DyadicBilinearOneThirdDownsampler_c (uint8_t* pDst, const int32_t kiDstStride, | ||
| 96 | uint8_t* pSrc, const int32_t kiSrcStride, | ||
| 97 | const int32_t kiSrcWidth, const int32_t kiDstHeight) | ||
| 98 | |||
| 99 | { | ||
| 100 | uint8_t* pDstLine = pDst; | ||
| 101 | uint8_t* pSrcLine = pSrc; | ||
| 102 | const int32_t kiSrcStridex3 = kiSrcStride * 3; | ||
| 103 | const int32_t kiDstWidth = kiSrcWidth / 3; | ||
| 104 | |||
| 105 | for (int32_t j = 0; j < kiDstHeight; j ++) { | ||
| 106 | for (int32_t i = 0; i < kiDstWidth; i ++) { | ||
| 107 | const int32_t kiSrcX = i * 3; | ||
| 108 | const int32_t kiTempRow1 = (pSrcLine[kiSrcX] + pSrcLine[kiSrcX + 1] + 1) >> 1; | ||
| 109 | const int32_t kiTempRow2 = (pSrcLine[kiSrcX + kiSrcStride] + pSrcLine[kiSrcX + kiSrcStride + 1] + 1) >> 1; | ||
| 110 | |||
| 111 | pDstLine[i] = (uint8_t) ((kiTempRow1 + kiTempRow2 + 1) >> 1); | ||
| 112 | } | ||
| 113 | pDstLine += kiDstStride; | ||
| 114 | pSrcLine += kiSrcStridex3; | ||
| 115 | } | ||
| 116 | } | ||
| 117 | |||
| 71 | void GeneralBilinearFastDownsampler_c (uint8_t* pDst, const int32_t kiDstStride, const int32_t kiDstWidth, | 118 | void GeneralBilinearFastDownsampler_c (uint8_t* pDst, const int32_t kiDstStride, const int32_t kiDstWidth, |
| 72 | const int32_t kiDstHeight, | 119 | const int32_t kiDstHeight, |
| 73 | uint8_t* pSrc, const int32_t kiSrcStride, const int32_t kiSrcWidth, const int32_t kiSrcHeight) { | 120 | uint8_t* pSrc, const int32_t kiSrcStride, const int32_t kiSrcWidth, const int32_t kiSrcHeight) { |