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 | 118 | void GeneralBilinearFastDownsampler_c (uint8_t* pDst, const int32_t kiDstStride, const int32_t kiDstWidth, |
| 72 | 119 | const int32_t kiDstHeight, |
| 73 | 120 | uint8_t* pSrc, const int32_t kiSrcStride, const int32_t kiSrcWidth, const int32_t kiSrcHeight) { |