History

[UT] Add some missing quantization tests

Sindre Aamås committed 10 years ago

Commit 1e83bec1 parent abaf3a41 file · +104 −13Browse files

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

Unified · Split

test/encoder/EncUT_EncoderMbAux.cpp+104−13
@@ -3,6 +3,8 @@ · 2 unmodified lines
33 #include "ls_defines.h"
44 #include "encode_mb_aux.h"
55 #include "wels_common_basis.h"
6+#include <algorithm>
7+#include <cstddef>
68
79 using namespace WelsEnc;
810
@@ -293,21 +295,92 @@ TEST (EncodeMbAuxTest, WelsGetNoneZeroCount_sse2) { · 284 unmodified lines
293295 #define NEW_QUANT(pDct, ff, mf) (((ff)+ WELS_ABS_LC(pDct))*(mf)) >>16
294296 #define WELS_NEW_QUANT(pDct,ff,mf) WELS_ABS_LC(NEW_QUANT(pDct, ff, mf))
295297 namespace {
298+int16_t WelsQuant4x4MaxAnchor (int16_t* pDct, int16_t* ff, int16_t* mf) {
299+ int16_t max_abs = 0;
300+ for (int i = 0; i < 16; i++) {
301+ const int j = i & 0x07;
302+ const int32_t sign = WELS_SIGN (pDct[i]);
303+ pDct[i] = NEW_QUANT (pDct[i], ff[j], mf[j]);
304+ max_abs = std::max(max_abs, pDct[i]);
305+ pDct[i] = WELS_ABS_LC (pDct[i]);
306+ }
307+ return max_abs;
308+}
309+void WelsQuant4x4DcAnchor (int16_t* pDct, int16_t iFF, int16_t iMF) {
310+ for (int i = 0; i < 16; i++) {
311+ const int32_t sign = WELS_SIGN (pDct[i]);
312+ pDct[i] = WELS_NEW_QUANT (pDct[i], iFF, iMF);
313+ }
314+}
315+void WelsQuantFour4x4Anchor (int16_t* pDct, int16_t* ff, int16_t* mf) {
316+ for (int i = 0; i < 4; i++)
317+ WelsQuant4x4MaxAnchor (pDct + 16 * i, ff, mf);
318+}
296319 void WelsQuantFour4x4MaxAnchor (int16_t* pDct, int16_t* ff, int16_t* mf, int16_t* max) {
297− int32_t i, j, k, sign;
298− int16_t max_abs;
299− for (k = 0; k < 4; k++) {
300− max_abs = 0;
301− for (i = 0; i < 16; i++) {
302− j = i & 0x07;
303− sign = WELS_SIGN (pDct[i]);
304− pDct[i] = NEW_QUANT (pDct[i], ff[j], mf[j]);
305− if (max_abs < pDct[i]) max_abs = pDct[i];
306− pDct[i] = WELS_ABS_LC (pDct[i]);
307− }
308− pDct += 16;
309− max[k] = max_abs;
320+ for (int i = 0; i < 4; i++)
321+ max[i] = WelsQuant4x4MaxAnchor (pDct + 16 * i, ff, mf);
322+}
323+void TestWelsQuant4x4 (PQuantizationFunc func) {
324+ const std::size_t f_size = 8;
325+ const std::size_t dct_size = 16;
326+ CMemoryAlign cMemoryAlign (0);
327+ ALLOC_MEMORY (int16_t, ff, f_size);
328+ ALLOC_MEMORY (int16_t, mf, f_size);
329+ ALLOC_MEMORY (int16_t, iDctC, dct_size);
330+ ALLOC_MEMORY (int16_t, iDctS, dct_size);
331+ for (std::size_t i = 0; i < f_size; i++) {
332+ ff[i] = rand() & 32767;
333+ mf[i] = rand() & 32767;
310334 }
335+ for (std::size_t i = 0; i < dct_size; i++)
336+ iDctC[i] = iDctS[i] = (rand() & 65535) - 32768;
337+ WelsQuant4x4MaxAnchor (iDctC, ff, mf);
338+ func (iDctS, ff, mf);
339+ for (std::size_t i = 0; i < dct_size; i++)
340+ EXPECT_EQ (iDctC[i], iDctS[i]);
341+ FREE_MEMORY (ff);
342+ FREE_MEMORY (mf);
343+ FREE_MEMORY (iDctC);
344+ FREE_MEMORY (iDctS);
345+}
346+void TestWelsQuant4x4Dc (PQuantizationDcFunc func) {
347+ const std::size_t dct_size = 16;
348+ const int16_t ff = rand() & 32767;
349+ const int16_t mf = rand() & 32767;
350+ CMemoryAlign cMemoryAlign (0);
351+ ALLOC_MEMORY (int16_t, iDctC, dct_size);
352+ ALLOC_MEMORY (int16_t, iDctS, dct_size);
353+ for (std::size_t i = 0; i < dct_size; i++)
354+ iDctC[i] = iDctS[i] = (rand() & 65535) - 32768;
355+ WelsQuant4x4DcAnchor (iDctC, ff, mf);
356+ func (iDctS, ff, mf);
357+ for (std::size_t i = 0; i < dct_size; i++)
358+ EXPECT_EQ (iDctC[i], iDctS[i]);
359+ FREE_MEMORY (iDctC);
360+ FREE_MEMORY (iDctS);
361+}
362+void TestWelsQuantFour4x4 (PQuantizationFunc func) {
363+ const std::size_t f_size = 8;
364+ const std::size_t dct_size = 4 * 16;
365+ CMemoryAlign cMemoryAlign (0);
366+ ALLOC_MEMORY (int16_t, ff, f_size);
367+ ALLOC_MEMORY (int16_t, mf, f_size);
368+ ALLOC_MEMORY (int16_t, iDctC, dct_size);
369+ ALLOC_MEMORY (int16_t, iDctS, dct_size);
370+ for (std::size_t i = 0; i < f_size; i++) {
371+ ff[i] = rand() & 32767;
372+ mf[i] = rand() & 32767;
373+ }
374+ for (std::size_t i = 0; i < dct_size; i++)
375+ iDctC[i] = iDctS[i] = (rand() & 65535) - 32768;
376+ WelsQuantFour4x4Anchor (iDctC, ff, mf);
377+ func (iDctS, ff, mf);
378+ for (std::size_t i = 0; i < dct_size; i++)
379+ EXPECT_EQ (iDctC[i], iDctS[i]);
380+ FREE_MEMORY (ff);
381+ FREE_MEMORY (mf);
382+ FREE_MEMORY (iDctC);
383+ FREE_MEMORY (iDctS);
311384 }
312385 void TestWelsQuantFour4x4Max (PQuantizationMaxFunc func) {
313386 CMemoryAlign cMemoryAlign (0);
@@ -337,10 +410,28 @@ void TestWelsQuantFour4x4Max (PQuantizationMaxFunc func) { · 23 unmodified lines
337410 FREE_MEMORY (iMaxS);
338411 }
339412 } // anon ns
413+TEST (EncodeMbAuxTest, WelsQuant4x4_c) {
414+ TestWelsQuant4x4 (WelsQuant4x4_c);
415+}
416+TEST (EncodeMbAuxTest, WelsQuant4x4Dc_c) {
417+ TestWelsQuant4x4Dc (WelsQuant4x4Dc_c);
418+}
419+TEST (EncodeMbAuxTest, WelsQuantFour4x4_c) {
420+ TestWelsQuantFour4x4 (WelsQuantFour4x4_c);
421+}
340422 TEST (EncodeMbAuxTest, WelsQuantFour4x4Max_c) {
341423 TestWelsQuantFour4x4Max (WelsQuantFour4x4Max_c);
342424 }
343425 #ifdef X86_ASM
426+TEST (EncodeMbAuxTest, WelsQuant4x4_sse2) {
427+ TestWelsQuant4x4 (WelsQuant4x4_sse2);
428+}
429+TEST (EncodeMbAuxTest, WelsQuant4x4Dc_sse2) {
430+ TestWelsQuant4x4Dc (WelsQuant4x4Dc_sse2);
431+}
432+TEST (EncodeMbAuxTest, WelsQuantFour4x4_sse2) {
433+ TestWelsQuantFour4x4 (WelsQuantFour4x4_sse2);
434+}
344435 TEST (EncodeMbAuxTest, WelsQuantFour4x4Max_sse2) {
345436 TestWelsQuantFour4x4Max (WelsQuantFour4x4Max_sse2);
346437 }

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