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

Function FmoGenerateSliceGroup

codec/decoder/core/src/fmo.cpp:120–176  ·  view source on GitHub ↗

! * \brief Generate MB allocated map for various type of slice group cases (TYPE 0, .., 6) * * \param pFmo fmo context * \param pPps pps context * \param kiMbWidth MB width * \param kiMbHeight MB height * * \return 0 - successful; none 0 - failed */

Source from the content-addressed store, hash-verified

118 * \return 0 - successful; none 0 - failed
119 */
120static inline int32_t FmoGenerateSliceGroup (PFmo pFmo, const PPps kpPps, const int32_t kiMbWidth,
121 const int32_t kiMbHeight, CMemoryAlign* pMa) {
122 int32_t iNumMb = 0;
123 int32_t iErr = 0;
124 bool bResolutionChanged = false;
125
126 // the cases we would not like
127 WELS_VERIFY_RETURN_IF (ERR_INFO_INVALID_PARAM, (NULL == pFmo || NULL == kpPps))
128
129 iNumMb = kiMbWidth * kiMbHeight;
130
131 if (0 == iNumMb)
132 return ERR_INFO_INVALID_PARAM;
133
134 pMa->WelsFree (pFmo->pMbAllocMap, "_fmo->pMbAllocMap");
135 pFmo->pMbAllocMap = (uint8_t*)pMa->WelsMallocz (iNumMb * sizeof (uint8_t), "_fmo->pMbAllocMap");
136 WELS_VERIFY_RETURN_IF (ERR_INFO_OUT_OF_MEMORY, (NULL == pFmo->pMbAllocMap)) // out of memory
137
138 pFmo->iCountMbNum = iNumMb;
139
140 if (kpPps->uiNumSliceGroups < 2 && iNumMb > 0) { // only one slice group, exactly it is single slice based
141 memset (pFmo->pMbAllocMap, 0, iNumMb * sizeof (int8_t)); // for safe
142
143 pFmo->iSliceGroupCount = 1;
144
145 return ERR_NONE;
146 }
147
148 if (bResolutionChanged || ((int32_t)kpPps->uiSliceGroupMapType != pFmo->iSliceGroupType)
149 || ((int32_t)kpPps->uiNumSliceGroups != pFmo->iSliceGroupCount)) {
150 switch (kpPps->uiSliceGroupMapType) {
151 case 0:
152 iErr = FmoGenerateMbAllocMapType0 (pFmo, kpPps);
153 break;
154 case 1:
155 iErr = FmoGenerateMbAllocMapType1 (pFmo, kpPps, kiMbWidth);
156 break;
157 case 2:
158 case 3:
159 case 4:
160 case 5:
161 case 6:
162 // Reserve for others slice group type
163 iErr = 1;
164 break;
165 default:
166 return ERR_INFO_UNSUPPORTED_FMOTYPE;
167 }
168 }
169
170 if (0 == iErr) { // well now
171 pFmo->iSliceGroupCount = kpPps->uiNumSliceGroups;
172 pFmo->iSliceGroupType = kpPps->uiSliceGroupMapType;
173 }
174
175 return iErr;
176}
177

Callers 1

InitFmoFunction · 0.85

Calls 4

WelsFreeMethod · 0.80
WelsMalloczMethod · 0.80

Tested by

no test coverage detected