MCPcopy Create free account
hub / github.com/cisco/openh264 / ParsePps

Function ParsePps

codec/decoder/core/src/au_parser.cpp:1326–1481  ·  view source on GitHub ↗

! ************************************************************************************* * \brief to parse Picture Parameter Set (PPS) * * \param pCtx Decoder context * \param pPpsList pps list * \param pBsAux bitstream reader auxiliary * * \return 0 - successed * 1 - failed * * \note Call it in case eNalUnitType is PPS. ******************************

Source from the content-addressed store, hash-verified

1324 *************************************************************************************
1325 */
1326int32_t ParsePps (PWelsDecoderContext pCtx, PPps pPpsList, PBitStringAux pBsAux, uint8_t* pSrcNal,
1327 const int32_t kSrcNalLen) {
1328
1329 PPps pPps = NULL;
1330 SPps sTempPps;
1331 uint32_t uiPpsId = 0;
1332 uint32_t iTmp;
1333 uint32_t uiCode;
1334 int32_t iCode;
1335
1336 WELS_READ_VERIFY (BsGetUe (pBsAux, &uiCode)); //pic_parameter_set_id
1337 uiPpsId = uiCode;
1338 if (uiPpsId >= MAX_PPS_COUNT) {
1339 return GENERATE_ERROR_NO (ERR_LEVEL_PARAM_SETS, ERR_INFO_PPS_ID_OVERFLOW);
1340 }
1341 pPps = &sTempPps;
1342 memset (pPps, 0, sizeof (SPps));
1343
1344 pPps->iPpsId = uiPpsId;
1345 WELS_READ_VERIFY (BsGetUe (pBsAux, &uiCode)); //seq_parameter_set_id
1346 pPps->iSpsId = uiCode;
1347
1348 if (pPps->iSpsId >= MAX_SPS_COUNT) {
1349 return GENERATE_ERROR_NO (ERR_LEVEL_PARAM_SETS, ERR_INFO_SPS_ID_OVERFLOW);
1350 }
1351
1352 WELS_READ_VERIFY (BsGetOneBit (pBsAux, &uiCode)); //entropy_coding_mode_flag
1353 pPps->bEntropyCodingModeFlag = !!uiCode;
1354 WELS_READ_VERIFY (BsGetOneBit (pBsAux, &uiCode)); //bottom_field_pic_order_in_frame_present_flag
1355 pPps->bPicOrderPresentFlag = !!uiCode;
1356
1357 WELS_READ_VERIFY (BsGetUe (pBsAux, &uiCode)); //num_slice_groups_minus1
1358 pPps->uiNumSliceGroups = NUM_SLICE_GROUPS_OFFSET + uiCode;
1359
1360 if (pPps->uiNumSliceGroups > MAX_SLICEGROUP_IDS) {
1361 return GENERATE_ERROR_NO (ERR_LEVEL_PARAM_SETS, ERR_INFO_INVALID_SLICEGROUP);
1362 }
1363
1364 if (pPps->uiNumSliceGroups > 1) {
1365 WELS_READ_VERIFY (BsGetUe (pBsAux, &uiCode)); //slice_group_map_type
1366 pPps->uiSliceGroupMapType = uiCode;
1367 if (pPps->uiSliceGroupMapType > 1) {
1368 WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "ParsePps(): slice_group_map_type (%d): support only 0,1.",
1369 pPps->uiSliceGroupMapType);
1370 return GENERATE_ERROR_NO (ERR_LEVEL_PARAM_SETS, ERR_INFO_UNSUPPORTED_FMOTYPE);
1371 }
1372
1373 switch (pPps->uiSliceGroupMapType) {
1374 case 0:
1375 for (iTmp = 0; iTmp < pPps->uiNumSliceGroups; iTmp++) {
1376 WELS_READ_VERIFY (BsGetUe (pBsAux, &uiCode)); //run_length_minus1[ iGroup ]
1377 pPps->uiRunLength[iTmp] = RUN_LENGTH_OFFSET + uiCode;
1378 }
1379 break;
1380 default:
1381 break;
1382 }
1383 }

Callers 1

ParseNonVclNalFunction · 0.85

Calls 7

BsGetUeFunction · 0.85
BsGetOneBitFunction · 0.85
WelsLogFunction · 0.85
BsGetBitsFunction · 0.85
BsGetSeFunction · 0.85
CheckMoreRBSPDataFunction · 0.85
ParseScalingListFunction · 0.85

Tested by

no test coverage detected