Showing the changes to codec/decoder/core/src/decoder_core.cpp (1 of 16 files). Show all
Unified · Split
| @@ -66,7 +66,7 @@ static inline int32_t DecodeFrameConstruction (PWelsDecoderContext pCtx, uint8_t · 65 unmodified lines | |||
| 66 | if (pCtx->iTotalNumMbRec == kiTotalNumMbInCurLayer) { | 66 | if (pCtx->iTotalNumMbRec == kiTotalNumMbInCurLayer) { |
| 67 | pCtx->bPrintFrameErrorTraceFlag = true; | 67 | pCtx->bPrintFrameErrorTraceFlag = true; |
| 68 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_INFO, | 68 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_INFO, |
| 69 | "DecodeFrameConstruction()::::output first frame of new sequence, %d x %d, crop_left:%d, crop_right:%d, crop_top:%d, crop_bottom:%d, ignored error packet:%d.\n", | 69 | "DecodeFrameConstruction()::::output first frame of new sequence, %d x %d, crop_left:%d, crop_right:%d, crop_top:%d, crop_bottom:%d, ignored error packet:%d.", |
| 70 | kiWidth, kiHeight, pCtx->sFrameCrop.iLeftOffset, pCtx->sFrameCrop.iRightOffset, pCtx->sFrameCrop.iTopOffset, | 70 | kiWidth, kiHeight, pCtx->sFrameCrop.iLeftOffset, pCtx->sFrameCrop.iRightOffset, pCtx->sFrameCrop.iTopOffset, |
| 71 | pCtx->sFrameCrop.iBottomOffset, pCtx->iIgnoredErrorInfoPacketCount); | 71 | pCtx->sFrameCrop.iBottomOffset, pCtx->iIgnoredErrorInfoPacketCount); |
| 72 | pCtx->iIgnoredErrorInfoPacketCount = 0; | 72 | pCtx->iIgnoredErrorInfoPacketCount = 0; |
| @@ -75,7 +75,7 @@ static inline int32_t DecodeFrameConstruction (PWelsDecoderContext pCtx, uint8_t · 2 unmodified lines | |||
| 75 | 75 | ||
| 76 | if (pCtx->iTotalNumMbRec != kiTotalNumMbInCurLayer) { | 76 | if (pCtx->iTotalNumMbRec != kiTotalNumMbInCurLayer) { |
| 77 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_DEBUG, | 77 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_DEBUG, |
| 78 | "DecodeFrameConstruction():::iTotalNumMbRec:%d, total_num_mb_sps:%d, cur_layer_mb_width:%d, cur_layer_mb_height:%d \n", | 78 | "DecodeFrameConstruction():::iTotalNumMbRec:%d, total_num_mb_sps:%d, cur_layer_mb_width:%d, cur_layer_mb_height:%d ", |
| 79 | pCtx->iTotalNumMbRec, kiTotalNumMbInCurLayer, pCurDq->iMbWidth, pCurDq->iMbHeight); | 79 | pCtx->iTotalNumMbRec, kiTotalNumMbInCurLayer, pCurDq->iMbWidth, pCurDq->iMbHeight); |
| 80 | bFrameCompleteFlag = false; //return later after output buffer is done | 80 | bFrameCompleteFlag = false; //return later after output buffer is done |
| 81 | if (pCtx->bInstantDecFlag) //no-delay decoding, wait for new slice | 81 | if (pCtx->bInstantDecFlag) //no-delay decoding, wait for new slice |
| @@ -501,7 +501,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 419 unmodified lines | |||
| 501 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //slice_type | 501 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //slice_type |
| 502 | uiSliceType = uiCode; | 502 | uiSliceType = uiCode; |
| 503 | if (uiSliceType > 9) { | 503 | if (uiSliceType > 9) { |
| 504 | WelsLog (pLogCtx, WELS_LOG_WARNING, "slice type too large (%d) at first_mb(%d)\n", uiSliceType, | 504 | WelsLog (pLogCtx, WELS_LOG_WARNING, "slice type too large (%d) at first_mb(%d)", uiSliceType, |
| 505 | pSliceHead->iFirstMbInSlice); | 505 | pSliceHead->iFirstMbInSlice); |
| 506 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SLICE_TYPE); | 506 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SLICE_TYPE); |
| 507 | } | 507 | } |
| @@ -509,17 +509,17 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 1 unmodified line | |||
| 509 | uiSliceType -= 5; | 509 | uiSliceType -= 5; |
| 510 | 510 | ||
| 511 | if (B_SLICE == uiSliceType) { | 511 | if (B_SLICE == uiSliceType) { |
| 512 | WelsLog (pLogCtx, WELS_LOG_WARNING, "ParseSliceHeaderSyntaxs(): B slice not supported.\n"); | 512 | WelsLog (pLogCtx, WELS_LOG_WARNING, "ParseSliceHeaderSyntaxs(): B slice not supported."); |
| 513 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_BIPRED); | 513 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_BIPRED); |
| 514 | } | 514 | } |
| 515 | if ((NAL_UNIT_CODED_SLICE_IDR == eNalType) && (I_SLICE != uiSliceType)) { | 515 | if ((NAL_UNIT_CODED_SLICE_IDR == eNalType) && (I_SLICE != uiSliceType)) { |
| 516 | WelsLog (pLogCtx, WELS_LOG_WARNING, "Invalid slice type(%d) in IDR picture. \n", uiSliceType); | 516 | WelsLog (pLogCtx, WELS_LOG_WARNING, "Invalid slice type(%d) in IDR picture. ", uiSliceType); |
| 517 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SLICE_TYPE); | 517 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SLICE_TYPE); |
| 518 | } | 518 | } |
| 519 | 519 | ||
| 520 | if (kbExtensionFlag) { | 520 | if (kbExtensionFlag) { |
| 521 | if (uiSliceType > 2) { | 521 | if (uiSliceType > 2) { |
| 522 | WelsLog (pLogCtx, WELS_LOG_WARNING, "Invalid slice type(%d).\n", uiSliceType); | 522 | WelsLog (pLogCtx, WELS_LOG_WARNING, "Invalid slice type(%d).", uiSliceType); |
| 523 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SLICE_TYPE); | 523 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SLICE_TYPE); |
| 524 | } | 524 | } |
| 525 | } | 525 | } |
| @@ -530,20 +530,20 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 4 unmodified lines | |||
| 530 | iPpsId = uiCode; | 530 | iPpsId = uiCode; |
| 531 | 531 | ||
| 532 | if (iPpsId >= MAX_PPS_COUNT) { | 532 | if (iPpsId >= MAX_PPS_COUNT) { |
| 533 | WelsLog (pLogCtx, WELS_LOG_WARNING, "iPpsId out of range\n"); | 533 | WelsLog (pLogCtx, WELS_LOG_WARNING, "iPpsId out of range"); |
| 534 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_PPS_ID_OVERFLOW); | 534 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_PPS_ID_OVERFLOW); |
| 535 | } | 535 | } |
| 536 | 536 | ||
| 537 | //add check PPS available here | 537 | //add check PPS available here |
| 538 | if (pCtx->bPpsAvailFlags[iPpsId] == false) { | 538 | if (pCtx->bPpsAvailFlags[iPpsId] == false) { |
| 539 | WelsLog (pLogCtx, WELS_LOG_ERROR, "PPS id is invalid!\n"); | 539 | WelsLog (pLogCtx, WELS_LOG_ERROR, "PPS id is invalid!"); |
| 540 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_PPS_ID); | 540 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_PPS_ID); |
| 541 | } | 541 | } |
| 542 | 542 | ||
| 543 | pPps = &pCtx->sPpsBuffer[iPpsId]; | 543 | pPps = &pCtx->sPpsBuffer[iPpsId]; |
| 544 | 544 | ||
| 545 | if (pPps->uiNumSliceGroups == 0) { | 545 | if (pPps->uiNumSliceGroups == 0) { |
| 546 | WelsLog (pLogCtx, WELS_LOG_WARNING, "non existing PPS referenced\n"); | 546 | WelsLog (pLogCtx, WELS_LOG_WARNING, "non existing PPS referenced"); |
| 547 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_NO_PARAM_SETS); | 547 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_NO_PARAM_SETS); |
| 548 | } | 548 | } |
| 549 | 549 | ||
| @@ -551,12 +551,12 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 1 unmodified line | |||
| 551 | pSubsetSps = &pCtx->sSubsetSpsBuffer[pPps->iSpsId]; | 551 | pSubsetSps = &pCtx->sSubsetSpsBuffer[pPps->iSpsId]; |
| 552 | pSps = &pSubsetSps->sSps; | 552 | pSps = &pSubsetSps->sSps; |
| 553 | if (pCtx->bSubspsAvailFlags[pPps->iSpsId] == false) { | 553 | if (pCtx->bSubspsAvailFlags[pPps->iSpsId] == false) { |
| 554 | WelsLog (pLogCtx, WELS_LOG_ERROR, "SPS id is invalid!\n"); | 554 | WelsLog (pLogCtx, WELS_LOG_ERROR, "SPS id is invalid!"); |
| 555 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SPS_ID); | 555 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SPS_ID); |
| 556 | } | 556 | } |
| 557 | } else { | 557 | } else { |
| 558 | if (pCtx->bSpsAvailFlags[pPps->iSpsId] == false) { | 558 | if (pCtx->bSpsAvailFlags[pPps->iSpsId] == false) { |
| 559 | WelsLog (pLogCtx, WELS_LOG_ERROR, "SPS id is invalid!\n"); | 559 | WelsLog (pLogCtx, WELS_LOG_ERROR, "SPS id is invalid!"); |
| 560 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SPS_ID); | 560 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SPS_ID); |
| 561 | } | 561 | } |
| 562 | pSps = &pCtx->sSpsBuffer[pPps->iSpsId]; | 562 | pSps = &pCtx->sSpsBuffer[pPps->iSpsId]; |
| @@ -571,7 +571,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 8 unmodified lines | |||
| 571 | bIdrFlag = (!kbExtensionFlag && eNalType == NAL_UNIT_CODED_SLICE_IDR) || (kbExtensionFlag && pNalHeaderExt->bIdrFlag); | 571 | bIdrFlag = (!kbExtensionFlag && eNalType == NAL_UNIT_CODED_SLICE_IDR) || (kbExtensionFlag && pNalHeaderExt->bIdrFlag); |
| 572 | 572 | ||
| 573 | if (pSps->uiLog2MaxFrameNum == 0) { | 573 | if (pSps->uiLog2MaxFrameNum == 0) { |
| 574 | WelsLog (pLogCtx, WELS_LOG_WARNING, "non existing SPS referenced\n"); | 574 | WelsLog (pLogCtx, WELS_LOG_WARNING, "non existing SPS referenced"); |
| 575 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_NO_PARAM_SETS); | 575 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_NO_PARAM_SETS); |
| 576 | } | 576 | } |
| 577 | // check first_mb_in_slice | 577 | // check first_mb_in_slice |
| @@ -583,7 +583,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 5 unmodified lines | |||
| 583 | pSliceHead->bFieldPicFlag = false; | 583 | pSliceHead->bFieldPicFlag = false; |
| 584 | pSliceHead->bBottomFiledFlag = false; | 584 | pSliceHead->bBottomFiledFlag = false; |
| 585 | if (!pSps->bFrameMbsOnlyFlag) { | 585 | if (!pSps->bFrameMbsOnlyFlag) { |
| 586 | WelsLog (pLogCtx, WELS_LOG_WARNING, "ParseSliceHeaderSyntaxs(): frame_mbs_only_flag = %d not supported. \n", | 586 | WelsLog (pLogCtx, WELS_LOG_WARNING, "ParseSliceHeaderSyntaxs(): frame_mbs_only_flag = %d not supported. ", |
| 587 | pSps->bFrameMbsOnlyFlag); | 587 | pSps->bFrameMbsOnlyFlag); |
| 588 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_MBAFF); | 588 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_MBAFF); |
| 589 | } | 589 | } |
| @@ -593,7 +593,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 3 unmodified lines | |||
| 593 | if (bIdrFlag) { | 593 | if (bIdrFlag) { |
| 594 | if (pSliceHead->iFrameNum != 0) { | 594 | if (pSliceHead->iFrameNum != 0) { |
| 595 | WelsLog (pLogCtx, WELS_LOG_WARNING, | 595 | WelsLog (pLogCtx, WELS_LOG_WARNING, |
| 596 | "ParseSliceHeaderSyntaxs(), invaild frame number: %d due to IDR frame introduced!\n", | 596 | "ParseSliceHeaderSyntaxs(), invaild frame number: %d due to IDR frame introduced!", |
| 597 | pSliceHead->iFrameNum); | 597 | pSliceHead->iFrameNum); |
| 598 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_FRAME_NUM); | 598 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_FRAME_NUM); |
| 599 | } | 599 | } |
| @@ -655,14 +655,14 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 55 unmodified lines | |||
| 655 | } | 655 | } |
| 656 | 656 | ||
| 657 | if (pSliceHead->uiRefCount[0] > MAX_REF_PIC_COUNT || pSliceHead->uiRefCount[1] > MAX_REF_PIC_COUNT) { | 657 | if (pSliceHead->uiRefCount[0] > MAX_REF_PIC_COUNT || pSliceHead->uiRefCount[1] > MAX_REF_PIC_COUNT) { |
| 658 | WelsLog (pLogCtx, WELS_LOG_WARNING, "reference overflow\n"); | 658 | WelsLog (pLogCtx, WELS_LOG_WARNING, "reference overflow"); |
| 659 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_REF_COUNT_OVERFLOW); | 659 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_REF_COUNT_OVERFLOW); |
| 660 | } | 660 | } |
| 661 | 661 | ||
| 662 | if (BASE_QUALITY_ID == uiQualityId) { | 662 | if (BASE_QUALITY_ID == uiQualityId) { |
| 663 | iRet = ParseRefPicListReordering (pBs, pSliceHead); | 663 | iRet = ParseRefPicListReordering (pBs, pSliceHead); |
| 664 | if (iRet != ERR_NONE) { | 664 | if (iRet != ERR_NONE) { |
| 665 | WelsLog (pLogCtx, WELS_LOG_WARNING, "invalid ref pPic list reordering syntaxs!\n"); | 665 | WelsLog (pLogCtx, WELS_LOG_WARNING, "invalid ref pPic list reordering syntaxs!"); |
| 666 | return iRet; | 666 | return iRet; |
| 667 | } | 667 | } |
| 668 | 668 | ||
| @@ -684,7 +684,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 15 unmodified lines | |||
| 684 | pSliceHeadExt->bStoreRefBasePicFlag = !!uiCode; | 684 | pSliceHeadExt->bStoreRefBasePicFlag = !!uiCode; |
| 685 | if ((pNalHeaderExt->bUseRefBasePicFlag || pSliceHeadExt->bStoreRefBasePicFlag) && !bIdrFlag) { | 685 | if ((pNalHeaderExt->bUseRefBasePicFlag || pSliceHeadExt->bStoreRefBasePicFlag) && !bIdrFlag) { |
| 686 | WelsLog (pLogCtx, WELS_LOG_WARNING, | 686 | WelsLog (pLogCtx, WELS_LOG_WARNING, |
| 687 | "ParseSliceHeaderSyntaxs(): bUseRefBasePicFlag or bStoreRefBasePicFlag = 1 not supported.\n"); | 687 | "ParseSliceHeaderSyntaxs(): bUseRefBasePicFlag or bStoreRefBasePicFlag = 1 not supported."); |
| 688 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_ILP); | 688 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_ILP); |
| 689 | } | 689 | } |
| 690 | } | 690 | } |
| @@ -692,7 +692,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 1 unmodified line | |||
| 692 | } | 692 | } |
| 693 | 693 | ||
| 694 | if (pPps->bEntropyCodingModeFlag) { | 694 | if (pPps->bEntropyCodingModeFlag) { |
| 695 | WelsLog (pLogCtx, WELS_LOG_WARNING, "ParseSliceHeaderSyntaxs(): CABAC in Enhancement layer not supported.\n"); | 695 | WelsLog (pLogCtx, WELS_LOG_WARNING, "ParseSliceHeaderSyntaxs(): CABAC in Enhancement layer not supported."); |
| 696 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_CABAC_EL); | 696 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_CABAC_EL); |
| 697 | } | 697 | } |
| 698 | 698 | ||
| @@ -700,14 +700,14 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 1 unmodified line | |||
| 700 | pSliceHead->iSliceQpDelta = iCode; | 700 | pSliceHead->iSliceQpDelta = iCode; |
| 701 | pSliceHead->iSliceQp = pPps->iPicInitQp + pSliceHead->iSliceQpDelta; | 701 | pSliceHead->iSliceQp = pPps->iPicInitQp + pSliceHead->iSliceQpDelta; |
| 702 | if (pSliceHead->iSliceQp < 0 || pSliceHead->iSliceQp > 51) { | 702 | if (pSliceHead->iSliceQp < 0 || pSliceHead->iSliceQp > 51) { |
| 703 | WelsLog (pLogCtx, WELS_LOG_WARNING, "QP %d out of range\n", pSliceHead->iSliceQp); | 703 | WelsLog (pLogCtx, WELS_LOG_WARNING, "QP %d out of range", pSliceHead->iSliceQp); |
| 704 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_QP); | 704 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_QP); |
| 705 | } | 705 | } |
| 706 | 706 | ||
| 707 | //FIXME qscale / qp ... stuff | 707 | //FIXME qscale / qp ... stuff |
| 708 | if (!kbExtensionFlag) { | 708 | if (!kbExtensionFlag) { |
| 709 | if (uiSliceType == SP_SLICE || uiSliceType == SI_SLICE) { | 709 | if (uiSliceType == SP_SLICE || uiSliceType == SI_SLICE) { |
| 710 | WelsLog (pLogCtx, WELS_LOG_WARNING, "SP/SI not supported\n"); | 710 | WelsLog (pLogCtx, WELS_LOG_WARNING, "SP/SI not supported"); |
| 711 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_SPSI); | 711 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_SPSI); |
| 712 | } | 712 | } |
| 713 | } | 713 | } |
| @@ -720,7 +720,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 6 unmodified lines | |||
| 720 | pSliceHead->uiDisableDeblockingFilterIdc = uiCode; | 720 | pSliceHead->uiDisableDeblockingFilterIdc = uiCode; |
| 721 | //refer to JVT-X201wcm1.doc G.7.4.3.4--2010.4.20 | 721 | //refer to JVT-X201wcm1.doc G.7.4.3.4--2010.4.20 |
| 722 | if (pSliceHead->uiDisableDeblockingFilterIdc > 6) { | 722 | if (pSliceHead->uiDisableDeblockingFilterIdc > 6) { |
| 723 | WelsLog (pLogCtx, WELS_LOG_WARNING, "disable_deblock_filter_idc (%d) out of range [0, 6]\n", | 723 | WelsLog (pLogCtx, WELS_LOG_WARNING, "disable_deblock_filter_idc (%d) out of range [0, 6]", |
| 724 | pSliceHead->uiDisableDeblockingFilterIdc); | 724 | pSliceHead->uiDisableDeblockingFilterIdc); |
| 725 | return ERR_INFO_INVALID_DBLOCKING_IDC; | 725 | return ERR_INFO_INVALID_DBLOCKING_IDC; |
| 726 | } | 726 | } |
| @@ -767,7 +767,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 40 unmodified lines | |||
| 767 | pSliceHeadExt->uiDisableInterLayerDeblockingFilterIdc = uiCode; | 767 | pSliceHeadExt->uiDisableInterLayerDeblockingFilterIdc = uiCode; |
| 768 | //refer to JVT-X201wcm1.doc G.7.4.3.4--2010.4.20 | 768 | //refer to JVT-X201wcm1.doc G.7.4.3.4--2010.4.20 |
| 769 | if (pSliceHeadExt->uiDisableInterLayerDeblockingFilterIdc > 6) { | 769 | if (pSliceHeadExt->uiDisableInterLayerDeblockingFilterIdc > 6) { |
| 770 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "disable_inter_layer_deblock_filter_idc (%d) out of range [0, 6]\n", | 770 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "disable_inter_layer_deblock_filter_idc (%d) out of range [0, 6]", |
| 771 | pSliceHeadExt->uiDisableInterLayerDeblockingFilterIdc); | 771 | pSliceHeadExt->uiDisableInterLayerDeblockingFilterIdc); |
| 772 | return ERR_INFO_INVALID_DBLOCKING_IDC; | 772 | return ERR_INFO_INVALID_DBLOCKING_IDC; |
| 773 | } | 773 | } |
| @@ -804,7 +804,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 30 unmodified lines | |||
| 804 | (pos.iTopOffset + pos.iBottomOffset) / (1 + pSliceHead->bFieldPicFlag); | 804 | (pos.iTopOffset + pos.iBottomOffset) / (1 + pSliceHead->bFieldPicFlag); |
| 805 | } | 805 | } |
| 806 | } else if (uiQualityId > BASE_QUALITY_ID) { | 806 | } else if (uiQualityId > BASE_QUALITY_ID) { |
| 807 | WelsLog (pLogCtx, WELS_LOG_WARNING, "MGS not supported.\n"); | 807 | WelsLog (pLogCtx, WELS_LOG_WARNING, "MGS not supported."); |
| 808 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_MGS); | 808 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_MGS); |
| 809 | } else { | 809 | } else { |
| 810 | pSliceHeadExt->uiRefLayerDqId = (uint8_t) - 1; | 810 | pSliceHeadExt->uiRefLayerDqId = (uint8_t) - 1; |
| @@ -863,7 +863,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 52 unmodified lines | |||
| 863 | WELS_READ_VERIFY (BsGetBits (pBs, 4, &uiCode)); //scan_idx_end | 863 | WELS_READ_VERIFY (BsGetBits (pBs, 4, &uiCode)); //scan_idx_end |
| 864 | pSliceHeadExt->uiScanIdxEnd = uiCode; | 864 | pSliceHeadExt->uiScanIdxEnd = uiCode; |
| 865 | if (pSliceHeadExt->uiScanIdxStart != 0 || pSliceHeadExt->uiScanIdxEnd != 15) { | 865 | if (pSliceHeadExt->uiScanIdxStart != 0 || pSliceHeadExt->uiScanIdxEnd != 15) { |
| 866 | WelsLog (pLogCtx, WELS_LOG_WARNING, "uiScanIdxStart (%d) != 0 and uiScanIdxEnd (%d) !=15 not supported here\n", | 866 | WelsLog (pLogCtx, WELS_LOG_WARNING, "uiScanIdxStart (%d) != 0 and uiScanIdxEnd (%d) !=15 not supported here", |
| 867 | pSliceHeadExt->uiScanIdxStart, pSliceHeadExt->uiScanIdxEnd); | 867 | pSliceHeadExt->uiScanIdxStart, pSliceHeadExt->uiScanIdxEnd); |
| 868 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_MGS); | 868 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_MGS); |
| 869 | } | 869 | } |
| @@ -957,7 +957,7 @@ int32_t UpdateAccessUnit (PWelsDecoderContext pCtx) { · 87 unmodified lines | |||
| 957 | if (uiActualIdx == | 957 | if (uiActualIdx == |
| 958 | pCurAu->uiActualUnitsNum) { // no found IDR nal within incoming AU, need exit to avoid mosaic issue, 11/19/2009 | 958 | pCurAu->uiActualUnitsNum) { // no found IDR nal within incoming AU, need exit to avoid mosaic issue, 11/19/2009 |
| 959 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, | 959 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, |
| 960 | "UpdateAccessUnit():::::Key frame lost.....CAN NOT find IDR from current AU.\n"); | 960 | "UpdateAccessUnit():::::Key frame lost.....CAN NOT find IDR from current AU."); |
| 961 | pCtx->iErrorCode |= dsRefLost; | 961 | pCtx->iErrorCode |= dsRefLost; |
| 962 | if (pCtx->eErrorConMethod == ERROR_CON_DISABLE) { | 962 | if (pCtx->eErrorConMethod == ERROR_CON_DISABLE) { |
| 963 | #ifdef LONG_TERM_REF | 963 | #ifdef LONG_TERM_REF |
| @@ -1668,7 +1668,7 @@ int32_t ConstructAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBufferI · 704 unmodified lines | |||
| 1668 | if (pCtx->bNewSeqBegin) | 1668 | if (pCtx->bNewSeqBegin) |
| 1669 | ResetActiveSPSForEachLayer (pCtx); | 1669 | ResetActiveSPSForEachLayer (pCtx); |
| 1670 | if (ERR_NONE != iErr) { | 1670 | if (ERR_NONE != iErr) { |
| 1671 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_INFO, "returned error from decoding:[0x%x]\n", iErr); | 1671 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_INFO, "returned error from decoding:[0x%x]", iErr); |
| 1672 | return iErr; | 1672 | return iErr; |
| 1673 | } | 1673 | } |
| 1674 | 1674 | ||
| @@ -1804,7 +1804,7 @@ int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBuf · 129 unmodified lines | |||
| 1804 | 1804 | ||
| 1805 | if (NULL == pCtx->pDec) { | 1805 | if (NULL == pCtx->pDec) { |
| 1806 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR, | 1806 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR, |
| 1807 | "DecodeCurrentAccessUnit()::::::PrefetchPic ERROR, pSps->iNumRefFrames:%d.\n", | 1807 | "DecodeCurrentAccessUnit()::::::PrefetchPic ERROR, pSps->iNumRefFrames:%d.", |
| 1808 | pCtx->pSps->iNumRefFrames); | 1808 | pCtx->pSps->iNumRefFrames); |
| 1809 | pCtx->iErrorCode |= dsOutOfMemory; | 1809 | pCtx->iErrorCode |= dsOutOfMemory; |
| 1810 | return ERR_INFO_REF_COUNT_OVERFLOW; | 1810 | return ERR_INFO_REF_COUNT_OVERFLOW; |
| @@ -1857,7 +1857,7 @@ int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBuf · 46 unmodified lines | |||
| 1857 | pCtx->pFmo = &pCtx->sFmoList[iPpsId]; | 1857 | pCtx->pFmo = &pCtx->sFmoList[iPpsId]; |
| 1858 | if (!FmoParamUpdate (pCtx->pFmo, pLayerInfo.pSps, pLayerInfo.pPps, &pCtx->iActiveFmoNum)) { | 1858 | if (!FmoParamUpdate (pCtx->pFmo, pLayerInfo.pSps, pLayerInfo.pPps, &pCtx->iActiveFmoNum)) { |
| 1859 | pCtx->iErrorCode |= dsBitstreamError; | 1859 | pCtx->iErrorCode |= dsBitstreamError; |
| 1860 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "DecodeCurrentAccessUnit(), FmoParamUpdate failed, eSliceType: %d.\n", | 1860 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "DecodeCurrentAccessUnit(), FmoParamUpdate failed, eSliceType: %d.", |
| 1861 | pSh->eSliceType); | 1861 | pSh->eSliceType); |
| 1862 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_FMO_INIT_FAIL); | 1862 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_FMO_INIT_FAIL); |
| 1863 | } | 1863 | } |
| @@ -1883,7 +1883,7 @@ int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBuf · 19 unmodified lines | |||
| 1883 | pSh->iFrameNum != pCtx->iPrevFrameNum && | 1883 | pSh->iFrameNum != pCtx->iPrevFrameNum && |
| 1884 | pSh->iFrameNum != ((pCtx->iPrevFrameNum + 1) & ((1 << dq_cur->sLayerInfo.pSps->uiLog2MaxFrameNum) - 1))) { | 1884 | pSh->iFrameNum != ((pCtx->iPrevFrameNum + 1) & ((1 << dq_cur->sLayerInfo.pSps->uiLog2MaxFrameNum) - 1))) { |
| 1885 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, | 1885 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, |
| 1886 | "referencing pictures lost due frame gaps exist, prev_frame_num: %d, curr_frame_num: %d\n", pCtx->iPrevFrameNum, | 1886 | "referencing pictures lost due frame gaps exist, prev_frame_num: %d, curr_frame_num: %d", pCtx->iPrevFrameNum, |
| 1887 | pSh->iFrameNum); | 1887 | pSh->iFrameNum); |
| 1888 | 1888 | ||
| 1889 | pCtx->iErrorCode |= dsRefLost; | 1889 | pCtx->iErrorCode |= dsRefLost; |
| @@ -1904,7 +1904,7 @@ int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBuf · 14 unmodified lines | |||
| 1904 | if (iRet) { | 1904 | if (iRet) { |
| 1905 | HandleReferenceLost (pCtx, pNalCur); | 1905 | HandleReferenceLost (pCtx, pNalCur); |
| 1906 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, | 1906 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, |
| 1907 | "reference picture introduced by this frame is lost during transmission! uiTId: %d\n", | 1907 | "reference picture introduced by this frame is lost during transmission! uiTId: %d", |
| 1908 | pNalCur->sNalHeaderExt.uiTemporalId); | 1908 | pNalCur->sNalHeaderExt.uiTemporalId); |
| 1909 | if (pCtx->eErrorConMethod == ERROR_CON_DISABLE) { | 1909 | if (pCtx->eErrorConMethod == ERROR_CON_DISABLE) { |
| 1910 | return iRet; | 1910 | return iRet; |
| @@ -1917,7 +1917,7 @@ int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBuf · 6 unmodified lines | |||
| 1917 | //Output good store_base reconstruction when enhancement quality layer occurred error for MGS key picture case | 1917 | //Output good store_base reconstruction when enhancement quality layer occurred error for MGS key picture case |
| 1918 | if (iRet != ERR_NONE) { | 1918 | if (iRet != ERR_NONE) { |
| 1919 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, | 1919 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, |
| 1920 | "DecodeCurrentAccessUnit() failed (%d) in frame: %d uiDId: %d uiQId: %d\n", | 1920 | "DecodeCurrentAccessUnit() failed (%d) in frame: %d uiDId: %d uiQId: %d", |
| 1921 | iRet, pSh->iFrameNum, iCurrIdD, iCurrIdQ); | 1921 | iRet, pSh->iFrameNum, iCurrIdD, iCurrIdQ); |
| 1922 | HandleReferenceLostL0 (pCtx, pNalCur); | 1922 | HandleReferenceLostL0 (pCtx, pNalCur); |
| 1923 | if (pCtx->eErrorConMethod == ERROR_CON_DISABLE) { | 1923 | if (pCtx->eErrorConMethod == ERROR_CON_DISABLE) { |