⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp4decvopb.c

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 C
📖 第 1 页 / 共 5 页
字号:
                    mp4_StatisticInc_(&pInfo->VisualObject.Statistic.nMB_FORWARD);                    if (mp4_DecodeMV(pInfo, &mvForw, fcode_forward) != MP4_STATUS_OK) {                        mp4_Error("Error when decode B-VOP motion vector");                        return MP4_STATUS_ERROR;                    }                    if (quarter_sample) {                        mp4_LimitMVQ(&mvForw, &mvForwLim, &limitRectL, dx, dy, 16);                        mp4_ComputeChromaMVQ(&mvForwLim, &mvCbCrF);                        mp4_Copy16x16QP_8u(pYp, stepYp, pYc, stepYc, &mvForwLim, 0);                        mp4_DecodeReconBlockInter_MPEG4(cbpb & 32, pYc, stepYc);                        mp4_DecodeReconBlockInter_MPEG4(cbpb & 16, pYc+8, stepYc);                        mp4_DecodeReconBlockInter_MPEG4(cbpb & 8, pYc+8*stepYc, stepYc);                        mp4_DecodeReconBlockInter_MPEG4(cbpb & 4, pYc+8*stepYc+8, stepYc);                    } else {                        mp4_LimitMV(&mvForw, &mvForwLim, &limitRectL, dx, dy, 16);                        mp4_ComputeChromaMV(&mvForwLim, &mvCbCrF);                        if (cbpb & 60) {                            mp4_DecodeMCBlockInter_MPEG4(cbpb & 32, pYp, stepYp, pYc, stepYc, mvForwLim, 0);                            mp4_DecodeMCBlockInter_MPEG4(cbpb & 16, pYp+8, stepYp, pYc+8, stepYc, mvForwLim, 0);                            mp4_DecodeMCBlockInter_MPEG4(cbpb & 8, pYp+8*stepYp, stepYp, pYc+8*stepYc, stepYc, mvForwLim, 0);                            mp4_DecodeMCBlockInter_MPEG4(cbpb & 4, pYp+8*stepYp+8, stepYp, pYc+8*stepYc+8, stepYc, mvForwLim, 0);                        } else {                            mp4_Copy16x16HP_8u(pYp, stepYp, pYc, stepYc, &mvForwLim, 0);                            mp4_StatisticInc_(&pInfo->VisualObject.Statistic.nB_INTER_NC);                            mp4_StatisticInc_(&pInfo->VisualObject.Statistic.nB_INTER_NC);                            mp4_StatisticInc_(&pInfo->VisualObject.Statistic.nB_INTER_NC);                            mp4_StatisticInc_(&pInfo->VisualObject.Statistic.nB_INTER_NC);                        }                    }                    mp4_DecodeMCBlockInter_MPEG4(cbpb & 2, pCbp, stepCbp, pCbc, stepCbc, mvCbCrF, 0);                    mp4_DecodeMCBlockInter_MPEG4(cbpb & 1, pCrp, stepCrp, pCrc, stepCrc, mvCbCrF, 0);                } else if (mb_type == IPPVC_MBTYPE_BACKWARD) {                    mp4_StatisticInc_(&pInfo->VisualObject.Statistic.nMB_BACKWARD);                    if (mp4_DecodeMV(pInfo, &mvBack, fcode_backward) != MP4_STATUS_OK) {                        mp4_Error("Error when decode B-VOP motion vector");                        return MP4_STATUS_ERROR;                    }                    if (quarter_sample) {                        mp4_LimitMVQ(&mvBack, &mvBackLim, &limitRectL, dx, dy, 16);                        mp4_ComputeChromaMVQ(&mvBackLim, &mvCbCrB);                        mp4_Copy16x16QP_8u(pYn, stepYn, pYc, stepYc, &mvBackLim, 0);                        mp4_DecodeReconBlockInter_MPEG4(cbpb & 32, pYc, stepYc);                        mp4_DecodeReconBlockInter_MPEG4(cbpb & 16, pYc+8, stepYc);                        mp4_DecodeReconBlockInter_MPEG4(cbpb & 8, pYc+8*stepYc, stepYc);                        mp4_DecodeReconBlockInter_MPEG4(cbpb & 4, pYc+8*stepYc+8, stepYc);                    } else {                        mp4_LimitMV(&mvBack, &mvBackLim, &limitRectL, dx, dy, 16);                        mp4_ComputeChromaMV(&mvBackLim, &mvCbCrB);                        if (cbpb & 60) {                            mp4_DecodeMCBlockInter_MPEG4(cbpb & 32, pYn, stepYn, pYc, stepYc, mvBackLim, 0);                            mp4_DecodeMCBlockInter_MPEG4(cbpb & 16, pYn+8, stepYn, pYc+8, stepYc, mvBackLim, 0);                            mp4_DecodeMCBlockInter_MPEG4(cbpb & 8, pYn+8*stepYn, stepYp, pYc+8*stepYc, stepYc, mvBackLim, 0);                            mp4_DecodeMCBlockInter_MPEG4(cbpb & 4, pYn+8*stepYn+8, stepYp, pYc+8*stepYc+8, stepYc, mvBackLim, 0);                        } else {                            mp4_Copy16x16HP_8u(pYn, stepYn, pYc, stepYc, &mvBackLim, 0);                            mp4_StatisticInc_(&pInfo->VisualObject.Statistic.nB_INTER_NC);                            mp4_StatisticInc_(&pInfo->VisualObject.Statistic.nB_INTER_NC);                            mp4_StatisticInc_(&pInfo->VisualObject.Statistic.nB_INTER_NC);                            mp4_StatisticInc_(&pInfo->VisualObject.Statistic.nB_INTER_NC);                        }                    }                    mp4_DecodeMCBlockInter_MPEG4(cbpb & 2, pCbn, stepCbn, pCbc, stepCbc, mvCbCrB, 0);                    mp4_DecodeMCBlockInter_MPEG4(cbpb & 1, pCrn, stepCrn, pCrc, stepCrc, mvCbCrB, 0);                } else if (mb_type == IPPVC_MBTYPE_INTERPOLATE) {                    mp4_StatisticInc_(&pInfo->VisualObject.Statistic.nMB_INTERPOLATE);                    if (mp4_DecodeMV(pInfo, &mvForw, fcode_forward) != MP4_STATUS_OK) {                        mp4_Error("Error when decode B-VOP motion vector");                        return MP4_STATUS_ERROR;                    }                    if (mp4_DecodeMV(pInfo, &mvBack, fcode_backward) != MP4_STATUS_OK) {                        mp4_Error("Error when decode B-VOP motion vector");                        return MP4_STATUS_ERROR;                    }                    if (quarter_sample) {                        mp4_LimitMVQ(&mvForw, &mvForwLim, &limitRectL, dx, dy, 16);                        mp4_ComputeChromaMVQ(&mvForwLim, &mvCbCrF);                        mp4_Copy16x16QP_8u(pYp, stepYp, pYc, stepYc, &mvForwLim, 0);                        mp4_LimitMVQ(&mvBack, &mvBackLim, &limitRectL, dx, dy, 16);                        mp4_ComputeChromaMVQ(&mvBackLim, &mvCbCrB);                        mp4_Copy16x16QP_8u(pYn, stepYn, tmpMB, 16, &mvBackLim, 0);                    } else {                        mp4_LimitMV(&mvForw, &mvForwLim, &limitRectL, dx, dy, 16);                        mp4_ComputeChromaMV(&mvForwLim, &mvCbCrF);                        mp4_Copy16x16HP_8u(pYp, stepYp, pYc, stepYc, &mvForwLim, 0);                        mp4_LimitMV(&mvBack, &mvBackLim, &limitRectL, dx, dy, 16);                        mp4_ComputeChromaMV(&mvBackLim, &mvCbCrB);                        mp4_Copy16x16HP_8u(pYn, stepYn, tmpMB, 16, &mvBackLim, 0);                    }                    ippiAverage16x16_8u_C1IR(tmpMB, 16, pYc, stepYc);                    mp4_DecodeReconBlockInter_MPEG4(cbpb & 32, pYc, stepYc);                    mp4_DecodeReconBlockInter_MPEG4(cbpb & 16, pYc+8, stepYc);                    mp4_DecodeReconBlockInter_MPEG4(cbpb & 8, pYc+8*stepYc, stepYc);                    mp4_DecodeReconBlockInter_MPEG4(cbpb & 4, pYc+8*stepYc+8, stepYc);                    mp4_Copy8x8HP_8u(pCbp, stepCbp, pCbc, stepCbc, &mvCbCrF, 0);                    mp4_Copy8x8HP_8u(pCbn, stepCbn, tmpMB, 8, &mvCbCrB, 0);                    ippiAverage8x8_8u_C1IR(tmpMB, 8, pCbc, stepCbc);                    mp4_DecodeReconBlockInter_MPEG4(cbpb & 2, pCbc, stepCbc);                    mp4_Copy8x8HP_8u(pCrp, stepCrp, pCrc, stepCrc, &mvCbCrF, 0);                    mp4_Copy8x8HP_8u(pCrn, stepCrn, tmpMB, 8, &mvCbCrB, 0);                    ippiAverage8x8_8u_C1IR(tmpMB, 8, pCrc, stepCrc);                    mp4_DecodeReconBlockInter_MPEG4(cbpb & 1, pCrc, stepCrc);                } else { // IPPVC_MBTYPE_DIRECT                    IppMotionVector mvForw[4], mvBack[4], mvForwLim[4], mvBackLim[4];                    mp4_StatisticInc_(&pInfo->VisualObject.Statistic.nMB_DIRECT);                    //f MVs of collocated block of recently decoded I or P frame used in Direct mode                    if (mp4_DecodeMV_Direct(pInfo, pMBinfo->mv, mvForw, mvBack, TRB, TRD, modb, pMBinfo->type) != MP4_STATUS_OK) {                        mp4_Error("Error when decode B-VOP motion vector");                        return MP4_STATUS_ERROR;                    }                    if (quarter_sample) {                        mp4_Limit4MVQ(mvForw, mvForwLim, &limitRectL, dx, dy, 8);                        mp4_ComputeChroma4MVQ(mvForw, &mvCbCrF);                        mp4_Limit4MVQ(mvBack, mvBackLim, &limitRectL, dx, dy, 8);                        mp4_ComputeChroma4MVQ(mvBack, &mvCbCrB);                        mp4_Copy8x8QP_8u(pYp, stepYp, pYc, stepYc, &mvForwLim[0], 0);                        mp4_Copy8x8QP_8u(pYn, stepYn, tmpMB, 16, &mvBackLim[0], 0);                        mp4_Copy8x8QP_8u(pYp+8, stepYp, pYc+8, stepYc, &mvForwLim[1], 0);                        mp4_Copy8x8QP_8u(pYn+8, stepYn, tmpMB+8, 16, &mvBackLim[1], 0);                        mp4_Copy8x8QP_8u(pYp+8*stepYp, stepYp, pYc+8*stepYc, stepYc, &mvForwLim[2], 0);                        mp4_Copy8x8QP_8u(pYn+8*stepYn, stepYn, tmpMB+8*16, 16, &mvBackLim[2], 0);                        mp4_Copy8x8QP_8u(pYp+8*stepYp+8, stepYp, pYc+8*stepYc+8, stepYc, &mvForwLim[3], 0);                        mp4_Copy8x8QP_8u(pYn+8*stepYn+8, stepYn, tmpMB+8*16+8, 16, &mvBackLim[3], 0);                    } else {                        if (pMBinfo->type == IPPVC_MBTYPE_INTER4V) {                            mp4_Limit4MV(mvForw, mvForwLim, &limitRectL, dx, dy, 8);                            mp4_ComputeChroma4MV(mvForw, &mvCbCrF);                            mp4_Limit4MV(mvBack, mvBackLim, &limitRectL, dx, dy, 8);                            mp4_ComputeChroma4MV(mvBack, &mvCbCrB);                            mp4_Copy8x8HP_8u(pYp, stepYp, pYc, stepYc, &mvForwLim[0], 0);                            mp4_Copy8x8HP_8u(pYn, stepYn, tmpMB, 16, &mvBackLim[0], 0);                            mp4_Copy8x8HP_8u(pYp+8, stepYp, pYc+8, stepYc, &mvForwLim[1], 0);                            mp4_Copy8x8HP_8u(pYn+8, stepYn, tmpMB+8, 16, &mvBackLim[1], 0);                            mp4_Copy8x8HP_8u(pYp+8*stepYp, stepYp, pYc+8*stepYc, stepYc, &mvForwLim[2], 0);                            mp4_Copy8x8HP_8u(pYn+8*stepYn, stepYn, tmpMB+8*16, 16, &mvBackLim[2], 0);                            mp4_Copy8x8HP_8u(pYp+8*stepYp+8, stepYp, pYc+8*stepYc+8, stepYc, &mvForwLim[3], 0);                            mp4_Copy8x8HP_8u(pYn+8*stepYn+8, stepYn, tmpMB+8*16+8, 16, &mvBackLim[3], 0);                        } else {                            mp4_LimitMV(mvForw, mvForwLim, &limitRectL, dx, dy, 16);                            mp4_ComputeChromaMV(mvForwLim, &mvCbCrF);                            mp4_LimitMV(mvBack, mvBackLim, &limitRectL, dx, dy, 16);                            mp4_ComputeChromaMV(mvBackLim, &mvCbCrB);                            mp4_Copy16x16HP_8u(pYp, stepYp, pYc, stepYc, &mvForwLim[0], 0);                            mp4_Copy16x16HP_8u(pYn, stepYn, tmpMB, 16, &mvBackLim[0], 0);                        }                    }                    ippiAverage16x16_8u_C1IR(tmpMB, 16, pYc, stepYc);                    mp4_DecodeReconBlockInter_MPEG4(cbpb & 32, pYc, stepYc);                    mp4_DecodeReconBlockInter_MPEG4(cbpb & 16, pYc+8, stepYc);                    mp4_DecodeReconBlockInter_MPEG4(cbpb & 8, pYc+8*stepYc, stepYc);                    mp4_DecodeReconBlockInter_MPEG4(cbpb & 4, pYc+8*stepYc+8, stepYc);                    mp4_LimitMV(&mvCbCrF, &mvCbCrF, &limitRectC, dx >> 1, dy >> 1, 8);                    mp4_LimitMV(&mvCbCrB, &mvCbCrB, &limitRectC, dx >> 1, dy >> 1, 8);                    mp4_Copy8x8HP_8u(pCbp, stepCbp, pCbc, stepCbc, &mvCbCrF, 0);                    mp4_Copy8x8HP_8u(pCbn, stepCbn, tmpMB, 8, &mvCbCrB, 0);                    ippiAverage8x8_8u_C1IR(tmpMB, 8, pCbc, stepCbc);                    mp4_DecodeReconBlockInter_MPEG4(cbpb & 2, pCbc, stepCbc);                    mp4_Copy8x8HP_8u(pCrp, stepCrp, pCrc, stepCrc, &mvCbCrF, 0);                    mp4_Copy8x8HP_8u(pCrn, stepCrn, tmpMB, 8, &mvCbCrB, 0);                    ippiAverage8x8_8u_C1IR(tmpMB, 8, pCrc, stepCrc);                    mp4_DecodeReconBlockInter_MPEG4(cbpb & 1, pCrc, stepCrc);                }            }            mp4_StatisticInc_(&pInfo->VisualObject.Statistic.nMB);            mbCurr ++;            if (mbCurr == nmb)                return MP4_STATUS_OK;            mbInVideoPacket ++;            colNum ++;            pMBinfo ++;            if (colNum == pInfo->VisualObject.VideoObject.MacroBlockPerRow) {                colNum = 0;                rowNum ++;                pYc += 3 * MP4_NUM_EXT_MB * 16 + (stepYc << 4) - stepYc;                pCbc += 3 * MP4_NUM_EXT_MB * 8 + (stepCbc << 3) - stepCbc;                pCrc += 3 * MP4_NUM_EXT_MB * 8 + (stepCrc << 3) - stepCrc;                pYp += 3 * MP4_NUM_EXT_MB * 16 + (stepYp << 4) - stepYp;                pCbp += 3 * MP4_NUM_EXT_MB * 8 + (stepCbp << 3) - stepCbp;                pCrp += 3 * MP4_NUM_EXT_MB * 8 + (stepCrp << 3) - stepCrp;                pYn += 3 * MP4_NUM_EXT_MB * 16 + (stepYn << 4) - stepYn;                pCbn += 3 * MP4_NUM_EXT_MB * 8 + (stepCbn << 3) - stepCbn;                pCrn += 3 * MP4_NUM_EXT_MB * 8 + (stepCrn << 3) - stepCrn;                // reset MV predictors at new row                mvForw.dx = mvForw.dy = mvBack.dx = mvBack.dy = 0;            } else {                pYc += 16; pCrc += 8; pCbc += 8;                pYp += 16; pCrp += 8; pCbp += 8;                pYn += 16; pCrn += 8; pCbn += 8;            }            if (!pInfo->VisualObject.VideoObject.resync_marker_disable) {                int  found;                if (mp4_DecodeVideoPacket(pInfo, &quant, &found) == MP4_STATUS_OK) {                    if (found)                        break;                } else                    return MP4_STATUS_ERROR;            }        }    }}#ifdef _OMP_KARABAS

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -