| 608 | } |
| 609 | |
| 610 | int32_t ParseIntra16x16Mode (PWelsDecoderContext pCtx, PWelsNeighAvail pNeighAvail, PBitStringAux pBs, |
| 611 | PDqLayer pCurDqLayer) { |
| 612 | int32_t iMbXy = pCurDqLayer->iMbXyIndex; |
| 613 | uint8_t uiNeighAvail = 0; //0x07 = 0 1 1 1, means left, top-left, top avail or not. (1: avail, 0: unavail) |
| 614 | uint32_t uiCode; |
| 615 | int32_t iCode; |
| 616 | pCtx->pMap16x16NeighToSampleFunc (pNeighAvail, &uiNeighAvail); |
| 617 | |
| 618 | if (CheckIntra16x16PredMode (uiNeighAvail, |
| 619 | &pCurDqLayer->pIntraPredMode[iMbXy][7])) { //invalid iPredMode, must stop decoding |
| 620 | return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_I16x16_PRED_MODE); |
| 621 | } |
| 622 | if (pCtx->pSps->uiChromaFormatIdc == 0) |
| 623 | return ERR_NONE; |
| 624 | |
| 625 | if (pCurDqLayer->sLayerInfo.pPps->bEntropyCodingModeFlag) { |
| 626 | WELS_READ_VERIFY (ParseIntraPredModeChromaCabac (pCtx, uiNeighAvail, iCode)); |
| 627 | if (iCode > MAX_PRED_MODE_ID_CHROMA) { |
| 628 | return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_I_CHROMA_PRED_MODE); |
| 629 | } |
| 630 | pCurDqLayer->pChromaPredMode[iMbXy] = iCode; |
| 631 | } else { |
| 632 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //intra_chroma_pred_mode |
| 633 | if (uiCode > MAX_PRED_MODE_ID_CHROMA) { |
| 634 | return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_I_CHROMA_PRED_MODE); |
| 635 | } |
| 636 | pCurDqLayer->pChromaPredMode[iMbXy] = uiCode; |
| 637 | } |
| 638 | if (-1 == pCurDqLayer->pChromaPredMode[iMbXy] |
| 639 | || CheckIntraChromaPredMode (uiNeighAvail, &pCurDqLayer->pChromaPredMode[iMbXy])) { |
| 640 | return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_I_CHROMA_PRED_MODE); |
| 641 | } |
| 642 | |
| 643 | return ERR_NONE; |
| 644 | } |
| 645 | |
| 646 | int32_t WelsDecodeMbCabacISliceBaseMode0 (PWelsDecoderContext pCtx, uint32_t& uiEosFlag) { |
| 647 | PDqLayer pCurDqLayer = pCtx->pCurDqLayer; |
no test coverage detected