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

Function WelsSliceHeaderWrite

codec/encoder/core/src/svc_encode_slice.cpp:275–346  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

273}
274
275void WelsSliceHeaderWrite (sWelsEncCtx* pCtx, SBitStringAux* pBs, SDqLayer* pCurLayer, SSlice* pSlice,
276 IWelsParametersetStrategy* pParametersetStrategy) {
277 SWelsSPS* pSps = pCurLayer->sLayerInfo.pSpsP;
278 SWelsPPS* pPps = pCurLayer->sLayerInfo.pPpsP;
279 SSliceHeader* pSliceHeader = &pSlice->sSliceHeaderExt.sSliceHeader;
280 SNalUnitHeaderExt* pNalHead = &pCurLayer->sLayerInfo.sNalHeaderExt;
281
282 BsWriteUE (pBs, pSliceHeader->iFirstMbInSlice);
283 BsWriteUE (pBs, pSliceHeader->eSliceType); /* same type things */
284
285 BsWriteUE (pBs, pSliceHeader->pPps->iPpsId + pParametersetStrategy->GetPpsIdOffset (pSliceHeader->pPps->iPpsId));
286
287 BsWriteBits (pBs, pSps->uiLog2MaxFrameNum, pSliceHeader->iFrameNum);
288
289 if (pNalHead->bIdrFlag) { /* NAL IDR */
290 BsWriteUE (pBs, pSliceHeader->uiIdrPicId);
291 }
292
293 if (pSps->uiPocType == 0) {
294 BsWriteBits (pBs, pSps->iLog2MaxPocLsb, pSliceHeader->iPicOrderCntLsb);
295 } else if (pSps->uiPocType == 1) {
296 // TODO: implement.
297 assert (0);
298 } else {
299 // no-op for uiPocType == 2.
300 }
301
302 if (P_SLICE == pSliceHeader->eSliceType) {
303 BsWriteOneBit (pBs, pSliceHeader->bNumRefIdxActiveOverrideFlag);
304 if (pSliceHeader->bNumRefIdxActiveOverrideFlag) {
305 BsWriteUE (pBs, WELS_CLIP3 (pSliceHeader->uiNumRefIdxL0Active - 1, 0, MAX_REF_PIC_COUNT));
306 }
307 }
308
309 if (!pNalHead->bIdrFlag)
310 WriteReferenceReorder (pBs, pSliceHeader);
311
312 if (pNalHead->sNalUnitHeader.uiNalRefIdc) {
313 WriteRefPicMarking (pBs, pSliceHeader, pNalHead);
314 }
315
316 if (pPps->bEntropyCodingModeFlag && pSliceHeader->eSliceType != I_SLICE) {
317 BsWriteUE (pBs, pSlice->iCabacInitIdc);
318 }
319 BsWriteSE (pBs, pSliceHeader->iSliceQpDelta); /* pSlice qp delta */
320
321 if (pPps->bDeblockingFilterControlPresentFlag) {
322 switch (pSliceHeader->uiDisableDeblockingFilterIdc) {
323 case 0:
324 case 3:
325 case 4:
326 case 6:
327 BsWriteUE (pBs, 0);
328 break;
329 case 1:
330 BsWriteUE (pBs, 1);
331 break;
332 case 2:

Callers

nothing calls this directly

Calls 8

BsWriteUEFunction · 0.85
BsWriteBitsFunction · 0.85
BsWriteOneBitFunction · 0.85
WriteReferenceReorderFunction · 0.85
WriteRefPicMarkingFunction · 0.85
BsWriteSEFunction · 0.85
WelsLogFunction · 0.85
GetPpsIdOffsetMethod · 0.80

Tested by

no test coverage detected