! ************************************************************************************* * \brief to write Picture Parameter Set (PPS) * * \param pPps pPps * \param pBitStringAux bitstream writer auxiliary * * \return 0 - successed * 1 - failed * * \note Call it in case EWelsNalUnitType is PPS. **************************************************************
| 404 | ************************************************************************************* |
| 405 | */ |
| 406 | int32_t WelsWritePpsSyntax (SWelsPPS* pPps, SBitStringAux* pBitStringAux, |
| 407 | IWelsParametersetStrategy* pParametersetStrategy) { |
| 408 | SBitStringAux* pLocalBitStringAux = pBitStringAux; |
| 409 | |
| 410 | BsWriteUE (pLocalBitStringAux, pPps->iPpsId + pParametersetStrategy->GetPpsIdOffset (pPps->iPpsId)); |
| 411 | BsWriteUE (pLocalBitStringAux, pPps->iSpsId + pParametersetStrategy->GetSpsIdOffset (pPps->iPpsId, pPps->iSpsId)); |
| 412 | |
| 413 | BsWriteOneBit (pLocalBitStringAux, pPps->bEntropyCodingModeFlag); |
| 414 | BsWriteOneBit (pLocalBitStringAux, false/*pPps->bPicOrderPresentFlag*/); |
| 415 | |
| 416 | #ifdef DISABLE_FMO_FEATURE |
| 417 | BsWriteUE (pLocalBitStringAux, 0/*pPps->uiNumSliceGroups - 1*/); |
| 418 | #else |
| 419 | BsWriteUE (pLocalBitStringAux, pPps->uiNumSliceGroups - 1); |
| 420 | if (pPps->uiNumSliceGroups > 1) { |
| 421 | uint32_t i, uiNumBits; |
| 422 | |
| 423 | BsWriteUE (pLocalBitStringAux, pPps->uiSliceGroupMapType); |
| 424 | |
| 425 | switch (pPps->uiSliceGroupMapType) { |
| 426 | case 0: |
| 427 | for (i = 0; i < pPps->uiNumSliceGroups; i ++) { |
| 428 | BsWriteUE (pLocalBitStringAux, pPps->uiRunLength[i] - 1); |
| 429 | } |
| 430 | break; |
| 431 | case 2: |
| 432 | for (i = 0; i < pPps->uiNumSliceGroups; i ++) { |
| 433 | BsWriteUE (pLocalBitStringAux, pPps->uiTopLeft[i]); |
| 434 | BsWriteUE (pLocalBitStringAux, pPps->uiBottomRight[i]); |
| 435 | } |
| 436 | break; |
| 437 | case 3: |
| 438 | case 4: |
| 439 | case 5: |
| 440 | BsWriteOneBit (pLocalBitStringAux, pPps->bSliceGroupChangeDirectionFlag); |
| 441 | BsWriteUE (pLocalBitStringAux, pPps->uiSliceGroupChangeRate - 1); |
| 442 | break; |
| 443 | case 6: |
| 444 | BsWriteUE (pLocalBitStringAux, pPps->uiPicSizeInMapUnits - 1); |
| 445 | uiNumBits = 0;///////////////////WELS_CEILLOG2(pPps->uiPicSizeInMapUnits); |
| 446 | for (i = 0; i < pPps->uiPicSizeInMapUnits; i ++) { |
| 447 | BsWriteBits (pLocalBitStringAux, uiNumBits, pPps->uiSliceGroupId[i]); |
| 448 | } |
| 449 | break; |
| 450 | default: |
| 451 | break; |
| 452 | } |
| 453 | } |
| 454 | #endif//!DISABLE_FMO_FEATURE |
| 455 | |
| 456 | BsWriteUE (pLocalBitStringAux, 0/*pPps->uiNumRefIdxL0Active - 1*/); |
| 457 | BsWriteUE (pLocalBitStringAux, 0/*pPps->uiNumRefIdxL1Active - 1*/); |
| 458 | |
| 459 | |
| 460 | BsWriteOneBit (pLocalBitStringAux, false/*pPps->bWeightedPredFlag*/); |
| 461 | BsWriteBits (pLocalBitStringAux, 2, 0/*pPps->uiWeightedBiPredIdc*/); |
| 462 | |
| 463 | BsWriteSE (pLocalBitStringAux, pPps->iPicInitQp - 26); |
no test coverage detected