Showing the changes to test/encoder/EncUT_EncoderMbAux.cpp (1 of 1 file). Show all
Unified · Split
| @@ -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 | ||
| 7 | using namespace WelsEnc; | 9 | using 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)) >>16 | 295 | #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)) |
| 295 | namespace { | 297 | 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 | } | ||
| 296 | void WelsQuantFour4x4MaxAnchor (int16_t* pDct, int16_t* ff, int16_t* mf, int16_t* max) { | 319 | void 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; | 323 | void 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 | } | ||
| 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); | ||
| 311 | } | 384 | } |
| 312 | void TestWelsQuantFour4x4Max (PQuantizationMaxFunc func) { | 385 | void 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 ns | 412 | } // 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 | } | ||
| 340 | TEST (EncodeMbAuxTest, WelsQuantFour4x4Max_c) { | 422 | TEST (EncodeMbAuxTest, WelsQuantFour4x4Max_c) { |
| 341 | TestWelsQuantFour4x4Max (WelsQuantFour4x4Max_c); | 423 | TestWelsQuantFour4x4Max (WelsQuantFour4x4Max_c); |
| 342 | } | 424 | } |
| 343 | #ifdef X86_ASM | 425 | #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 | } | ||
| 344 | TEST (EncodeMbAuxTest, WelsQuantFour4x4Max_sse2) { | 435 | TEST (EncodeMbAuxTest, WelsQuantFour4x4Max_sse2) { |
| 345 | TestWelsQuantFour4x4Max (WelsQuantFour4x4Max_sse2); | 436 | TestWelsQuantFour4x4Max (WelsQuantFour4x4Max_sse2); |
| 346 | } | 437 | } |