History

unify parseonly to have 0x0001

huili2 committed 11 years ago

Commit 9c0bbeb1 parent bd50f642 files · +68 −22Browse files

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

Unified · Split

codec/decoder/core/src/au_parser.cpp+65−19
@@ -306,25 +306,49 @@ uint8_t* ParseNalHeader (PWelsDecoderContext pCtx, SNalUnitHeader* pNalUnitHeade · 305 unmodified lines
306306
307307 if (pCtx->bParseOnly) {
308308 pCurNal->sNalData.sVclNal.pNalPos = pSavedData->pCurPos;
309− pCurNal->sNalData.sVclNal.iNalLength = iSrcNalLen - NAL_UNIT_HEADER_EXT_SIZE;
309+ int32_t iTrailingZeroByte = 0;
310+ while (pSrcNal[iSrcNalLen - iTrailingZeroByte - 1] == 0x0) //remove final trailing 0 bytes
311+ iTrailingZeroByte++;
312+ int32_t iActualLen = iSrcNalLen - iTrailingZeroByte;
313+ pCurNal->sNalData.sVclNal.iNalLength = iActualLen - NAL_UNIT_HEADER_EXT_SIZE;
314+ //unify start code as 0x0001
315+ int32_t iCurrStartByte = 4; //4 for 0x0001, 3 for 0x001
316+ if (pSrcNal[0] == 0x0 && pSrcNal[1] == 0x0 && pSrcNal[2] == 0x1) { //if 0x001
317+ iCurrStartByte = 3;
318+ pCurNal->sNalData.sVclNal.iNalLength++;
319+ }
310320 if (pCurNal->sNalHeaderExt.bIdrFlag) {
311− * (pSrcNal + 3) &= 0xE0;
312− * (pSrcNal + 3) |= 0x05;
321+ * (pSrcNal + iCurrStartByte) &= 0xE0;
322+ * (pSrcNal + iCurrStartByte) |= 0x05;
313323 } else {
314− * (pSrcNal + 3) &= 0xE0;
315− * (pSrcNal + 3) |= 0x01;
324+ * (pSrcNal + iCurrStartByte) &= 0xE0;
325+ * (pSrcNal + iCurrStartByte) |= 0x01;
316326 }
317− memcpy (pSavedData->pCurPos, pSrcNal, 4);
318− pSavedData->pCurPos += 4;
319− memcpy (pSavedData->pCurPos, pSrcNal + 7, iSrcNalLen - 7);
320− pSavedData->pCurPos += iSrcNalLen - 7;
327+ pSavedData->pCurPos[0] = pSavedData->pCurPos[1] = pSavedData->pCurPos[2] = 0x0;
328+ pSavedData->pCurPos[3] = 0x1;
329+ pSavedData->pCurPos[4] = * (pSrcNal + iCurrStartByte);
330+ pSavedData->pCurPos += 5;
331+ int32_t iOffset = iCurrStartByte + 1 + NAL_UNIT_HEADER_EXT_SIZE;
332+ memcpy (pSavedData->pCurPos, pSrcNal + iOffset, iActualLen - iOffset);
333+ pSavedData->pCurPos += iActualLen - iOffset;
321334 }
322335 } else {
323336 if (pCtx->bParseOnly) {
324337 pCurNal->sNalData.sVclNal.pNalPos = pSavedData->pCurPos;
325− pCurNal->sNalData.sVclNal.iNalLength = iSrcNalLen;
326− memcpy (pSavedData->pCurPos, pSrcNal, iSrcNalLen);
327− pSavedData->pCurPos += iSrcNalLen;
338+ int32_t iTrailingZeroByte = 0;
339+ while (pSrcNal[iSrcNalLen - iTrailingZeroByte - 1] == 0x0) //remove final trailing 0 bytes
340+ iTrailingZeroByte++;
341+ int32_t iActualLen = iSrcNalLen - iTrailingZeroByte;
342+ pCurNal->sNalData.sVclNal.iNalLength = iActualLen;
343+ //unify start code as 0x0001
344+ int32_t iStartDeltaByte = 0; //0 for 0x0001, 1 for 0x001
345+ if (pSrcNal[0] == 0x0 && pSrcNal[1] == 0x0 && pSrcNal[2] == 0x1) { //if 0x001
346+ pSavedData->pCurPos[0] = 0x0;
347+ iStartDeltaByte = 1;
348+ pCurNal->sNalData.sVclNal.iNalLength++;
349+ }
350+ memcpy (pSavedData->pCurPos + iStartDeltaByte, pSrcNal, iActualLen);
351+ pSavedData->pCurPos += iStartDeltaByte + iActualLen;
328352 }
329353 if (NAL_UNIT_PREFIX == pCtx->sPrefixNal.sNalHeaderExt.sNalUnitHeader.eNalUnitType) {
330354 if (pCtx->sPrefixNal.sNalData.sPrefixNal.bPrefixNalCorrectFlag) {
@@ -449,9 +473,9 @@ bool CheckAccessUnitBoundaryExt (PNalUnitHeaderExt pLastNalHdrExt, PNalUnitHeade · 118 unmodified lines
449473 if (pLastSliceHeader->iDeltaPicOrderCnt[1] != pCurSliceHeader->iDeltaPicOrderCnt[1])
450474 return true;
451475 }
452− if(memcmp(pLastSliceHeader->pPps, pCurSliceHeader->pPps, sizeof(SPps)) != 0
453− || memcmp(pLastSliceHeader->pSps, pCurSliceHeader->pSps, sizeof(SSps)) != 0) {
454− return true;
476+ if (memcmp (pLastSliceHeader->pPps, pCurSliceHeader->pPps, sizeof (SPps)) != 0
477+ || memcmp (pLastSliceHeader->pSps, pCurSliceHeader->pSps, sizeof (SSps)) != 0) {
478+ return true;
455479 }
456480 return false;
457481 }
@@ -1065,8 +1089,19 @@ int32_t ParseSps (PWelsDecoderContext pCtx, PBitStringAux pBsAux, int32_t* pPicW · 607 unmodified lines
10651089 if (!kbUseSubsetFlag) { //SPS
10661090 SSpsBsInfo* pSpsBs = &pCtx->sSpsBsInfo [iSpsId];
10671091 pSpsBs->iSpsId = iSpsId;
1068− memcpy (pSpsBs->pSpsBsBuf, pSrcNal, kSrcNalLen);
1069− pSpsBs->uiSpsBsLen = (uint32_t) kSrcNalLen;
1092+ int32_t iTrailingZeroByte = 0;
1093+ while (pSrcNal[kSrcNalLen - iTrailingZeroByte - 1] == 0x0) //remove final trailing 0 bytes
1094+ iTrailingZeroByte++;
1095+ int32_t iActualLen = kSrcNalLen - iTrailingZeroByte;
1096+ pSpsBs->uiSpsBsLen = (uint16_t) iActualLen;
1097+ //unify start code as 0x0001
1098+ int32_t iStartDeltaByte = 0; //0 for 0x0001, 1 for 0x001
1099+ if (pSrcNal[0] == 0x0 && pSrcNal[1] == 0x0 && pSrcNal[2] == 0x1) { //if 0x001
1100+ pSpsBs->pSpsBsBuf[0] = 0x0; //add 0 to form 0x0001
1101+ iStartDeltaByte++;
1102+ pSpsBs->uiSpsBsLen++;
1103+ }
1104+ memcpy (pSpsBs->pSpsBsBuf + iStartDeltaByte, pSrcNal, iActualLen);
10701105 } else { //subset SPS
10711106 SSpsBsInfo* pSpsBs = &pCtx->sSubsetSpsBsInfo [iSpsId];
10721107 pSpsBs->iSpsId = iSpsId;
@@ -1353,8 +1388,19 @@ int32_t ParsePps (PWelsDecoderContext pCtx, PPps pPpsList, PBitStringAux pBsAux, · 280 unmodified lines
13531388 }
13541389 SPpsBsInfo* pPpsBs = &pCtx->sPpsBsInfo [uiPpsId];
13551390 pPpsBs->iPpsId = (int32_t) uiPpsId;
1356− memcpy (pPpsBs->pPpsBsBuf, pSrcNal, kSrcNalLen);
1357− pPpsBs->uiPpsBsLen = kSrcNalLen;
1391+ int32_t iTrailingZeroByte = 0;
1392+ while (pSrcNal[kSrcNalLen - iTrailingZeroByte - 1] == 0x0) //remove final trailing 0 bytes
1393+ iTrailingZeroByte++;
1394+ int32_t iActualLen = kSrcNalLen - iTrailingZeroByte;
1395+ pPpsBs->uiPpsBsLen = (uint16_t) iActualLen;
1396+ //unify start code as 0x0001
1397+ int32_t iStartDeltaByte = 0; //0 for 0x0001, 1 for 0x001
1398+ if (pSrcNal[0] == 0x0 && pSrcNal[1] == 0x0 && pSrcNal[2] == 0x1) { //if 0x001
1399+ pPpsBs->pPpsBsBuf[0] = 0x0; //add 0 to form 0x0001
1400+ iStartDeltaByte++;
1401+ pPpsBs->uiPpsBsLen++;
1402+ }
1403+ memcpy (pPpsBs->pPpsBsBuf + iStartDeltaByte, pSrcNal, iActualLen);
13581404 }
13591405 return ERR_NONE;
13601406 }

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