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