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
3#include "ls_defines.h"3#include "ls_defines.h"
4#include "encode_mb_aux.h"4#include "encode_mb_aux.h"
5#include "wels_common_basis.h"5#include "wels_common_basis.h"
6#include <algorithm>
7#include <cstddef>
6 8
7using namespace WelsEnc;9using namespace WelsEnc;
8 10
@@ -293,21 +295,92 @@ TEST (EncodeMbAuxTest, WelsGetNoneZeroCount_sse2) { · 284 unmodified lines
293#define NEW_QUANT(pDct, ff, mf) (((ff)+ WELS_ABS_LC(pDct))*(mf)) >>16295#define NEW_QUANT(pDct, ff, mf) (((ff)+ WELS_ABS_LC(pDct))*(mf)) >>16
294#define WELS_NEW_QUANT(pDct,ff,mf) WELS_ABS_LC(NEW_QUANT(pDct, ff, mf))296#define WELS_NEW_QUANT(pDct,ff,mf) WELS_ABS_LC(NEW_QUANT(pDct, ff, mf))
295namespace {297namespace {
298int16_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}
309void 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}
315void 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}
296void WelsQuantFour4x4MaxAnchor (int16_t* pDct, int16_t* ff, int16_t* mf, int16_t* max) {319void WelsQuantFour4x4MaxAnchor (int16_t* pDct, int16_t* ff, int16_t* mf, int16_t* max) {
297 int32_t i, j, k, sign;320 for (int i = 0; i < 4; i++)
298 int16_t max_abs;321 max[i] = WelsQuant4x4MaxAnchor (pDct + 16 * i, ff, mf);
299 for (k = 0; k < 4; k++) {322}
300 max_abs = 0;323void TestWelsQuant4x4 (PQuantizationFunc func) {
301 for (i = 0; i < 16; i++) {324 const std::size_t f_size = 8;
302 j = i & 0x07;325 const std::size_t dct_size = 16;
303 sign = WELS_SIGN (pDct[i]);326 CMemoryAlign cMemoryAlign (0);
304 pDct[i] = NEW_QUANT (pDct[i], ff[j], mf[j]);327 ALLOC_MEMORY (int16_t, ff, f_size);
305 if (max_abs < pDct[i]) max_abs = pDct[i];328 ALLOC_MEMORY (int16_t, mf, f_size);
306 pDct[i] = WELS_ABS_LC (pDct[i]);329 ALLOC_MEMORY (int16_t, iDctC, dct_size);
307 }330 ALLOC_MEMORY (int16_t, iDctS, dct_size);
308 pDct += 16;331 for (std::size_t i = 0; i < f_size; i++) {
309 max[k] = max_abs;332 ff[i] = rand() & 32767;
333 mf[i] = rand() & 32767;
310 }334 }
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}
346void 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}
362void 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);
311}384}
312void TestWelsQuantFour4x4Max (PQuantizationMaxFunc func) {385void TestWelsQuantFour4x4Max (PQuantizationMaxFunc func) {
313 CMemoryAlign cMemoryAlign (0);386 CMemoryAlign cMemoryAlign (0);
@@ -337,10 +410,28 @@ void TestWelsQuantFour4x4Max (PQuantizationMaxFunc func) { · 23 unmodified lines
337 FREE_MEMORY (iMaxS);410 FREE_MEMORY (iMaxS);
338}411}
339} // anon ns412} // anon ns
413TEST (EncodeMbAuxTest, WelsQuant4x4_c) {
414 TestWelsQuant4x4 (WelsQuant4x4_c);
415}
416TEST (EncodeMbAuxTest, WelsQuant4x4Dc_c) {
417 TestWelsQuant4x4Dc (WelsQuant4x4Dc_c);
418}
419TEST (EncodeMbAuxTest, WelsQuantFour4x4_c) {
420 TestWelsQuantFour4x4 (WelsQuantFour4x4_c);
421}
340TEST (EncodeMbAuxTest, WelsQuantFour4x4Max_c) {422TEST (EncodeMbAuxTest, WelsQuantFour4x4Max_c) {
341 TestWelsQuantFour4x4Max (WelsQuantFour4x4Max_c);423 TestWelsQuantFour4x4Max (WelsQuantFour4x4Max_c);
342}424}
343#ifdef X86_ASM425#ifdef X86_ASM
426TEST (EncodeMbAuxTest, WelsQuant4x4_sse2) {
427 TestWelsQuant4x4 (WelsQuant4x4_sse2);
428}
429TEST (EncodeMbAuxTest, WelsQuant4x4Dc_sse2) {
430 TestWelsQuant4x4Dc (WelsQuant4x4Dc_sse2);
431}
432TEST (EncodeMbAuxTest, WelsQuantFour4x4_sse2) {
433 TestWelsQuantFour4x4 (WelsQuantFour4x4_sse2);
434}
344TEST (EncodeMbAuxTest, WelsQuantFour4x4Max_sse2) {435TEST (EncodeMbAuxTest, WelsQuantFour4x4Max_sse2) {
345 TestWelsQuantFour4x4Max (WelsQuantFour4x4Max_sse2);436 TestWelsQuantFour4x4Max (WelsQuantFour4x4Max_sse2);
346}437}

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