History

add new c and assembly functions to optimize downsampler when downscale equal 1:3/1:4

Guangwei Wang committed 11 years ago

Commit 64657d31 parent 69a62ea9 files · +1125 −8Browse files

Showing the changes to codec/processing/src/downsample/downsamplefuncs.cpp (1 of 9 files). Show all

Unified · Split

codec/processing/src/downsample/downsamplefuncs.cpp+47−0
@@ -68,6 +68,53 @@ void DyadicBilinearDownsampler_c (uint8_t* pDst, const int32_t kiDstStride, · 67 unmodified lines
68 }68 }
69}69}
70 70
71void 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
95void 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
71void GeneralBilinearFastDownsampler_c (uint8_t* pDst, const int32_t kiDstStride, const int32_t kiDstWidth,118void 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) {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t