History

Pretty printed the C++ code with astyle

Ethan Hugg committed 12 years ago

Commit ff6b6691 parent 063709c225 files · +48457 −51954Browse files

Showing the changes to codec/decoder/core/src/fmo.cpp (1 of 225 files). Show all

Unified · Split

codec/decoder/core/src/fmo.cpp+192−211
@@ -39,7 +39,7 @@ · 38 unmodified lines
3939 */
4040 #include <string.h>
4141
42−#include "fmo.h"
42+#include "fmo.h"
4343 #include "macros.h"
4444 #include "utils.h"
4545 #include "mem_align.h"
@@ -50,41 +50,39 @@ namespace WelsDec { · 4 unmodified lines
5050 * \brief Generate MB allocated map for interleaved slice group (TYPE 0)
5151 *
5252 * \param pFmo fmo context
53− * \param pPps pps context
53+ * \param pPps pps context
5454 *
5555 * \return 0 - successful; none 0 - failed
5656 */
57−static inline int32_t FmoGenerateMbAllocMapType0( PFmo pFmo, PPps pPps )
58−{
59− uint32_t uiNumSliceGroups = 0;
60− int32_t iMbNum = 0;
61− int32_t i = 0;
62−
63− WELS_VERIFY_RETURN_IF( 1, ( NULL == pFmo || NULL == pPps ) )
64− uiNumSliceGroups = pPps->uiNumSliceGroups;
65− iMbNum = pFmo->iCountMbNum;
66− WELS_VERIFY_RETURN_IF( 1, ( NULL == pFmo->pMbAllocMap || iMbNum <= 0 || uiNumSliceGroups >= MAX_SLICEGROUP_IDS ) )
67−
68− do
69− {
70− uint8_t uiGroup = 0;
71− do {
72− const int32_t kiRunIdx = pPps->uiRunLength[uiGroup];
73− int32_t j = 0;
74− do {
75− pFmo->pMbAllocMap[i+j] = uiGroup;
76− ++ j;
77− } while(j < kiRunIdx && i + j < iMbNum);
78− i += kiRunIdx;
79− ++ uiGroup;
80− } while(uiGroup < uiNumSliceGroups && i < iMbNum);
81− }while(i < iMbNum);
82−
83− return 0; // well here
57+static inline int32_t FmoGenerateMbAllocMapType0 (PFmo pFmo, PPps pPps) {
58+ uint32_t uiNumSliceGroups = 0;
59+ int32_t iMbNum = 0;
60+ int32_t i = 0;
61+
62+ WELS_VERIFY_RETURN_IF (1, (NULL == pFmo || NULL == pPps))
63+ uiNumSliceGroups = pPps->uiNumSliceGroups;
64+ iMbNum = pFmo->iCountMbNum;
65+ WELS_VERIFY_RETURN_IF (1, (NULL == pFmo->pMbAllocMap || iMbNum <= 0 || uiNumSliceGroups >= MAX_SLICEGROUP_IDS))
66+
67+ do {
68+ uint8_t uiGroup = 0;
69+ do {
70+ const int32_t kiRunIdx = pPps->uiRunLength[uiGroup];
71+ int32_t j = 0;
72+ do {
73+ pFmo->pMbAllocMap[i + j] = uiGroup;
74+ ++ j;
75+ } while (j < kiRunIdx && i + j < iMbNum);
76+ i += kiRunIdx;
77+ ++ uiGroup;
78+ } while (uiGroup < uiNumSliceGroups && i < iMbNum);
79+ } while (i < iMbNum);
80+
81+ return 0; // well here
8482 }
8583
8684 /*!
87− * \brief Generate MB allocated map for dispersed slice group (TYPE 1)
85+ * \brief Generate MB allocated map for dispersed slice group (TYPE 1)
8886 *
8987 * \param pFmo fmo context
9088 * \param pPps pps context
@@ -92,98 +90,93 @@ static inline int32_t FmoGenerateMbAllocMapType0( PFmo pFmo, PPps pPps ) · 1 unmodified line
9290 *
9391 * \return 0 - successful; none 0 - failed
9492 */
95−static inline int32_t FmoGenerateMbAllocMapType1( PFmo pFmo, PPps pPps, const int32_t kiMbWidth )
96−{
97− uint32_t uiNumSliceGroups = 0;
98− int32_t iMbNum = 0;
99− int16_t i = 0;
100− WELS_VERIFY_RETURN_IF( 1, ( NULL == pFmo || NULL == pPps ) )
101− uiNumSliceGroups = pPps->uiNumSliceGroups;
102− iMbNum = pFmo->iCountMbNum;
103− WELS_VERIFY_RETURN_IF( 1, ( NULL == pFmo->pMbAllocMap || iMbNum <= 0 || kiMbWidth == 0 || uiNumSliceGroups >= MAX_SLICEGROUP_IDS ) )
104−
105− do
106− {
107− pFmo->pMbAllocMap[i] = (uint8_t)(((i % kiMbWidth)+(((i / kiMbWidth)*uiNumSliceGroups)>>1)) % uiNumSliceGroups);
108− ++ i;
109− }while (i < iMbNum);
110−
111− return 0; // well here
93+static inline int32_t FmoGenerateMbAllocMapType1 (PFmo pFmo, PPps pPps, const int32_t kiMbWidth) {
94+ uint32_t uiNumSliceGroups = 0;
95+ int32_t iMbNum = 0;
96+ int16_t i = 0;
97+ WELS_VERIFY_RETURN_IF (1, (NULL == pFmo || NULL == pPps))
98+ uiNumSliceGroups = pPps->uiNumSliceGroups;
99+ iMbNum = pFmo->iCountMbNum;
100+ WELS_VERIFY_RETURN_IF (1, (NULL == pFmo->pMbAllocMap || iMbNum <= 0 || kiMbWidth == 0
101+ || uiNumSliceGroups >= MAX_SLICEGROUP_IDS))
102+
103+ do {
104+ pFmo->pMbAllocMap[i] = (uint8_t) (((i % kiMbWidth) + (((i / kiMbWidth) * uiNumSliceGroups) >> 1)) % uiNumSliceGroups);
105+ ++ i;
106+ } while (i < iMbNum);
107+
108+ return 0; // well here
112109 }
113110
114111 /*!
115112 * \brief Generate MB allocated map for various type of slice group cases (TYPE 0, .., 6)
116113 *
117− * \param pFmo fmo context
114+ * \param pFmo fmo context
118115 * \param pPps pps context
119116 * \param kiMbWidth MB width
120117 * \param kiMbHeight MB height
121118 *
122− * \return 0 - successful; none 0 - failed
119+ * \return 0 - successful; none 0 - failed
123120 */
124−static inline int32_t FmoGenerateSliceGroup( PFmo pFmo, const PPps kpPps, const int32_t kiMbWidth, const int32_t kiMbHeight )
125−{
126− int32_t iNumMb = 0;
127− int32_t iErr = 0;
128− bool_t bResolutionChanged = false;
129−
130− // the cases we would not like
131− WELS_VERIFY_RETURN_IF( 1, ( NULL == pFmo || NULL == kpPps ) )
132−
133− iNumMb = pFmo->iCountMbNum;
134−
135− iNumMb = kiMbWidth * kiMbHeight;
136−
137− if ( 0 == iNumMb )
138− return 1;
139−
140−
141− WelsFree(pFmo->pMbAllocMap, "_fmo->pMbAllocMap");
142− pFmo->pMbAllocMap = (uint8_t *)WelsMalloc( iNumMb * sizeof(uint8_t), "_fmo->pMbAllocMap" );
143− WELS_VERIFY_RETURN_IF( 1, (NULL == pFmo->pMbAllocMap) ) // out of memory
144−
145− pFmo->iCountMbNum = iNumMb;
146−
147− if ( kpPps->uiNumSliceGroups < 2 && iNumMb > 0) // only one slice group, exactly it is single slice based
148− {
149− memset ( pFmo->pMbAllocMap, 0, iNumMb * sizeof(int8_t)); // for safe
150−
151− pFmo->iSliceGroupCount = 1;
152−
153− return 0;
154− }
155−
156− if ( bResolutionChanged || ((int32_t)kpPps->uiSliceGroupMapType != pFmo->iSliceGroupType)
157− || ((int32_t)kpPps->uiNumSliceGroups != pFmo->iSliceGroupCount) )
158− {
159− switch ( kpPps->uiSliceGroupMapType )
160− {
161− case 0:
162− iErr = FmoGenerateMbAllocMapType0( pFmo, kpPps );
163− break;
164− case 1:
165− iErr = FmoGenerateMbAllocMapType1( pFmo, kpPps, kiMbWidth );
166− break;
167− case 2:
168− case 3:
169− case 4:
170− case 5:
171− case 6:
172− // Reserve for others slice group type
173− iErr = 1;
174− break;
175− default:
176− return 1;
177− }
178− }
179−
180− if ( 0 == iErr ) // well now
181− {
182− pFmo->iSliceGroupCount = kpPps->uiNumSliceGroups;
183− pFmo->iSliceGroupType = kpPps->uiSliceGroupMapType;
184− }
185−
186− return iErr;
121+static inline int32_t FmoGenerateSliceGroup (PFmo pFmo, const PPps kpPps, const int32_t kiMbWidth,
122+ const int32_t kiMbHeight) {
123+ int32_t iNumMb = 0;
124+ int32_t iErr = 0;
125+ bool_t bResolutionChanged = false;
126+
127+ // the cases we would not like
128+ WELS_VERIFY_RETURN_IF (1, (NULL == pFmo || NULL == kpPps))
129+
130+ iNumMb = pFmo->iCountMbNum;
131+
132+ iNumMb = kiMbWidth * kiMbHeight;
133+
134+ if (0 == iNumMb)
135+ return 1;
136+
137+
138+ WelsFree (pFmo->pMbAllocMap, "_fmo->pMbAllocMap");
139+ pFmo->pMbAllocMap = (uint8_t*)WelsMalloc (iNumMb * sizeof (uint8_t), "_fmo->pMbAllocMap");
140+ WELS_VERIFY_RETURN_IF (1, (NULL == pFmo->pMbAllocMap)) // out of memory
141+
142+ pFmo->iCountMbNum = iNumMb;
143+
144+ if (kpPps->uiNumSliceGroups < 2 && iNumMb > 0) { // only one slice group, exactly it is single slice based
145+ memset (pFmo->pMbAllocMap, 0, iNumMb * sizeof (int8_t)); // for safe
146+
147+ pFmo->iSliceGroupCount = 1;
148+
149+ return 0;
150+ }
151+
152+ if (bResolutionChanged || ((int32_t)kpPps->uiSliceGroupMapType != pFmo->iSliceGroupType)
153+ || ((int32_t)kpPps->uiNumSliceGroups != pFmo->iSliceGroupCount)) {
154+ switch (kpPps->uiSliceGroupMapType) {
155+ case 0:
156+ iErr = FmoGenerateMbAllocMapType0 (pFmo, kpPps);
157+ break;
158+ case 1:
159+ iErr = FmoGenerateMbAllocMapType1 (pFmo, kpPps, kiMbWidth);
160+ break;
161+ case 2:
162+ case 3:
163+ case 4:
164+ case 5:
165+ case 6:
166+ // Reserve for others slice group type
167+ iErr = 1;
168+ break;
169+ default:
170+ return 1;
171+ }
172+ }
173+
174+ if (0 == iErr) { // well now
175+ pFmo->iSliceGroupCount = kpPps->uiNumSliceGroups;
176+ pFmo->iSliceGroupType = kpPps->uiSliceGroupMapType;
177+ }
178+
179+ return iErr;
187180 }
188181
189182 /*!
@@ -196,9 +189,8 @@ static inline int32_t FmoGenerateSliceGroup( PFmo pFmo, const PPps kpPps, const · 6 unmodified lines
196189 *
197190 * \return 0 - successful; none 0 - failed;
198191 */
199−int32_t InitFmo( PFmo pFmo, PPps pPps, const int32_t kiMbWidth, const int32_t kiMbHeight )
200−{
201− return FmoGenerateSliceGroup( pFmo, pPps, kiMbWidth, kiMbHeight );
192+int32_t InitFmo (PFmo pFmo, PPps pPps, const int32_t kiMbWidth, const int32_t kiMbHeight) {
193+ return FmoGenerateSliceGroup (pFmo, pPps, kiMbWidth, kiMbHeight);
202194 }
203195
204196
@@ -211,35 +203,32 @@ int32_t InitFmo( PFmo pFmo, PPps pPps, const int32_t kiMbWidth, const int32_t ki · 6 unmodified lines
211203 *
212204 * \return NONE
213205 */
214−void_t UninitFmoList( PFmo pFmo, const int32_t kiCnt, const int32_t kiAvail )
215−{
216− PFmo pIter = pFmo;
217− int32_t i = 0;
218− int32_t iFreeNodes = 0;
219−
220− if ( NULL == pIter || kiAvail <= 0 || kiCnt < kiAvail )
221− return;
222−
223− while ( i < kiCnt ) {
224− if ( pIter != NULL && pIter->bActiveFlag )
225− {
226− if ( NULL != pIter->pMbAllocMap )
227− {
228− WelsFree( pIter->pMbAllocMap, "pIter->pMbAllocMap" );
229−
230− pIter->pMbAllocMap = NULL;
231− }
232− pIter->iSliceGroupCount = 0;
233− pIter->iSliceGroupType = -1;
234− pIter->iCountMbNum = 0;
235− pIter->bActiveFlag = false;
236− ++ iFreeNodes;
237− if ( iFreeNodes >= kiAvail )
238− break;
239− }
240− ++ pIter;
241− ++ i;
242− }
206+void_t UninitFmoList (PFmo pFmo, const int32_t kiCnt, const int32_t kiAvail) {
207+ PFmo pIter = pFmo;
208+ int32_t i = 0;
209+ int32_t iFreeNodes = 0;
210+
211+ if (NULL == pIter || kiAvail <= 0 || kiCnt < kiAvail)
212+ return;
213+
214+ while (i < kiCnt) {
215+ if (pIter != NULL && pIter->bActiveFlag) {
216+ if (NULL != pIter->pMbAllocMap) {
217+ WelsFree (pIter->pMbAllocMap, "pIter->pMbAllocMap");
218+
219+ pIter->pMbAllocMap = NULL;
220+ }
221+ pIter->iSliceGroupCount = 0;
222+ pIter->iSliceGroupType = -1;
223+ pIter->iCountMbNum = 0;
224+ pIter->bActiveFlag = false;
225+ ++ iFreeNodes;
226+ if (iFreeNodes >= kiAvail)
227+ break;
228+ }
229+ ++ pIter;
230+ ++ i;
231+ }
243232 }
244233
245234 /*!
@@ -252,14 +241,14 @@ void_t UninitFmoList( PFmo pFmo, const int32_t kiCnt, const int32_t kiAvail ) · 6 unmodified lines
252241 *
253242 * \return true - changed or not initialized yet; false - not change at all
254243 */
255−bool_t FmoParamSetsChanged( PFmo pFmo, const int32_t kiCountNumMb, const int32_t kiSliceGroupType, const int32_t kiSliceGroupCount )
256−{
257− WELS_VERIFY_RETURN_IF( false, (NULL == pFmo) )
258−
259− return ( (!pFmo->bActiveFlag)
260− || (kiCountNumMb != pFmo->iCountMbNum)
261− || (kiSliceGroupType != pFmo->iSliceGroupType)
262− || (kiSliceGroupCount != pFmo->iSliceGroupCount) );
244+bool_t FmoParamSetsChanged (PFmo pFmo, const int32_t kiCountNumMb, const int32_t kiSliceGroupType,
245+ const int32_t kiSliceGroupCount) {
246+ WELS_VERIFY_RETURN_IF (false, (NULL == pFmo))
247+
248+ return ((!pFmo->bActiveFlag)
249+ || (kiCountNumMb != pFmo->iCountMbNum)
250+ || (kiSliceGroupType != pFmo->iSliceGroupType)
251+ || (kiSliceGroupCount != pFmo->iSliceGroupCount));
263252 }
264253
265254 /*!
@@ -272,51 +261,44 @@ bool_t FmoParamSetsChanged( PFmo pFmo, const int32_t kiCountNumMb, const int32_t · 6 unmodified lines
272261 *
273262 * \return true - update/insert successfully; false - failed;
274263 */
275−bool_t FmoParamUpdate( PFmo pFmo, PSps pSps, PPps pPps, int32_t *pActiveFmoNum )
276−{
277− const uint32_t kuiMbWidth = pSps->iMbWidth;
278− const uint32_t kuiMbHeight= pSps->iMbHeight;
279−
280− if ( FmoParamSetsChanged( pFmo,
281− kuiMbWidth * kuiMbHeight,
282− pPps->uiSliceGroupMapType,
283− pPps->uiNumSliceGroups ) )
284− {
285−
286− if ( InitFmo( pFmo, pPps, kuiMbWidth, kuiMbHeight ) )
287− {
288− return false;
289− }
290− else
291− {
292− if ( !pFmo->bActiveFlag && *pActiveFmoNum < MAX_PPS_COUNT )
293− {
294− ++ (*pActiveFmoNum);
295− pFmo->bActiveFlag = true;
296− }
297− }
298− }
299−
300− return true;
264+bool_t FmoParamUpdate (PFmo pFmo, PSps pSps, PPps pPps, int32_t* pActiveFmoNum) {
265+ const uint32_t kuiMbWidth = pSps->iMbWidth;
266+ const uint32_t kuiMbHeight = pSps->iMbHeight;
267+
268+ if (FmoParamSetsChanged (pFmo,
269+ kuiMbWidth * kuiMbHeight,
270+ pPps->uiSliceGroupMapType,
271+ pPps->uiNumSliceGroups)) {
272+
273+ if (InitFmo (pFmo, pPps, kuiMbWidth, kuiMbHeight)) {
274+ return false;
275+ } else {
276+ if (!pFmo->bActiveFlag && *pActiveFmoNum < MAX_PPS_COUNT) {
277+ ++ (*pActiveFmoNum);
278+ pFmo->bActiveFlag = true;
279+ }
280+ }
281+ }
282+
283+ return true;
301284 }
302285
303286 /*!
304287 * \brief Convert kMbXy to slice group idc correspondingly
305288 *
306289 * \param pFmo Wels fmo context
307− * \param kMbXy kMbXy to be converted
290+ * \param kMbXy kMbXy to be converted
308291 *
309292 * \return slice group idc - successful; -1 - failed;
310293 */
311−int32_t FmoMbToSliceGroup( PFmo pFmo, const MB_XY_T kiMbXy )
312−{
313− const int32_t kiMbNum = pFmo->iCountMbNum;
314− const uint8_t* kpMbMap = pFmo->pMbAllocMap;
315−
316− if ( kiMbXy < 0 || kiMbXy >= kiMbNum || kpMbMap == NULL)
317− return -1;
318−
319− return kpMbMap[ kiMbXy ];
294+int32_t FmoMbToSliceGroup (PFmo pFmo, const MB_XY_T kiMbXy) {
295+ const int32_t kiMbNum = pFmo->iCountMbNum;
296+ const uint8_t* kpMbMap = pFmo->pMbAllocMap;
297+
298+ if (kiMbXy < 0 || kiMbXy >= kiMbNum || kpMbMap == NULL)
299+ return -1;
300+
301+ return kpMbMap[ kiMbXy ];
320302 }
321303
322304 /*!
@@ -327,29 +309,28 @@ int32_t FmoMbToSliceGroup( PFmo pFmo, const MB_XY_T kiMbXy ) · 4 unmodified lines
327309 *
328310 * \return iNextMb - successful; -1 - failed;
329311 */
330−MB_XY_T FmoNextMb( PFmo pFmo, const MB_XY_T kiMbXy )
331−{
332− const int32_t kiTotalMb = pFmo->iCountMbNum;
333− const uint8_t* kpMbMap = pFmo->pMbAllocMap;
334− MB_XY_T iNextMb = kiMbXy;
335− const uint8_t kuiSliceGroupIdc = (uint8_t)FmoMbToSliceGroup( pFmo, kiMbXy );
336−
337− if (kuiSliceGroupIdc == (uint8_t)(-1))
338− return -1;
339−
340− do {
341− ++ iNextMb;
342− if (iNextMb >= kiTotalMb){
343− iNextMb = -1;
344− break;
345− }
346− if (kpMbMap[iNextMb] == kuiSliceGroupIdc){
347− break;
348− }
349− } while( 1 );
350−
351− // -1: No further MB in this slice (could be end of picture)
352− return iNextMb;
312+MB_XY_T FmoNextMb (PFmo pFmo, const MB_XY_T kiMbXy) {
313+ const int32_t kiTotalMb = pFmo->iCountMbNum;
314+ const uint8_t* kpMbMap = pFmo->pMbAllocMap;
315+ MB_XY_T iNextMb = kiMbXy;
316+ const uint8_t kuiSliceGroupIdc = (uint8_t)FmoMbToSliceGroup (pFmo, kiMbXy);
317+
318+ if (kuiSliceGroupIdc == (uint8_t) (-1))
319+ return -1;
320+
321+ do {
322+ ++ iNextMb;
323+ if (iNextMb >= kiTotalMb) {
324+ iNextMb = -1;
325+ break;
326+ }
327+ if (kpMbMap[iNextMb] == kuiSliceGroupIdc) {
328+ break;
329+ }
330+ } while (1);
331+
332+ // -1: No further MB in this slice (could be end of picture)
333+ return iNextMb;
353334 }
354335
355336 } // namespace WelsDec

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t