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

Function DoAncErrorConSliceCopy

test/decoder/DecUT_ErrorConcealment.cpp:124–193  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

122}
123
124void DoAncErrorConSliceCopy (PECInputCtx pECCtx) {
125 int32_t iMbWidth = (int32_t) pECCtx->iMbWidth;
126 int32_t iMbHeight = (int32_t) pECCtx->iMbHeight;
127 PPicture pDstPic = &pECCtx->sAncPic;
128 PPicture pSrcPic = pECCtx->pCtx->pLastDecPicInfo->pPreviousDecodedPictureInDpb;
129 if ((pECCtx->pCtx->pParam->eEcActiveIdc == ERROR_CON_SLICE_COPY)
130 && (pECCtx->pCtx->pCurDqLayer->sLayerInfo.sNalHeaderExt.bIdrFlag))
131 pSrcPic = NULL;
132
133 //uint8_t *pDstData[3], *pSrcData[3];
134 bool* pMbCorrectlyDecodedFlag = pECCtx->pMbCorrectlyDecodedFlag;
135
136 //Do slice copy late
137 int32_t iMbXyIndex, i;
138 uint8_t* pSrcData, *pDstData;
139 uint32_t iSrcStride = pECCtx->iLinesize[0];
140 uint32_t iDstStride = pECCtx->iLinesize[0];
141 for (int32_t iMbY = 0; iMbY < iMbHeight; ++iMbY) {
142 for (int32_t iMbX = 0; iMbX < iMbWidth; ++iMbX) {
143 iMbXyIndex = iMbY * iMbWidth + iMbX;
144 if (!pMbCorrectlyDecodedFlag[iMbXyIndex]) {
145 if (pSrcPic != NULL) {
146 //Y component
147 pDstData = pDstPic->pData[0] + iMbY * 16 * iDstStride + iMbX * 16;
148 pSrcData = pSrcPic->pData[0] + iMbY * 16 * iSrcStride + iMbX * 16;
149 for (i = 0; i < 16; ++i) {
150 memcpy (pDstData, pSrcData, 16);
151 pDstData += iDstStride;
152 pSrcData += iSrcStride;
153 }
154 //U component
155 pDstData = pDstPic->pData[1] + iMbY * 8 * iDstStride / 2 + iMbX * 8;
156 pSrcData = pSrcPic->pData[1] + iMbY * 8 * iSrcStride / 2 + iMbX * 8;
157 for (i = 0; i < 8; ++i) {
158 memcpy (pDstData, pSrcData, 8);
159 pDstData += iDstStride / 2;
160 pSrcData += iSrcStride / 2;
161 }
162 //V component
163 pDstData = pDstPic->pData[2] + iMbY * 8 * iDstStride / 2 + iMbX * 8;
164 pSrcData = pSrcPic->pData[2] + iMbY * 8 * iSrcStride / 2 + iMbX * 8;
165 for (i = 0; i < 8; ++i) {
166 memcpy (pDstData, pSrcData, 8);
167 pDstData += iDstStride / 2;
168 pSrcData += iSrcStride / 2;
169 }
170 } else { //pSrcPic == NULL
171 //Y component
172 pDstData = pDstPic->pData[0] + iMbY * 16 * iDstStride + iMbX * 16;
173 for (i = 0; i < 16; ++i) {
174 memset (pDstData, 128, 16);
175 pDstData += iDstStride;
176 }
177 //U component
178 pDstData = pDstPic->pData[1] + iMbY * 8 * iDstStride / 2 + iMbX * 8;
179 for (i = 0; i < 8; ++i) {
180 memset (pDstData, 128, 8);
181 pDstData += iDstStride / 2;

Callers 1

TESTFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected