| 720 | |
| 721 | |
| 722 | int32_t DecodeSpsSvcExt (PWelsDecoderContext pCtx, PSubsetSps pSpsExt, PBitStringAux pBs) { |
| 723 | PSpsSvcExt pExt = NULL; |
| 724 | uint32_t uiCode; |
| 725 | int32_t iCode; |
| 726 | |
| 727 | pExt = &pSpsExt->sSpsSvcExt; |
| 728 | |
| 729 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //inter_layer_deblocking_filter_control_present_flag |
| 730 | pExt->bInterLayerDeblockingFilterCtrlPresentFlag = !!uiCode; |
| 731 | WELS_READ_VERIFY (BsGetBits (pBs, 2, &uiCode)); //extended_spatial_scalability_idc |
| 732 | pExt->uiExtendedSpatialScalability = uiCode; |
| 733 | if (pExt->uiExtendedSpatialScalability > 2) { |
| 734 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, |
| 735 | "DecodeSpsSvcExt():extended_spatial_scalability (%d) != 0, ESS not supported!", |
| 736 | pExt->uiExtendedSpatialScalability); |
| 737 | return GENERATE_ERROR_NO (ERR_LEVEL_PARAM_SETS, ERR_INFO_INVALID_ESS); |
| 738 | } |
| 739 | |
| 740 | pExt->uiChromaPhaseXPlus1Flag = |
| 741 | 0; // FIXME: Incoherent with JVT X201 standard (= 1), but conformance to JSVM (= 0) implementation. |
| 742 | pExt->uiChromaPhaseYPlus1 = 1; |
| 743 | |
| 744 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //chroma_phase_x_plus1_flag |
| 745 | pExt->uiChromaPhaseXPlus1Flag = uiCode; |
| 746 | WELS_READ_VERIFY (BsGetBits (pBs, 2, &uiCode)); //chroma_phase_y_plus1 |
| 747 | pExt->uiChromaPhaseYPlus1 = uiCode; |
| 748 | |
| 749 | pExt->uiSeqRefLayerChromaPhaseXPlus1Flag = pExt->uiChromaPhaseXPlus1Flag; |
| 750 | pExt->uiSeqRefLayerChromaPhaseYPlus1 = pExt->uiChromaPhaseYPlus1; |
| 751 | memset (&pExt->sSeqScaledRefLayer, 0, sizeof (SPosOffset)); |
| 752 | |
| 753 | if (pExt->uiExtendedSpatialScalability == 1) { |
| 754 | SPosOffset* const kpPos = &pExt->sSeqScaledRefLayer; |
| 755 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //seq_ref_layer_chroma_phase_x_plus1_flag |
| 756 | pExt->uiSeqRefLayerChromaPhaseXPlus1Flag = uiCode; |
| 757 | WELS_READ_VERIFY (BsGetBits (pBs, 2, &uiCode)); //seq_ref_layer_chroma_phase_y_plus1 |
| 758 | pExt->uiSeqRefLayerChromaPhaseYPlus1 = uiCode; |
| 759 | |
| 760 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //seq_scaled_ref_layer_left_offset |
| 761 | kpPos->iLeftOffset = iCode; |
| 762 | WELS_CHECK_SE_BOTH_WARNING (kpPos->iLeftOffset, SUBSET_SPS_SEQ_SCALED_REF_LAYER_LEFT_OFFSET_MIN, |
| 763 | SUBSET_SPS_SEQ_SCALED_REF_LAYER_LEFT_OFFSET_MAX, "seq_scaled_ref_layer_left_offset"); |
| 764 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //seq_scaled_ref_layer_top_offset |
| 765 | kpPos->iTopOffset = iCode; |
| 766 | WELS_CHECK_SE_BOTH_WARNING (kpPos->iTopOffset, SUBSET_SPS_SEQ_SCALED_REF_LAYER_TOP_OFFSET_MIN, |
| 767 | SUBSET_SPS_SEQ_SCALED_REF_LAYER_TOP_OFFSET_MAX, "seq_scaled_ref_layer_top_offset"); |
| 768 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //seq_scaled_ref_layer_right_offset |
| 769 | kpPos->iRightOffset = iCode; |
| 770 | WELS_CHECK_SE_BOTH_WARNING (kpPos->iRightOffset, SUBSET_SPS_SEQ_SCALED_REF_LAYER_RIGHT_OFFSET_MIN, |
| 771 | SUBSET_SPS_SEQ_SCALED_REF_LAYER_RIGHT_OFFSET_MAX, "seq_scaled_ref_layer_right_offset"); |
| 772 | WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //seq_scaled_ref_layer_bottom_offset |
| 773 | kpPos->iBottomOffset = iCode; |
| 774 | WELS_CHECK_SE_BOTH_WARNING (kpPos->iBottomOffset, SUBSET_SPS_SEQ_SCALED_REF_LAYER_BOTTOM_OFFSET_MIN, |
| 775 | SUBSET_SPS_SEQ_SCALED_REF_LAYER_BOTTOM_OFFSET_MAX, "seq_scaled_ref_layer_bottom_offset"); |
| 776 | } |
| 777 | |
| 778 | WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //seq_tcoeff_level_prediction_flag |
| 779 | pExt->bSeqTCoeffLevelPredFlag = !!uiCode; |
no test coverage detected