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
6868 }
6969 }
7070
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+
71118 void GeneralBilinearFastDownsampler_c (uint8_t* pDst, const int32_t kiDstStride, const int32_t kiDstWidth,
72119 const int32_t kiDstHeight,
73120 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