Showing the changes to codec/decoder/core/src/decoder_core.cpp (1 of 54 files). Show all
Unified · Split
| @@ -329,7 +329,7 @@ int32_t ParseRefPicListReordering (PBitStringAux pBs, PSliceHeader pSh) { · 328 unmodified lines | |||
| 329 | // Common syntaxs for P or B slices: list0, list1 followed if B slices used. | 329 | // Common syntaxs for P or B slices: list0, list1 followed if B slices used. |
| 330 | do { | 330 | do { |
| 331 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //ref_pic_list_modification_flag_l0 | 331 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //ref_pic_list_modification_flag_l0 |
| 332 | pRefPicListReordering->bRefPicListReorderingFlag[iList] = !!uiCode; | 332 | pRefPicListReordering->bRefPicListReorderingFlag[iList] = !!uiCode; |
| 333 | 333 | ||
| 334 | if (pRefPicListReordering->bRefPicListReorderingFlag[iList]) { | 334 | if (pRefPicListReordering->bRefPicListReorderingFlag[iList]) { |
| 335 | int32_t iIdx = 0; | 335 | int32_t iIdx = 0; |
| @@ -341,7 +341,7 @@ int32_t ParseRefPicListReordering (PBitStringAux pBs, PSliceHeader pSh) { · 5 unmodified lines | |||
| 341 | if ((iIdx >= MAX_REF_PIC_COUNT) || (kuiIdc > 3)) { | 341 | if ((iIdx >= MAX_REF_PIC_COUNT) || (kuiIdc > 3)) { |
| 342 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_REF_REORDERING); | 342 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_REF_REORDERING); |
| 343 | } | 343 | } |
| 344 | pRefPicListReordering->sReorderingSyn[iList][iIdx].uiReorderingOfPicNumsIdc = kuiIdc; | 344 | pRefPicListReordering->sReorderingSyn[iList][iIdx].uiReorderingOfPicNumsIdc = kuiIdc; |
| 345 | if (kuiIdc == 3) | 345 | if (kuiIdc == 3) |
| 346 | break; | 346 | break; |
| 347 | 347 | ||
| @@ -377,12 +377,12 @@ int32_t ParseDecRefPicMarking (PWelsDecoderContext pCtx, PBitStringAux pBs, PSli · 29 unmodified lines | |||
| 377 | uint32_t uiCode; | 377 | uint32_t uiCode; |
| 378 | if (kbIdrFlag) { | 378 | if (kbIdrFlag) { |
| 379 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //no_output_of_prior_pics_flag | 379 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //no_output_of_prior_pics_flag |
| 380 | kpRefMarking->bNoOutputOfPriorPicsFlag = !!uiCode; | 380 | kpRefMarking->bNoOutputOfPriorPicsFlag = !!uiCode; |
| 381 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //long_term_reference_flag | 381 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //long_term_reference_flag |
| 382 | kpRefMarking->bLongTermRefFlag = !!uiCode; | 382 | kpRefMarking->bLongTermRefFlag = !!uiCode; |
| 383 | } else { | 383 | } else { |
| 384 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //adaptive_ref_pic_marking_mode_flag | 384 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //adaptive_ref_pic_marking_mode_flag |
| 385 | kpRefMarking->bAdaptiveRefPicMarkingModeFlag = !!uiCode; | 385 | kpRefMarking->bAdaptiveRefPicMarkingModeFlag = !!uiCode; |
| 386 | if (kpRefMarking->bAdaptiveRefPicMarkingModeFlag) { | 386 | if (kpRefMarking->bAdaptiveRefPicMarkingModeFlag) { |
| 387 | int32_t iIdx = 0; | 387 | int32_t iIdx = 0; |
| 388 | do { | 388 | do { |
| @@ -423,9 +423,9 @@ bool FillDefaultSliceHeaderExt (PSliceHeaderExt pShExt, PNalUnitHeaderExt pNalEx · 34 unmodified lines | |||
| 423 | return false; | 423 | return false; |
| 424 | 424 | ||
| 425 | if (pNalExt->iNoInterLayerPredFlag || pNalExt->uiQualityId > 0) | 425 | if (pNalExt->iNoInterLayerPredFlag || pNalExt->uiQualityId > 0) |
| 426 | pShExt->bBasePredWeightTableFlag = false; | 426 | pShExt->bBasePredWeightTableFlag = false; |
| 427 | else | 427 | else |
| 428 | pShExt->bBasePredWeightTableFlag = true; | 428 | pShExt->bBasePredWeightTableFlag = true; |
| 429 | pShExt->uiRefLayerDqId = (uint8_t) - 1; | 429 | pShExt->uiRefLayerDqId = (uint8_t) - 1; |
| 430 | pShExt->uiDisableInterLayerDeblockingFilterIdc = 0; | 430 | pShExt->uiDisableInterLayerDeblockingFilterIdc = 0; |
| 431 | pShExt->iInterLayerSliceAlphaC0Offset = 0; | 431 | pShExt->iInterLayerSliceAlphaC0Offset = 0; |
| @@ -674,15 +674,15 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 242 unmodified lines | |||
| 674 | const bool kbStoreRefBaseFlag = pSliceHeadExt->bStoreRefBasePicFlag; | 674 | const bool kbStoreRefBaseFlag = pSliceHeadExt->bStoreRefBasePicFlag; |
| 675 | memcpy (&sBaseMarking, &pSliceHeadExt->sRefBasePicMarking, sizeof (SRefBasePicMarking)); //confirmed_safe_unsafe_usage | 675 | memcpy (&sBaseMarking, &pSliceHeadExt->sRefBasePicMarking, sizeof (SRefBasePicMarking)); //confirmed_safe_unsafe_usage |
| 676 | memset (pSliceHeadExt, 0, sizeof (SSliceHeaderExt)); | 676 | memset (pSliceHeadExt, 0, sizeof (SSliceHeaderExt)); |
| 677 | pSliceHeadExt->bStoreRefBasePicFlag = kbStoreRefBaseFlag; | 677 | pSliceHeadExt->bStoreRefBasePicFlag = kbStoreRefBaseFlag; |
| 678 | memcpy (&pSliceHeadExt->sRefBasePicMarking, &sBaseMarking, sizeof (SRefBasePicMarking)); //confirmed_safe_unsafe_usage | 678 | memcpy (&pSliceHeadExt->sRefBasePicMarking, &sBaseMarking, sizeof (SRefBasePicMarking)); //confirmed_safe_unsafe_usage |
| 679 | } | 679 | } |
| 680 | 680 | ||
| 681 | kpCurNal->sNalData.sVclNal.bSliceHeaderExtFlag = kbExtensionFlag; | 681 | kpCurNal->sNalData.sVclNal.bSliceHeaderExtFlag = kbExtensionFlag; |
| 682 | 682 | ||
| 683 | // first_mb_in_slice | 683 | // first_mb_in_slice |
| 684 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //first_mb_in_slice | 684 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //first_mb_in_slice |
| 685 | pSliceHead->iFirstMbInSlice = uiCode; | 685 | pSliceHead->iFirstMbInSlice = uiCode; |
| 686 | 686 | ||
| 687 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //slice_type | 687 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //slice_type |
| 688 | uiSliceType = uiCode; | 688 | uiSliceType = uiCode; |
| @@ -710,7 +710,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 21 unmodified lines | |||
| 710 | } | 710 | } |
| 711 | } | 711 | } |
| 712 | 712 | ||
| 713 | pSliceHead->eSliceType = static_cast <EWelsSliceType> (uiSliceType); | 713 | pSliceHead->eSliceType = static_cast <EWelsSliceType> (uiSliceType); |
| 714 | 714 | ||
| 715 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //pic_parameter_set_id | 715 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //pic_parameter_set_id |
| 716 | iPpsId = uiCode; | 716 | iPpsId = uiCode; |
| @@ -776,7 +776,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 59 unmodified lines | |||
| 776 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SPS_ID); | 776 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SPS_ID); |
| 777 | } | 777 | } |
| 778 | pCtx->iSPSLastInvalidId = -1; | 778 | pCtx->iSPSLastInvalidId = -1; |
| 779 | pSps = &pCtx->sSpsBuffer[pPps->iSpsId]; | 779 | pSps = &pCtx->sSpsBuffer[pPps->iSpsId]; |
| 780 | } | 780 | } |
| 781 | pSliceHead->iPpsId = iPpsId; | 781 | pSliceHead->iPpsId = iPpsId; |
| 782 | pSliceHead->iSpsId = pPps->iSpsId; | 782 | pSliceHead->iSpsId = pPps->iSpsId; |
| @@ -819,9 +819,9 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 36 unmodified lines | |||
| 819 | // standard 7.4.3 idr_pic_id should be in range 0 to 65535, inclusive. | 819 | // standard 7.4.3 idr_pic_id should be in range 0 to 65535, inclusive. |
| 820 | WELS_CHECK_SE_UPPER_ERROR (uiCode, SLICE_HEADER_IDR_PIC_ID_MAX, "idr_pic_id", GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, | 820 | WELS_CHECK_SE_UPPER_ERROR (uiCode, SLICE_HEADER_IDR_PIC_ID_MAX, "idr_pic_id", GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, |
| 821 | ERR_INFO_INVALID_IDR_PIC_ID)); | 821 | ERR_INFO_INVALID_IDR_PIC_ID)); |
| 822 | pSliceHead->uiIdrPicId = uiCode; /* uiIdrPicId */ | 822 | pSliceHead->uiIdrPicId = uiCode; /* uiIdrPicId */ |
| 823 | #ifdef LONG_TERM_REF | 823 | #ifdef LONG_TERM_REF |
| 824 | pCtx->uiCurIdrPicId = pSliceHead->uiIdrPicId; | 824 | pCtx->uiCurIdrPicId = pSliceHead->uiIdrPicId; |
| 825 | #endif | 825 | #endif |
| 826 | } | 826 | } |
| 827 | 827 | ||
| @@ -830,21 +830,21 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 2 unmodified lines | |||
| 830 | pSliceHead->iDeltaPicOrderCnt[1] = 0; | 830 | pSliceHead->iDeltaPicOrderCnt[1] = 0; |
| 831 | if (pSps->uiPocType == 0) { | 831 | if (pSps->uiPocType == 0) { |
| 832 | WELS_READ_VERIFY (BsGetBits (pBs, pSps->iLog2MaxPocLsb, &uiCode)); //pic_order_cnt_lsb | 832 | WELS_READ_VERIFY (BsGetBits (pBs, pSps->iLog2MaxPocLsb, &uiCode)); //pic_order_cnt_lsb |
| 833 | pSliceHead->iPicOrderCntLsb = uiCode; | 833 | pSliceHead->iPicOrderCntLsb = uiCode; |
| 834 | if (pPps->bPicOrderPresentFlag && !pSliceHead->bFieldPicFlag) { | 834 | if (pPps->bPicOrderPresentFlag && !pSliceHead->bFieldPicFlag) { |
| 835 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //delta_pic_order_cnt_bottom | 835 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //delta_pic_order_cnt_bottom |
| 836 | pSliceHead->iDeltaPicOrderCntBottom = iCode; | 836 | pSliceHead->iDeltaPicOrderCntBottom = iCode; |
| 837 | } | 837 | } |
| 838 | } else if (pSps->uiPocType == 1 && !pSps->bDeltaPicOrderAlwaysZeroFlag) { | 838 | } else if (pSps->uiPocType == 1 && !pSps->bDeltaPicOrderAlwaysZeroFlag) { |
| 839 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //delta_pic_order_cnt[ 0 ] | 839 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //delta_pic_order_cnt[ 0 ] |
| 840 | pSliceHead->iDeltaPicOrderCnt[0] = iCode; | 840 | pSliceHead->iDeltaPicOrderCnt[0] = iCode; |
| 841 | if (pPps->bPicOrderPresentFlag && !pSliceHead->bFieldPicFlag) { | 841 | if (pPps->bPicOrderPresentFlag && !pSliceHead->bFieldPicFlag) { |
| 842 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //delta_pic_order_cnt[ 1 ] | 842 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //delta_pic_order_cnt[ 1 ] |
| 843 | pSliceHead->iDeltaPicOrderCnt[1] = iCode; | 843 | pSliceHead->iDeltaPicOrderCnt[1] = iCode; |
| 844 | } | 844 | } |
| 845 | } | 845 | } |
| 846 | 846 | ||
| 847 | pSliceHead->iRedundantPicCnt = 0; | 847 | pSliceHead->iRedundantPicCnt = 0; |
| 848 | if (pPps->bRedundantPicCntPresentFlag) { | 848 | if (pPps->bRedundantPicCntPresentFlag) { |
| 849 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //redundant_pic_cnt | 849 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //redundant_pic_cnt |
| 850 | // standard section 7.4.3, redundant_pic_cnt should be in range 0 to 127, inclusive. | 850 | // standard section 7.4.3, redundant_pic_cnt should be in range 0 to 127, inclusive. |
| @@ -863,12 +863,12 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 12 unmodified lines | |||
| 863 | } | 863 | } |
| 864 | if (bReadNumRefFlag) { | 864 | if (bReadNumRefFlag) { |
| 865 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //num_ref_idx_active_override_flag | 865 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //num_ref_idx_active_override_flag |
| 866 | pSliceHead->bNumRefIdxActiveOverrideFlag = !!uiCode; | 866 | pSliceHead->bNumRefIdxActiveOverrideFlag = !!uiCode; |
| 867 | if (pSliceHead->bNumRefIdxActiveOverrideFlag) { | 867 | if (pSliceHead->bNumRefIdxActiveOverrideFlag) { |
| 868 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //num_ref_idx_l0_active_minus1 | 868 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //num_ref_idx_l0_active_minus1 |
| 869 | WELS_CHECK_SE_UPPER_ERROR (uiCode, MAX_NUM_REF_IDX_L0_ACTIVE_MINUS1, "num_ref_idx_l0_active_minus1", | 869 | WELS_CHECK_SE_UPPER_ERROR (uiCode, MAX_NUM_REF_IDX_L0_ACTIVE_MINUS1, "num_ref_idx_l0_active_minus1", |
| 870 | GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_NUM_REF_IDX_L0_ACTIVE_MINUS1)); | 870 | GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_NUM_REF_IDX_L0_ACTIVE_MINUS1)); |
| 871 | pSliceHead->uiRefCount[0] = 1 + uiCode; | 871 | pSliceHead->uiRefCount[0] = 1 + uiCode; |
| 872 | } | 872 | } |
| 873 | } | 873 | } |
| 874 | 874 | ||
| @@ -894,9 +894,9 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 19 unmodified lines | |||
| 894 | 894 | ||
| 895 | if (kbExtensionFlag) { | 895 | if (kbExtensionFlag) { |
| 896 | if (pNalHeaderExt->iNoInterLayerPredFlag || pNalHeaderExt->uiQualityId > 0) | 896 | if (pNalHeaderExt->iNoInterLayerPredFlag || pNalHeaderExt->uiQualityId > 0) |
| 897 | pSliceHeadExt->bBasePredWeightTableFlag = false; | 897 | pSliceHeadExt->bBasePredWeightTableFlag = false; |
| 898 | else | 898 | else |
| 899 | pSliceHeadExt->bBasePredWeightTableFlag = true; | 899 | pSliceHeadExt->bBasePredWeightTableFlag = true; |
| 900 | } | 900 | } |
| 901 | 901 | ||
| 902 | if (kpCurNal->sNalHeaderExt.sNalUnitHeader.uiNalRefIdc != 0) { | 902 | if (kpCurNal->sNalHeaderExt.sNalUnitHeader.uiNalRefIdc != 0) { |
| @@ -907,7 +907,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 4 unmodified lines | |||
| 907 | 907 | ||
| 908 | if (kbExtensionFlag && !pSubsetSps->sSpsSvcExt.bSliceHeaderRestrictionFlag) { | 908 | if (kbExtensionFlag && !pSubsetSps->sSpsSvcExt.bSliceHeaderRestrictionFlag) { |
| 909 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //store_ref_base_pic_flag | 909 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //store_ref_base_pic_flag |
| 910 | pSliceHeadExt->bStoreRefBasePicFlag = !!uiCode; | 910 | pSliceHeadExt->bStoreRefBasePicFlag = !!uiCode; |
| 911 | if ((pNalHeaderExt->bUseRefBasePicFlag || pSliceHeadExt->bStoreRefBasePicFlag) && !bIdrFlag) { | 911 | if ((pNalHeaderExt->bUseRefBasePicFlag || pSliceHeadExt->bStoreRefBasePicFlag) && !bIdrFlag) { |
| 912 | WelsLog (pLogCtx, WELS_LOG_WARNING, | 912 | WelsLog (pLogCtx, WELS_LOG_WARNING, |
| 913 | "ParseSliceHeaderSyntaxs(): bUseRefBasePicFlag or bStoreRefBasePicFlag = 1 not supported."); | 913 | "ParseSliceHeaderSyntaxs(): bUseRefBasePicFlag or bStoreRefBasePicFlag = 1 not supported."); |
| @@ -948,7 +948,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 34 unmodified lines | |||
| 948 | pSliceHead->iSliceBetaOffset = 0; | 948 | pSliceHead->iSliceBetaOffset = 0; |
| 949 | if (pPps->bDeblockingFilterControlPresentFlag) { | 949 | if (pPps->bDeblockingFilterControlPresentFlag) { |
| 950 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //disable_deblocking_filter_idc | 950 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //disable_deblocking_filter_idc |
| 951 | pSliceHead->uiDisableDeblockingFilterIdc = uiCode; | 951 | pSliceHead->uiDisableDeblockingFilterIdc = uiCode; |
| 952 | //refer to JVT-X201wcm1.doc G.7.4.3.4--2010.4.20 | 952 | //refer to JVT-X201wcm1.doc G.7.4.3.4--2010.4.20 |
| 953 | if (pSliceHead->uiDisableDeblockingFilterIdc > 6) { | 953 | if (pSliceHead->uiDisableDeblockingFilterIdc > 6) { |
| 954 | WelsLog (pLogCtx, WELS_LOG_WARNING, "disable_deblock_filter_idc (%d) out of range [0, 6]", | 954 | WelsLog (pLogCtx, WELS_LOG_WARNING, "disable_deblock_filter_idc (%d) out of range [0, 6]", |
| @@ -957,19 +957,19 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 2 unmodified lines | |||
| 957 | } | 957 | } |
| 958 | if (pSliceHead->uiDisableDeblockingFilterIdc != 1) { | 958 | if (pSliceHead->uiDisableDeblockingFilterIdc != 1) { |
| 959 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //slice_alpha_c0_offset_div2 | 959 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //slice_alpha_c0_offset_div2 |
| 960 | pSliceHead->iSliceAlphaC0Offset = iCode * 2; | 960 | pSliceHead->iSliceAlphaC0Offset = iCode * 2; |
| 961 | WELS_CHECK_SE_BOTH_ERROR (pSliceHead->iSliceAlphaC0Offset, SLICE_HEADER_ALPHAC0_BETA_OFFSET_MIN, | 961 | WELS_CHECK_SE_BOTH_ERROR (pSliceHead->iSliceAlphaC0Offset, SLICE_HEADER_ALPHAC0_BETA_OFFSET_MIN, |
| 962 | SLICE_HEADER_ALPHAC0_BETA_OFFSET_MAX, "slice_alpha_c0_offset_div2 * 2", GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, | 962 | SLICE_HEADER_ALPHAC0_BETA_OFFSET_MAX, "slice_alpha_c0_offset_div2 * 2", GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, |
| 963 | ERR_INFO_INVALID_SLICE_ALPHA_C0_OFFSET_DIV2)); | 963 | ERR_INFO_INVALID_SLICE_ALPHA_C0_OFFSET_DIV2)); |
| 964 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //slice_beta_offset_div2 | 964 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //slice_beta_offset_div2 |
| 965 | pSliceHead->iSliceBetaOffset = iCode * 2; | 965 | pSliceHead->iSliceBetaOffset = iCode * 2; |
| 966 | WELS_CHECK_SE_BOTH_ERROR (pSliceHead->iSliceBetaOffset, SLICE_HEADER_ALPHAC0_BETA_OFFSET_MIN, | 966 | WELS_CHECK_SE_BOTH_ERROR (pSliceHead->iSliceBetaOffset, SLICE_HEADER_ALPHAC0_BETA_OFFSET_MIN, |
| 967 | SLICE_HEADER_ALPHAC0_BETA_OFFSET_MAX, "slice_beta_offset_div2 * 2", GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, | 967 | SLICE_HEADER_ALPHAC0_BETA_OFFSET_MAX, "slice_beta_offset_div2 * 2", GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, |
| 968 | ERR_INFO_INVALID_SLICE_BETA_OFFSET_DIV2)); | 968 | ERR_INFO_INVALID_SLICE_BETA_OFFSET_DIV2)); |
| 969 | } | 969 | } |
| 970 | } | 970 | } |
| 971 | 971 | ||
| 972 | bSgChangeCycleInvolved = (pPps->uiNumSliceGroups > 1 && pPps->uiSliceGroupMapType >= 3 | 972 | bSgChangeCycleInvolved = (pPps->uiNumSliceGroups > 1 && pPps->uiSliceGroupMapType >= 3 |
| 973 | && pPps->uiSliceGroupMapType <= 5); | 973 | && pPps->uiSliceGroupMapType <= 5); |
| 974 | if (kbExtensionFlag && bSgChangeCycleInvolved) | 974 | if (kbExtensionFlag && bSgChangeCycleInvolved) |
| 975 | bSgChangeCycleInvolved = (bSgChangeCycleInvolved && (uiQualityId == BASE_QUALITY_ID)); | 975 | bSgChangeCycleInvolved = (bSgChangeCycleInvolved && (uiQualityId == BASE_QUALITY_ID)); |
| @@ -978,24 +978,24 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 2 unmodified lines | |||
| 978 | const int32_t kiNumBits = (int32_t)WELS_CEIL (log (static_cast<double> (1 + pPps->uiPicSizeInMapUnits / | 978 | const int32_t kiNumBits = (int32_t)WELS_CEIL (log (static_cast<double> (1 + pPps->uiPicSizeInMapUnits / |
| 979 | pPps->uiSliceGroupChangeRate))); | 979 | pPps->uiSliceGroupChangeRate))); |
| 980 | WELS_READ_VERIFY (BsGetBits (pBs, kiNumBits, &uiCode)); //lice_group_change_cycle | 980 | WELS_READ_VERIFY (BsGetBits (pBs, kiNumBits, &uiCode)); //lice_group_change_cycle |
| 981 | pSliceHead->iSliceGroupChangeCycle = uiCode; | 981 | pSliceHead->iSliceGroupChangeCycle = uiCode; |
| 982 | } else | 982 | } else |
| 983 | pSliceHead->iSliceGroupChangeCycle = 0; | 983 | pSliceHead->iSliceGroupChangeCycle = 0; |
| 984 | } | 984 | } |
| 985 | 985 | ||
| 986 | if (!kbExtensionFlag) { | 986 | if (!kbExtensionFlag) { |
| 987 | FillDefaultSliceHeaderExt (pSliceHeadExt, pNalHeaderExt); | 987 | FillDefaultSliceHeaderExt (pSliceHeadExt, pNalHeaderExt); |
| 988 | } else { | 988 | } else { |
| 989 | /* Extra syntax elements newly introduced */ | 989 | /* Extra syntax elements newly introduced */ |
| 990 | pSliceHeadExt->pSubsetSps = pSubsetSps; | 990 | pSliceHeadExt->pSubsetSps = pSubsetSps; |
| 991 | 991 | ||
| 992 | if (!pNalHeaderExt->iNoInterLayerPredFlag && BASE_QUALITY_ID == uiQualityId) { | 992 | if (!pNalHeaderExt->iNoInterLayerPredFlag && BASE_QUALITY_ID == uiQualityId) { |
| 993 | //the following should be deleted for CODE_CLEAN | 993 | //the following should be deleted for CODE_CLEAN |
| 994 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //ref_layer_dq_id | 994 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //ref_layer_dq_id |
| 995 | pSliceHeadExt->uiRefLayerDqId = uiCode; | 995 | pSliceHeadExt->uiRefLayerDqId = uiCode; |
| 996 | if (pSubsetSps->sSpsSvcExt.bInterLayerDeblockingFilterCtrlPresentFlag) { | 996 | if (pSubsetSps->sSpsSvcExt.bInterLayerDeblockingFilterCtrlPresentFlag) { |
| 997 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //disable_inter_layer_deblocking_filter_idc | 997 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //disable_inter_layer_deblocking_filter_idc |
| 998 | pSliceHeadExt->uiDisableInterLayerDeblockingFilterIdc = uiCode; | 998 | pSliceHeadExt->uiDisableInterLayerDeblockingFilterIdc = uiCode; |
| 999 | //refer to JVT-X201wcm1.doc G.7.4.3.4--2010.4.20 | 999 | //refer to JVT-X201wcm1.doc G.7.4.3.4--2010.4.20 |
| 1000 | if (pSliceHeadExt->uiDisableInterLayerDeblockingFilterIdc > 6) { | 1000 | if (pSliceHeadExt->uiDisableInterLayerDeblockingFilterIdc > 6) { |
| 1001 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "disable_inter_layer_deblock_filter_idc (%d) out of range [0, 6]", | 1001 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "disable_inter_layer_deblock_filter_idc (%d) out of range [0, 6]", |
| @@ -1004,13 +1004,13 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 2 unmodified lines | |||
| 1004 | } | 1004 | } |
| 1005 | if (pSliceHeadExt->uiDisableInterLayerDeblockingFilterIdc != 1) { | 1005 | if (pSliceHeadExt->uiDisableInterLayerDeblockingFilterIdc != 1) { |
| 1006 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //inter_layer_slice_alpha_c0_offset_div2 | 1006 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //inter_layer_slice_alpha_c0_offset_div2 |
| 1007 | pSliceHeadExt->iInterLayerSliceAlphaC0Offset = iCode * 2; | 1007 | pSliceHeadExt->iInterLayerSliceAlphaC0Offset = iCode * 2; |
| 1008 | WELS_CHECK_SE_BOTH_ERROR (pSliceHeadExt->iInterLayerSliceAlphaC0Offset, | 1008 | WELS_CHECK_SE_BOTH_ERROR (pSliceHeadExt->iInterLayerSliceAlphaC0Offset, |
| 1009 | SLICE_HEADER_INTER_LAYER_ALPHAC0_BETA_OFFSET_MIN, SLICE_HEADER_INTER_LAYER_ALPHAC0_BETA_OFFSET_MAX, | 1009 | SLICE_HEADER_INTER_LAYER_ALPHAC0_BETA_OFFSET_MIN, SLICE_HEADER_INTER_LAYER_ALPHAC0_BETA_OFFSET_MAX, |
| 1010 | "inter_layer_alpha_c0_offset_div2 * 2", GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, | 1010 | "inter_layer_alpha_c0_offset_div2 * 2", GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, |
| 1011 | ERR_INFO_INVALID_SLICE_ALPHA_C0_OFFSET_DIV2)); | 1011 | ERR_INFO_INVALID_SLICE_ALPHA_C0_OFFSET_DIV2)); |
| 1012 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //inter_layer_slice_beta_offset_div2 | 1012 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //inter_layer_slice_beta_offset_div2 |
| 1013 | pSliceHeadExt->iInterLayerSliceBetaOffset = iCode * 2; | 1013 | pSliceHeadExt->iInterLayerSliceBetaOffset = iCode * 2; |
| 1014 | WELS_CHECK_SE_BOTH_ERROR (pSliceHeadExt->iInterLayerSliceBetaOffset, SLICE_HEADER_INTER_LAYER_ALPHAC0_BETA_OFFSET_MIN, | 1014 | WELS_CHECK_SE_BOTH_ERROR (pSliceHeadExt->iInterLayerSliceBetaOffset, SLICE_HEADER_INTER_LAYER_ALPHAC0_BETA_OFFSET_MIN, |
| 1015 | SLICE_HEADER_INTER_LAYER_ALPHAC0_BETA_OFFSET_MAX, "inter_layer_slice_beta_offset_div2 * 2", | 1015 | SLICE_HEADER_INTER_LAYER_ALPHAC0_BETA_OFFSET_MAX, "inter_layer_slice_beta_offset_div2 * 2", |
| 1016 | GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SLICE_BETA_OFFSET_DIV2)); | 1016 | GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SLICE_BETA_OFFSET_DIV2)); |
| @@ -1021,7 +1021,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 4 unmodified lines | |||
| 1021 | pSliceHeadExt->uiRefLayerChromaPhaseYPlus1 = pSubsetSps->sSpsSvcExt.uiSeqRefLayerChromaPhaseYPlus1; | 1021 | pSliceHeadExt->uiRefLayerChromaPhaseYPlus1 = pSubsetSps->sSpsSvcExt.uiSeqRefLayerChromaPhaseYPlus1; |
| 1022 | 1022 | ||
| 1023 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //constrained_intra_resampling_flag | 1023 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //constrained_intra_resampling_flag |
| 1024 | pSliceHeadExt->bConstrainedIntraResamplingFlag = !!uiCode; | 1024 | pSliceHeadExt->bConstrainedIntraResamplingFlag = !!uiCode; |
| 1025 | 1025 | ||
| 1026 | { | 1026 | { |
| 1027 | SPosOffset pos; | 1027 | SPosOffset pos; |
| @@ -1038,7 +1038,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 10 unmodified lines | |||
| 1038 | WelsLog (pLogCtx, WELS_LOG_WARNING, "MGS not supported."); | 1038 | WelsLog (pLogCtx, WELS_LOG_WARNING, "MGS not supported."); |
| 1039 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_MGS); | 1039 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_MGS); |
| 1040 | } else { | 1040 | } else { |
| 1041 | pSliceHeadExt->uiRefLayerDqId = (uint8_t) - 1; | 1041 | pSliceHeadExt->uiRefLayerDqId = (uint8_t) - 1; |
| 1042 | } | 1042 | } |
| 1043 | 1043 | ||
| 1044 | pSliceHeadExt->bSliceSkipFlag = false; | 1044 | pSliceHeadExt->bSliceSkipFlag = false; |
| @@ -1055,28 +1055,28 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 10 unmodified lines | |||
| 1055 | 1055 | ||
| 1056 | if (!pNalHeaderExt->iNoInterLayerPredFlag) { | 1056 | if (!pNalHeaderExt->iNoInterLayerPredFlag) { |
| 1057 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //slice_skip_flag | 1057 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //slice_skip_flag |
| 1058 | pSliceHeadExt->bSliceSkipFlag = !!uiCode; | 1058 | pSliceHeadExt->bSliceSkipFlag = !!uiCode; |
| 1059 | if (pSliceHeadExt->bSliceSkipFlag) { | 1059 | if (pSliceHeadExt->bSliceSkipFlag) { |
| 1060 | WelsLog (pLogCtx, WELS_LOG_WARNING, "bSliceSkipFlag == 1 not supported."); | 1060 | WelsLog (pLogCtx, WELS_LOG_WARNING, "bSliceSkipFlag == 1 not supported."); |
| 1061 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_SLICESKIP); | 1061 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_UNSUPPORTED_SLICESKIP); |
| 1062 | } else { | 1062 | } else { |
| 1063 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //adaptive_base_mode_flag | 1063 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //adaptive_base_mode_flag |
| 1064 | pSliceHeadExt->bAdaptiveBaseModeFlag = !!uiCode; | 1064 | pSliceHeadExt->bAdaptiveBaseModeFlag = !!uiCode; |
| 1065 | if (!pSliceHeadExt->bAdaptiveBaseModeFlag) { | 1065 | if (!pSliceHeadExt->bAdaptiveBaseModeFlag) { |
| 1066 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //default_base_mode_flag | 1066 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //default_base_mode_flag |
| 1067 | pSliceHeadExt->bDefaultBaseModeFlag = !!uiCode; | 1067 | pSliceHeadExt->bDefaultBaseModeFlag = !!uiCode; |
| 1068 | } | 1068 | } |
| 1069 | if (!pSliceHeadExt->bDefaultBaseModeFlag) { | 1069 | if (!pSliceHeadExt->bDefaultBaseModeFlag) { |
| 1070 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //adaptive_motion_prediction_flag | 1070 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //adaptive_motion_prediction_flag |
| 1071 | pSliceHeadExt->bAdaptiveMotionPredFlag = !!uiCode; | 1071 | pSliceHeadExt->bAdaptiveMotionPredFlag = !!uiCode; |
| 1072 | if (!pSliceHeadExt->bAdaptiveMotionPredFlag) { | 1072 | if (!pSliceHeadExt->bAdaptiveMotionPredFlag) { |
| 1073 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //default_motion_prediction_flag | 1073 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //default_motion_prediction_flag |
| 1074 | pSliceHeadExt->bDefaultMotionPredFlag = !!uiCode; | 1074 | pSliceHeadExt->bDefaultMotionPredFlag = !!uiCode; |
| 1075 | } | 1075 | } |
| 1076 | } | 1076 | } |
| 1077 | 1077 | ||
| 1078 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //adaptive_residual_prediction_flag | 1078 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //adaptive_residual_prediction_flag |
| 1079 | pSliceHeadExt->bAdaptiveResidualPredFlag = !!uiCode; | 1079 | pSliceHeadExt->bAdaptiveResidualPredFlag = !!uiCode; |
| 1080 | if (!pSliceHeadExt->bAdaptiveResidualPredFlag) { | 1080 | if (!pSliceHeadExt->bAdaptiveResidualPredFlag) { |
| 1081 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //default_residual_prediction_flag | 1081 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //default_residual_prediction_flag |
| 1082 | pSliceHeadExt->bDefaultResidualPredFlag = !!uiCode; | 1082 | pSliceHeadExt->bDefaultResidualPredFlag = !!uiCode; |
| @@ -1084,15 +1084,15 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 1 unmodified line | |||
| 1084 | } | 1084 | } |
| 1085 | if (pSubsetSps->sSpsSvcExt.bAdaptiveTCoeffLevelPredFlag) { | 1085 | if (pSubsetSps->sSpsSvcExt.bAdaptiveTCoeffLevelPredFlag) { |
| 1086 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //tcoeff_level_prediction_flag | 1086 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //tcoeff_level_prediction_flag |
| 1087 | pSliceHeadExt->bTCoeffLevelPredFlag = !!uiCode; | 1087 | pSliceHeadExt->bTCoeffLevelPredFlag = !!uiCode; |
| 1088 | } | 1088 | } |
| 1089 | } | 1089 | } |
| 1090 | 1090 | ||
| 1091 | if (!pSubsetSps->sSpsSvcExt.bSliceHeaderRestrictionFlag) { | 1091 | if (!pSubsetSps->sSpsSvcExt.bSliceHeaderRestrictionFlag) { |
| 1092 | WELS_READ_VERIFY (BsGetBits (pBs, 4, &uiCode)); //scan_idx_start | 1092 | WELS_READ_VERIFY (BsGetBits (pBs, 4, &uiCode)); //scan_idx_start |
| 1093 | pSliceHeadExt->uiScanIdxStart = uiCode; | 1093 | pSliceHeadExt->uiScanIdxStart = uiCode; |
| 1094 | WELS_READ_VERIFY (BsGetBits (pBs, 4, &uiCode)); //scan_idx_end | 1094 | WELS_READ_VERIFY (BsGetBits (pBs, 4, &uiCode)); //scan_idx_end |
| 1095 | pSliceHeadExt->uiScanIdxEnd = uiCode; | 1095 | pSliceHeadExt->uiScanIdxEnd = uiCode; |
| 1096 | if (pSliceHeadExt->uiScanIdxStart != 0 || pSliceHeadExt->uiScanIdxEnd != 15) { | 1096 | if (pSliceHeadExt->uiScanIdxStart != 0 || pSliceHeadExt->uiScanIdxEnd != 15) { |
| 1097 | WelsLog (pLogCtx, WELS_LOG_WARNING, "uiScanIdxStart (%d) != 0 and uiScanIdxEnd (%d) !=15 not supported here", | 1097 | WelsLog (pLogCtx, WELS_LOG_WARNING, "uiScanIdxStart (%d) != 0 and uiScanIdxEnd (%d) !=15 not supported here", |
| 1098 | pSliceHeadExt->uiScanIdxStart, pSliceHeadExt->uiScanIdxEnd); | 1098 | pSliceHeadExt->uiScanIdxStart, pSliceHeadExt->uiScanIdxEnd); |
| @@ -1113,7 +1113,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 14 unmodified lines | |||
| 1113 | * ppDst: succeeded VCL NAL based AVC (I/P Slice) | 1113 | * ppDst: succeeded VCL NAL based AVC (I/P Slice) |
| 1114 | */ | 1114 | */ |
| 1115 | bool PrefetchNalHeaderExtSyntax (PWelsDecoderContext pCtx, PNalUnit const kppDst, PNalUnit const kpSrc) { | 1115 | bool PrefetchNalHeaderExtSyntax (PWelsDecoderContext pCtx, PNalUnit const kppDst, PNalUnit const kpSrc) { |
| 1116 | PNalUnitHeaderExt pNalHdrExtD = NULL, pNalHdrExtS = NULL; | 1116 | PNalUnitHeaderExt pNalHdrExtD = NULL, pNalHdrExtS = NULL; |
| 1117 | PSliceHeaderExt pShExtD = NULL; | 1117 | PSliceHeaderExt pShExtD = NULL; |
| 1118 | PPrefixNalUnit pPrefixS = NULL; | 1118 | PPrefixNalUnit pPrefixS = NULL; |
| 1119 | PSps pSps = NULL; | 1119 | PSps pSps = NULL; |
| @@ -1502,7 +1502,7 @@ void ResetCurrentAccessUnit (PWelsDecoderContext pCtx) { · 382 unmodified lines | |||
| 1502 | pCurAu->pNalUnitsList[iIdx] = t; | 1502 | pCurAu->pNalUnitsList[iIdx] = t; |
| 1503 | ++ iIdx; | 1503 | ++ iIdx; |
| 1504 | } | 1504 | } |
| 1505 | pCurAu->uiActualUnitsNum = pCurAu->uiAvailUnitsNum = kuiLeftNum; | 1505 | pCurAu->uiActualUnitsNum = pCurAu->uiAvailUnitsNum = kuiLeftNum; |
| 1506 | } | 1506 | } |
| 1507 | } | 1507 | } |
| 1508 | 1508 | ||
| @@ -2098,22 +2098,22 @@ int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBuf · 589 unmodified lines | |||
| 2098 | int16_t iLastIdD = -1, iLastIdQ = -1; | 2098 | int16_t iLastIdD = -1, iLastIdQ = -1; |
| 2099 | int16_t iCurrIdD = 0, iCurrIdQ = 0; | 2099 | int16_t iCurrIdD = 0, iCurrIdQ = 0; |
| 2100 | uint8_t uiNalRefIdc = 0; | 2100 | uint8_t uiNalRefIdc = 0; |
| 2101 | bool bFreshSliceAvailable = | 2101 | bool bFreshSliceAvailable = |
| 2102 | true; // Another fresh slice comingup for given dq layer, for multiple slices in case of header parts of slices sometimes loss over error-prone channels, 8/14/2008 | 2102 | true; // Another fresh slice comingup for given dq layer, for multiple slices in case of header parts of slices sometimes loss over error-prone channels, 8/14/2008 |
| 2103 | 2103 | ||
| 2104 | //update pCurDqLayer at the starting of AU decoding | 2104 | //update pCurDqLayer at the starting of AU decoding |
| 2105 | if (pCtx->bInitialDqLayersMem) { | 2105 | if (pCtx->bInitialDqLayersMem) { |
| 2106 | pCtx->pCurDqLayer = pCtx->pDqLayersList[0]; | 2106 | pCtx->pCurDqLayer = pCtx->pDqLayersList[0]; |
| 2107 | } | 2107 | } |
| 2108 | 2108 | ||
| 2109 | InitCurDqLayerData (pCtx, pCtx->pCurDqLayer); | 2109 | InitCurDqLayerData (pCtx, pCtx->pCurDqLayer); |
| 2110 | 2110 | ||
| 2111 | pNalCur = pCurAu->pNalUnitsList[iIdx]; | 2111 | pNalCur = pCurAu->pNalUnitsList[iIdx]; |
| 2112 | while (iIdx <= iEndIdx) { | 2112 | while (iIdx <= iEndIdx) { |
| 2113 | PDqLayer dq_cur = pCtx->pCurDqLayer; | 2113 | PDqLayer dq_cur = pCtx->pCurDqLayer; |
| 2114 | SLayerInfo pLayerInfo; | 2114 | SLayerInfo pLayerInfo; |
| 2115 | PSliceHeaderExt pShExt = NULL; | 2115 | PSliceHeaderExt pShExt = NULL; |
| 2116 | PSliceHeader pSh = NULL; | 2116 | PSliceHeader pSh = NULL; |
| 2117 | 2117 | ||
| 2118 | if (pCtx->pDec == NULL) { | 2118 | if (pCtx->pDec == NULL) { |
| 2119 | pCtx->pDec = PrefetchPic (pCtx->pPicBuff[0]); | 2119 | pCtx->pDec = PrefetchPic (pCtx->pPicBuff[0]); |
| @@ -2191,8 +2191,8 @@ int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBuf · 71 unmodified lines | |||
| 2191 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_FMO_INIT_FAIL); | 2191 | return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_FMO_INIT_FAIL); |
| 2192 | } | 2192 | } |
| 2193 | 2193 | ||
| 2194 | bFreshSliceAvailable = (iCurrIdD != iLastIdD | 2194 | bFreshSliceAvailable = (iCurrIdD != iLastIdD |
| 2195 | || iCurrIdQ != iLastIdQ); // do not need condition of (first_mb == 0) due multiple slices might be disorder | 2195 | || iCurrIdQ != iLastIdQ); // do not need condition of (first_mb == 0) due multiple slices might be disorder |
| 2196 | 2196 | ||
| 2197 | WelsDqLayerDecodeStart (pCtx, pNalCur, pLayerInfo.pSps, pLayerInfo.pPps); | 2197 | WelsDqLayerDecodeStart (pCtx, pNalCur, pLayerInfo.pSps, pLayerInfo.pPps); |
| 2198 | 2198 | ||
| @@ -2279,15 +2279,15 @@ int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBuf · 80 unmodified lines | |||
| 2279 | fprintf (stderr, "cur_frame : %d\tiCurrIdD : %d\n ", | 2279 | fprintf (stderr, "cur_frame : %d\tiCurrIdD : %d\n ", |
| 2280 | dq_cur->sLayerInfo.sSliceInLayer.sSliceHeaderExt.sSliceHeader.iFrameNum, iCurrIdD); | 2280 | dq_cur->sLayerInfo.sSliceInLayer.sSliceHeaderExt.sSliceHeader.iFrameNum, iCurrIdD); |
| 2281 | #endif//#if !CODEC_FOR_TESTBED | 2281 | #endif//#if !CODEC_FOR_TESTBED |
| 2282 | iLastIdD = iCurrIdD; | 2282 | iLastIdD = iCurrIdD; |
| 2283 | iLastIdQ = iCurrIdQ; | 2283 | iLastIdQ = iCurrIdQ; |
| 2284 | 2284 | ||
| 2285 | //pNalUnitsList overflow. | 2285 | //pNalUnitsList overflow. |
| 2286 | ++ iIdx; | 2286 | ++ iIdx; |
| 2287 | if (iIdx <= iEndIdx) { | 2287 | if (iIdx <= iEndIdx) { |
| 2288 | pNalCur = pCurAu->pNalUnitsList[iIdx]; | 2288 | pNalCur = pCurAu->pNalUnitsList[iIdx]; |
| 2289 | } else { | 2289 | } else { |
| 2290 | pNalCur = NULL; | 2290 | pNalCur = NULL; |
| 2291 | } | 2291 | } |
| 2292 | 2292 | ||
| 2293 | if (pNalCur == NULL || | 2293 | if (pNalCur == NULL || |
| @@ -2346,7 +2346,7 @@ int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBuf · 52 unmodified lines | |||
| 2346 | 2346 | ||
| 2347 | // need update frame_num due current frame is well decoded | 2347 | // need update frame_num due current frame is well decoded |
| 2348 | if (pCurAu->pNalUnitsList[pCurAu->uiStartPos]->sNalHeaderExt.sNalUnitHeader.uiNalRefIdc > 0) | 2348 | if (pCurAu->pNalUnitsList[pCurAu->uiStartPos]->sNalHeaderExt.sNalUnitHeader.uiNalRefIdc > 0) |
| 2349 | pCtx->iPrevFrameNum = pSh->iFrameNum; | 2349 | pCtx->iPrevFrameNum = pSh->iFrameNum; |
| 2350 | if (pCtx->bLastHasMmco5) | 2350 | if (pCtx->bLastHasMmco5) |
| 2351 | pCtx->iPrevFrameNum = 0; | 2351 | pCtx->iPrevFrameNum = 0; |
| 2352 | } | 2352 | } |