History

fix PCM parseonly crash issue

huili2 committed 9 years ago

Commit 71566cd1 parent b26bcda2 files · +52 −42Browse files

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

Unified · Split

codec/decoder/core/src/decode_slice.cpp+36−28
@@ -614,6 +614,7 @@ int32_t WelsDecodeMbCabacISliceBaseMode0 (PWelsDecoderContext pCtx, uint32_t& ui · 613 unmodified lines
614 && uiMbType <= 24))) {614 && uiMbType <= 24))) {
615 return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_MB_TYPE);615 return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_MB_TYPE);
616 } else if (25 == uiMbType) { //I_PCM616 } else if (25 == uiMbType) { //I_PCM
617 WelsLog (& (pCtx->sLogCtx), WELS_LOG_DEBUG, "I_PCM mode exists in I slice!");
617 WELS_READ_VERIFY (ParseIPCMInfoCabac (pCtx));618 WELS_READ_VERIFY (ParseIPCMInfoCabac (pCtx));
618 pSlice->iLastDeltaQp = 0;619 pSlice->iLastDeltaQp = 0;
619 WELS_READ_VERIFY (ParseEndOfSliceCabac (pCtx, uiEosFlag));620 WELS_READ_VERIFY (ParseEndOfSliceCabac (pCtx, uiEosFlag));
@@ -833,6 +834,7 @@ int32_t WelsDecodeMbCabacPSliceBaseMode0 (PWelsDecoderContext pCtx, PWelsNeighAv · 213 unmodified lines
833 return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_MB_TYPE);834 return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_MB_TYPE);
834 835
835 if (25 == uiMbType) { //I_PCM836 if (25 == uiMbType) { //I_PCM
837 WelsLog (& (pCtx->sLogCtx), WELS_LOG_DEBUG, "I_PCM mode exists in P slice!");
836 WELS_READ_VERIFY (ParseIPCMInfoCabac (pCtx));838 WELS_READ_VERIFY (ParseIPCMInfoCabac (pCtx));
837 pSlice->iLastDeltaQp = 0;839 pSlice->iLastDeltaQp = 0;
838 WELS_READ_VERIFY (ParseEndOfSliceCabac (pCtx, uiEosFlag));840 WELS_READ_VERIFY (ParseEndOfSliceCabac (pCtx, uiEosFlag));
@@ -1265,6 +1267,7 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 426 unmodified lines
1265 return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_MB_TYPE);1267 return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_MB_TYPE);
1266 1268
1267 if (25 == uiMbType) {1269 if (25 == uiMbType) {
1270 WelsLog (& (pCtx->sLogCtx), WELS_LOG_DEBUG, "I_PCM mode exists in I slice!");
1268 int32_t iDecStrideL = pCurLayer->pDec->iLinesize[0];1271 int32_t iDecStrideL = pCurLayer->pDec->iLinesize[0];
1269 int32_t iDecStrideC = pCurLayer->pDec->iLinesize[1];1272 int32_t iDecStrideC = pCurLayer->pDec->iLinesize[1];
1270 1273
@@ -1291,20 +1294,22 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 20 unmodified lines
1291 1294
1292 //step 2: copy pixel from bit-stream into fdec [reconstruction]1295 //step 2: copy pixel from bit-stream into fdec [reconstruction]
1293 pTmpBsBuf = pBs->pCurBuf;1296 pTmpBsBuf = pBs->pCurBuf;
1294 for (i = 0; i < 16; i++) { //luma1297 if (!pCtx->pParam->bParseOnly) {
1295 memcpy (pDecY , pTmpBsBuf, iCopySizeY);1298 for (i = 0; i < 16; i++) { //luma
1296 pDecY += iDecStrideL;1299 memcpy (pDecY , pTmpBsBuf, iCopySizeY);
1297 pTmpBsBuf += 16;1300 pDecY += iDecStrideL;
1298 }1301 pTmpBsBuf += 16;
1299 for (i = 0; i < 8; i++) { //cb1302 }
1300 memcpy (pDecU, pTmpBsBuf, iCopySizeUV);1303 for (i = 0; i < 8; i++) { //cb
1301 pDecU += iDecStrideC;1304 memcpy (pDecU, pTmpBsBuf, iCopySizeUV);
1302 pTmpBsBuf += 8;1305 pDecU += iDecStrideC;
1303 }1306 pTmpBsBuf += 8;
1304 for (i = 0; i < 8; i++) { //cr1307 }
1305 memcpy (pDecV, pTmpBsBuf, iCopySizeUV);1308 for (i = 0; i < 8; i++) { //cr
1306 pDecV += iDecStrideC;1309 memcpy (pDecV, pTmpBsBuf, iCopySizeUV);
1307 pTmpBsBuf += 8;1310 pDecV += iDecStrideC;
1311 pTmpBsBuf += 8;
1312 }
1308 }1313 }
1309 1314
1310 pBs->pCurBuf += 384;1315 pBs->pCurBuf += 384;
@@ -1603,6 +1608,7 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 292 unmodified lines
1603 return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_MB_TYPE);1608 return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_MB_TYPE);
1604 1609
1605 if (25 == uiMbType) {1610 if (25 == uiMbType) {
1611 WelsLog (& (pCtx->sLogCtx), WELS_LOG_DEBUG, "I_PCM mode exists in P slice!");
1606 int32_t iDecStrideL = pCurLayer->pDec->iLinesize[0];1612 int32_t iDecStrideL = pCurLayer->pDec->iLinesize[0];
1607 int32_t iDecStrideC = pCurLayer->pDec->iLinesize[1];1613 int32_t iDecStrideC = pCurLayer->pDec->iLinesize[1];
1608 1614
@@ -1628,21 +1634,23 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 19 unmodified lines
1628 1634
1629 //step 2: copy pixel from bit-stream into fdec [reconstruction]1635 //step 2: copy pixel from bit-stream into fdec [reconstruction]
1630 pTmpBsBuf = pBs->pCurBuf;1636 pTmpBsBuf = pBs->pCurBuf;
1631 for (i = 0; i < 16; i++) { //luma1637 if (!pCtx->pParam->bParseOnly) {
1632 memcpy (pDecY , pTmpBsBuf, iCopySizeY);1638 for (i = 0; i < 16; i++) { //luma
1633 pDecY += iDecStrideL;1639 memcpy (pDecY, pTmpBsBuf, iCopySizeY);
1634 pTmpBsBuf += 16;1640 pDecY += iDecStrideL;
1635 }1641 pTmpBsBuf += 16;
1642 }
1636 1643
1637 for (i = 0; i < 8; i++) { //cb1644 for (i = 0; i < 8; i++) { //cb
1638 memcpy (pDecU, pTmpBsBuf, iCopySizeUV);1645 memcpy (pDecU, pTmpBsBuf, iCopySizeUV);
1639 pDecU += iDecStrideC;1646 pDecU += iDecStrideC;
1640 pTmpBsBuf += 8;1647 pTmpBsBuf += 8;
1641 }1648 }
1642 for (i = 0; i < 8; i++) { //cr1649 for (i = 0; i < 8; i++) { //cr
1643 memcpy (pDecV, pTmpBsBuf, iCopySizeUV);1650 memcpy (pDecV, pTmpBsBuf, iCopySizeUV);
1644 pDecV += iDecStrideC;1651 pDecV += iDecStrideC;
1645 pTmpBsBuf += 8;1652 pTmpBsBuf += 8;
1653 }
1646 }1654 }
1647 1655
1648 pBs->pCurBuf += 384;1656 pBs->pCurBuf += 384;

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