History

[Encoder] Add single-block SSE2 4x4 DCT/IDCT routines

We do four blocks at a time when possible, but need to handle single blocks at a time for intra prediction. ~2.31x speedup over MMX for the DCT on Haswell. ~1.92x speedup over MMX for the IDCT on Haswell.

Sindre Aamås committed 10 years ago

Commit f9096091 parent 7486de27 files · +157 −31Browse files

Showing the changes to test/encoder/EncUT_EncoderMbAux.cpp (1 of 7 files). Show all

Unified · Split

test/encoder/EncUT_EncoderMbAux.cpp+11−2
@@ -147,8 +147,10 @@ static void Sub8x8DctAnchor (int16_t iDct[4][4][4], uint8_t* pPix1, uint8_t* pPi · 146 unmodified lines
147147 }
148148 static void TestDctT4 (PDctFunc func) {
149149 int16_t iDctRef[4][4];
150− uint8_t uiPix1[16 * FENC_STRIDE], uiPix2[16 * FDEC_STRIDE];
151− int16_t iDct[16];
150+ CMemoryAlign cMemoryAlign (0);
151+ ALLOC_MEMORY (uint8_t, uiPix1, 16 * FENC_STRIDE);
152+ ALLOC_MEMORY (uint8_t, uiPix2, 16 * FDEC_STRIDE);
153+ ALLOC_MEMORY (int16_t, iDct, 16);
152154 for (int i = 0; i < 4; i++) {
153155 for (int j = 0; j < 4; j++) {
154156 uiPix1[i * FENC_STRIDE + j] = rand() & 255;
@@ -160,6 +162,9 @@ static void TestDctT4 (PDctFunc func) { · 5 unmodified lines
160162 for (int i = 0; i < 4; i++)
161163 for (int j = 0; j < 4; j++)
162164 EXPECT_EQ (iDctRef[j][i], iDct[i * 4 + j]);
165+ FREE_MEMORY (uiPix1);
166+ FREE_MEMORY (uiPix2);
167+ FREE_MEMORY (iDct);
163168 }
164169 static void TestDctFourT4 (PDctFunc func) {
165170 int16_t iDctRef[4][4][4];
@@ -195,6 +200,10 @@ TEST (EncodeMbAuxTest, WelsDctT4_mmx) { · 29 unmodified lines
195200 TestDctT4 (WelsDctT4_mmx);
196201 }
197202
203+TEST (EncodeMbAuxTest, WelsDctT4_sse2) {
204+ TestDctT4 (WelsDctT4_sse2);
205+}
206+
198207 TEST (EncodeMbAuxTest, WelsDctFourT4_sse2) {
199208 TestDctFourT4 (WelsDctFourT4_sse2);
200209 }

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