Showing the changes to test/decoder/DecUT_PredMv.cpp (1 of 12 files). Show all
Unified · Split
| @@ -419,7 +419,7 @@ int32_t AllocLayerData (PDqLayer pDqLayer) { · 418 unmodified lines | ||
| 419 | 419 | if (pDqLayer->pSliceIdc == NULL) |
| 420 | 420 | return 1; |
| 421 | 421 | |
| 422 | − pDqLayer->pMbType = (int8_t*) WelsMallocz (pDqLayer->iMbWidth * pDqLayer->iMbHeight * sizeof (int8_t), | |
| 422 | + pDqLayer->pMbType = (int16_t*) WelsMallocz (pDqLayer->iMbWidth * pDqLayer->iMbHeight * sizeof (int16_t), | |
| 423 | 423 | "pDqLayer->pMbType"); |
| 424 | 424 | if (pDqLayer->pMbType == NULL) |
| 425 | 425 | return 1; |
| @@ -476,7 +476,7 @@ void InitRandomLayerSliceIdc (PDqLayer pDqLayer) { · 50 unmodified lines | ||
| 476 | 476 | |
| 477 | 477 | void InitRandomLayerMbType (PDqLayer pDqLayer) { |
| 478 | 478 | for (int32_t i = 0; i < pDqLayer->iMbWidth * pDqLayer->iMbHeight; ++i) { |
| 479 | − pDqLayer->pMbType[i] = (rand() & 0x0f) + 1; //1 ~ 16 | |
| 479 | + pDqLayer->pMbType[i] = 1 << (rand() % 11); //2^(1 ~ 10) | |
| 480 | 480 | } |
| 481 | 481 | } |
| 482 | 482 | |
| @@ -515,6 +515,7 @@ TEST (PredMvTest, PredSkipMvFromNeighbor) { · 32 unmodified lines | ||
| 515 | 515 | bool bOK = true; |
| 516 | 516 | SDqLayer sDqLayer; |
| 517 | 517 | int16_t iAncMvp[2], iWelsMvp[2]; |
| 518 | + int i; | |
| 518 | 519 | |
| 519 | 520 | memset (&sDqLayer, 0, sizeof (SDqLayer)); |
| 520 | 521 | //Assume the input data as 352x288 size |
| @@ -537,6 +538,7 @@ TEST (PredMvTest, PredSkipMvFromNeighbor) { · 16 unmodified lines | ||
| 537 | 538 | #define RIGHT_TOP_MB_IDX (sDqLayer.iMbXyIndex - sDqLayer.iMbWidth + 1) |
| 538 | 539 | #define RIGHT_TOP_MB_BLK 12 |
| 539 | 540 | |
| 541 | + int32_t iTotalMbNum = sDqLayer.iMbHeight * sDqLayer.iMbWidth; | |
| 540 | 542 | //CASE 1: test MB [0,0], expect mvp = (0,0) |
| 541 | 543 | sDqLayer.iMbX = 0; |
| 542 | 544 | sDqLayer.iMbY = 0; |
| @@ -560,18 +562,20 @@ TEST (PredMvTest, PredSkipMvFromNeighbor) { · 17 unmodified lines | ||
| 560 | 562 | sDqLayer.iMbY = rand() % (sDqLayer.iMbHeight - 1) + 1; //not equal to 0 |
| 561 | 563 | sDqLayer.iMbXyIndex = sDqLayer.iMbY * sDqLayer.iMbWidth + sDqLayer.iMbX; |
| 562 | 564 | //CASE 4.1.1: same slice_idc, assume = 0 |
| 563 | − memset (sDqLayer.pSliceIdc, 0, sDqLayer.iMbWidth * sDqLayer.iMbHeight * sizeof (int32_t)); | |
| 565 | + memset (sDqLayer.pSliceIdc, 0, iTotalMbNum * sizeof (int32_t)); | |
| 564 | 566 | //CASE 4.1.1.1: ALL P modes |
| 565 | − memset (sDqLayer.pMbType, MB_TYPE_16x16, sDqLayer.iMbWidth * sDqLayer.iMbHeight * sizeof (int8_t)); | |
| 567 | + for (i = 0; i < iTotalMbNum; ++i) { | |
| 568 | + sDqLayer.pMbType[i] = MB_TYPE_16x16; | |
| 569 | + } | |
| 566 | 570 | //CASE 4.1.1.1.1: ref_idx = 0, left MV = 0, top MV != 0, expect mvp = (0,0) |
| 567 | − memset (sDqLayer.pRefIndex[0], 0, sDqLayer.iMbWidth * sDqLayer.iMbHeight * MB_BLOCK4x4_NUM * sizeof (int8_t)); | |
| 571 | + memset (sDqLayer.pRefIndex[0], 0, iTotalMbNum * MB_BLOCK4x4_NUM * sizeof (int8_t)); | |
| 568 | 572 | InitRandomLayerMvData (&sDqLayer); //reset Mv data |
| 569 | 573 | sDqLayer.pMv[0][LEFT_MB_IDX][LEFT_MB_BLK][0] = sDqLayer.pMv[0][LEFT_MB_IDX][LEFT_MB_BLK][1] = 0; //left_mv = 0 |
| 570 | 574 | sDqLayer.pMv[0][ TOP_MB_IDX][ TOP_MB_BLK][0] = sDqLayer.pMv[0][ TOP_MB_IDX][ TOP_MB_BLK][1] = 1; //top_mv != 0 |
| 571 | 575 | iAncMvp[0] = iAncMvp[1] = 0; //expect anchor result to 0 |
| 572 | 576 | TEST_SKIP_MV_PRED; |
| 573 | 577 | //CASE 4.1.1.1.2: ref_idx = 0, left MV != 0, top MV = 0, expect mvp = (0,0) |
| 574 | − memset (sDqLayer.pRefIndex[0], 0, sDqLayer.iMbWidth * sDqLayer.iMbHeight * MB_BLOCK4x4_NUM * sizeof (int8_t)); | |
| 578 | + memset (sDqLayer.pRefIndex[0], 0, iTotalMbNum * MB_BLOCK4x4_NUM * sizeof (int8_t)); | |
| 575 | 579 | InitRandomLayerMvData (&sDqLayer); //reset Mv data |
| 576 | 580 | sDqLayer.pMv[0][LEFT_MB_IDX][LEFT_MB_BLK][0] = sDqLayer.pMv[0][LEFT_MB_IDX][LEFT_MB_BLK][1] = 1; //left_mv != 0 |
| 577 | 581 | sDqLayer.pMv[0][ TOP_MB_IDX][ TOP_MB_BLK][0] = sDqLayer.pMv[0][ TOP_MB_IDX][ TOP_MB_BLK][1] = 0; //top_mv = 0 |
| @@ -593,16 +597,19 @@ TEST (PredMvTest, PredSkipMvFromNeighbor) { · 15 unmodified lines | ||
| 593 | 597 | iAncMvp[1] = sDqLayer.pMv[0][LEFT_MB_IDX][LEFT_MB_BLK][1]; |
| 594 | 598 | TEST_SKIP_MV_PRED; |
| 595 | 599 | //CASE 4.1.1.2: All I |
| 596 | − memset (sDqLayer.pMbType, MB_TYPE_INTRA16x16, sDqLayer.iMbWidth * sDqLayer.iMbHeight * sizeof (int8_t)); | |
| 600 | + for (i = 0; i < iTotalMbNum; ++i) { | |
| 601 | + sDqLayer.pMbType[i] = MB_TYPE_INTRA16x16; | |
| 602 | + } | |
| 597 | 603 | //CASE 4.1.1.2.1: left P, expect mvp = left mv |
| 598 | 604 | sDqLayer.pMbType[LEFT_MB_IDX] = MB_TYPE_16x16; //left P |
| 599 | 605 | iAncMvp[0] = sDqLayer.pMv[0][LEFT_MB_IDX][LEFT_MB_BLK][0]; |
| 600 | 606 | iAncMvp[1] = sDqLayer.pMv[0][LEFT_MB_IDX][LEFT_MB_BLK][1]; |
| 601 | 607 | TEST_SKIP_MV_PRED; |
| 602 | 608 | //CASE 4.1.1.3: only top P, top ref_idx = 0, expect mvp = top mv |
| 603 | − memset (sDqLayer.pMbType, MB_TYPE_INTRA16x16, sDqLayer.iMbWidth * sDqLayer.iMbHeight * sizeof (int8_t)); // All I MB | |
| 604 | − memset (sDqLayer.pRefIndex[0], 1, sDqLayer.iMbWidth * sDqLayer.iMbHeight * MB_BLOCK4x4_NUM * sizeof ( | |
| 605 | − int8_t)); // All ref_idx = 1 | |
| 609 | + for (i = 0; i < iTotalMbNum; ++i) { // All I MB | |
| 610 | + sDqLayer.pMbType[i] = MB_TYPE_INTRA16x16; | |
| 611 | + } | |
| 612 | + memset (sDqLayer.pRefIndex[0], 1, iTotalMbNum * MB_BLOCK4x4_NUM * sizeof (int8_t)); // All ref_idx = 1 | |
| 606 | 613 | sDqLayer.pMbType[TOP_MB_IDX] = MB_TYPE_16x16; //top P |
| 607 | 614 | sDqLayer.pRefIndex[0][TOP_MB_IDX][TOP_MB_BLK] = 0; //top ref_idx = 0 |
| 608 | 615 | iAncMvp[0] = sDqLayer.pMv[0][TOP_MB_IDX][TOP_MB_BLK][0]; |
| @@ -612,9 +619,10 @@ TEST (PredMvTest, PredSkipMvFromNeighbor) { · 3 unmodified lines | ||
| 612 | 619 | sDqLayer.iMbX = (rand() % (sDqLayer.iMbWidth - 2)) + 1; //1 ~ (mb_width - 2) |
| 613 | 620 | sDqLayer.iMbY = (rand() % (sDqLayer.iMbHeight - 2)) + 1; //1 ~ (mb_height - 2) |
| 614 | 621 | sDqLayer.iMbXyIndex = sDqLayer.iMbY * sDqLayer.iMbWidth + sDqLayer.iMbX; |
| 615 | − memset (sDqLayer.pMbType, MB_TYPE_INTRA16x16, sDqLayer.iMbWidth * sDqLayer.iMbHeight * sizeof (int8_t)); // All I MB | |
| 616 | − memset (sDqLayer.pRefIndex[0], 1, sDqLayer.iMbWidth * sDqLayer.iMbHeight * MB_BLOCK4x4_NUM * sizeof ( | |
| 617 | − int8_t)); // All ref_idx = 1 | |
| 622 | + for (i = 0; i < iTotalMbNum; ++i) { // All I MB | |
| 623 | + sDqLayer.pMbType[i] = MB_TYPE_INTRA16x16; | |
| 624 | + } | |
| 625 | + memset (sDqLayer.pRefIndex[0], 1, iTotalMbNum * MB_BLOCK4x4_NUM * sizeof (int8_t)); // All ref_idx = 1 | |
| 618 | 626 | sDqLayer.pMbType[LEFT_TOP_MB_IDX] = MB_TYPE_16x16; //top P |
| 619 | 627 | sDqLayer.pRefIndex[0][LEFT_TOP_MB_IDX][LEFT_TOP_MB_BLK] = 0; //top ref_idx = 0 |
| 620 | 628 | iAncMvp[0] = iAncMvp[1] = 0; //expect anchor result to 0 |
| @@ -623,18 +631,20 @@ TEST (PredMvTest, PredSkipMvFromNeighbor) { · 2 unmodified lines | ||
| 623 | 631 | sDqLayer.iMbX = (rand() % (sDqLayer.iMbWidth - 2)) + 1; //1 ~ (mb_width - 2) |
| 624 | 632 | sDqLayer.iMbY = (rand() % (sDqLayer.iMbHeight - 2)) + 1; //1 ~ (mb_height - 2) |
| 625 | 633 | sDqLayer.iMbXyIndex = sDqLayer.iMbY * sDqLayer.iMbWidth + sDqLayer.iMbX; |
| 626 | − memset (sDqLayer.pMbType, MB_TYPE_INTRA16x16, sDqLayer.iMbWidth * sDqLayer.iMbHeight * sizeof (int8_t)); // All I MB | |
| 627 | − memset (sDqLayer.pRefIndex[0], 1, sDqLayer.iMbWidth * sDqLayer.iMbHeight * MB_BLOCK4x4_NUM * sizeof ( | |
| 628 | − int8_t)); // All ref_idx = 1 | |
| 634 | + for (i = 0; i < iTotalMbNum; ++i) { // All I MB | |
| 635 | + sDqLayer.pMbType[i] = MB_TYPE_INTRA16x16; | |
| 636 | + } | |
| 637 | + memset (sDqLayer.pRefIndex[0], 1, iTotalMbNum * MB_BLOCK4x4_NUM * sizeof (int8_t)); // All ref_idx = 1 | |
| 629 | 638 | sDqLayer.pMbType[RIGHT_TOP_MB_IDX] = MB_TYPE_16x16; //top P |
| 630 | 639 | sDqLayer.pRefIndex[0][RIGHT_TOP_MB_IDX][RIGHT_TOP_MB_BLK] = 0; //top ref_idx = 0 |
| 631 | 640 | iAncMvp[0] = sDqLayer.pMv[0][RIGHT_TOP_MB_IDX][RIGHT_TOP_MB_BLK][0]; |
| 632 | 641 | iAncMvp[1] = sDqLayer.pMv[0][RIGHT_TOP_MB_IDX][RIGHT_TOP_MB_BLK][1]; |
| 633 | 642 | TEST_SKIP_MV_PRED; |
| 634 | 643 | //CASE 4.1.2: different neighbor slice idc for all P and ref_idx = 0, expect mvp = 0 |
| 635 | − memset (sDqLayer.pMbType, MB_TYPE_16x16, sDqLayer.iMbWidth * sDqLayer.iMbHeight * sizeof (int8_t)); // All I MB | |
| 636 | − memset (sDqLayer.pRefIndex[0], 0, sDqLayer.iMbWidth * sDqLayer.iMbHeight * MB_BLOCK4x4_NUM * sizeof ( | |
| 637 | − int8_t)); // All ref_idx = 1 | |
| 644 | + for (i = 0; i < iTotalMbNum; ++i) { // All P MB | |
| 645 | + sDqLayer.pMbType[i] = MB_TYPE_16x16; | |
| 646 | + } | |
| 647 | + memset (sDqLayer.pRefIndex[0], 0, iTotalMbNum * MB_BLOCK4x4_NUM * sizeof (int8_t)); // All ref_idx = 1 | |
| 638 | 648 | sDqLayer.iMbX = (rand() % (sDqLayer.iMbWidth - 2)) + 1; //1 ~ (mb_width - 2) |
| 639 | 649 | sDqLayer.iMbY = (rand() % (sDqLayer.iMbHeight - 2)) + 1; //1 ~ (mb_height - 2) |
| 640 | 650 | sDqLayer.iMbXyIndex = sDqLayer.iMbY * sDqLayer.iMbWidth + sDqLayer.iMbX; |
| @@ -649,7 +659,7 @@ TEST (PredMvTest, PredSkipMvFromNeighbor) { · 8 unmodified lines | ||
| 649 | 659 | //add new specific tests here |
| 650 | 660 | |
| 651 | 661 | //normal tests |
| 652 | − int32_t i = 0; | |
| 662 | + i = 0; | |
| 653 | 663 | while (i++ < kiRandTime) { |
| 654 | 664 | InitRandomLayerData (&sDqLayer); //init MV data, as it would not affect the following logic test |
| 655 | 665 | AnchorPredPSkipMvFromNeighbor (&sDqLayer, iAncMvp); |