📄 rrv.cpp
字号:
delete [] pnormal_data;}// for error(m_ppxliErrorMBY)void UpSamplingTextureForRRV(PixelI *pPixlc, PixelI *pretPxlc, Int iwidth, Int ihight,Int iwidthofpPix){ Int ibx, iby, ix, iy, ipos, icnt; PixelI* pblock_low = new PixelI [64]; PixelI* pblock_norm = new PixelI [256]; PixelI* pnormal_data = new PixelI [iwidth *ihight *4]; Int inor_sizex = iwidth *2; Int inor_sizey = ihight *2; for(iby = 0; iby < (inor_sizey/2); iby+=8) { for(ibx = 0; ibx < (inor_sizex/2); ibx+=8) { for(iy = iby, icnt = 0; iy < iby + 8; iy ++) { ipos = ibx + (iy) * iwidth; for(ix = ibx; ix < ibx + 8; ix++) { pblock_low[icnt] = pPixlc[ipos]; icnt++; ipos++; } } MeanUpSampling(pblock_low, pblock_norm, 8, 8); for(iy = 2 * iby, icnt = 0; iy < 2 * iby + 16; iy ++) { ipos = 2 * ibx + (iy) * inor_sizex; for(ix = 2 * ibx; ix < 2 * ibx + 16; ix++) { pnormal_data[ipos] = pblock_norm[icnt]; icnt++; ipos++; } } } } for(iy = 0; iy < inor_sizey; iy++) { for(ix = 0; ix < inor_sizex; ix++) { pretPxlc[ix +(iy *iwidthofpPix)] = pnormal_data[ix +(iy *inor_sizex)]; } } delete [] pblock_norm; delete [] pblock_low; delete [] pnormal_data;}//static voidVoid MeanUpSampling(PixelI *pSrcPic, PixelI *pDestPic, Int iwidth, Int iheight ){ Int i, j, ix0, iy0, ix1, iy1, ix2, iy2; Int ival; for(j = 0; j < iheight; j++) { for(i = 0; i < iwidth; i++) { ix0 = i; iy0 = j; ix1 = RRV_MAX(0, (i - 1)); iy1 = RRV_MAX(0, (j - 1)); ix2 = RRV_MIN((iwidth - 1), (i + 1)); iy2 = RRV_MIN((iheight - 1), (j + 1));// RRV_3 if(i==0 && j==0) { pDestPic[i * 2 + j * 2 * iwidth * 2] = pSrcPic[ix0 + iy0 * iwidth]; } else {// ~RRV_3 ival = 9 * pSrcPic[ix0 + iy0 * iwidth] + 3 * pSrcPic[ix1 + iy0 * iwidth] + 3 * pSrcPic[ix0 + iy1 * iwidth] + 1 * pSrcPic[ix1 + iy1 * iwidth]; pDestPic[i * 2 + j * 2 * iwidth * 2] = (ival + 8) / 16;// RRV_3 }// ~RRV_3// RRV_3 if(i==(iwidth-1) && j==0) { pDestPic[i * 2 + 1 + j * 2 * iwidth * 2] = pSrcPic[ix0 + iy0 * iwidth]; } else {// ~RRV_3 ival = 9 * pSrcPic[ix0 + iy0 * iwidth] + 3 * pSrcPic[ix2 + iy0 * iwidth] + 3 * pSrcPic[ix0 + iy1 * iwidth] + 1 * pSrcPic[ix2 + iy1 * iwidth]; pDestPic[i * 2 + 1 + j * 2 * iwidth * 2] = (ival + 8) / 16;// RRV_3 }// ~RRV_3// RRV_3 if(i==0 && j==(iheight-1)) { pDestPic[i * 2 + (j * 2 + 1) * iwidth * 2] = pSrcPic[ix0 + iy0 * iwidth]; } else {// ~RRV_3 ival = 9 * pSrcPic[ix0 + iy0 * iwidth] + 3 * pSrcPic[ix1 + iy0 * iwidth] + 3 * pSrcPic[ix0 + iy2 * iwidth] + 1 * pSrcPic[ix1 + iy2 * iwidth]; pDestPic[i * 2 + (j * 2 + 1) * iwidth * 2] = (ival + 8) / 16;// RRV_3 }// ~RRV_3// RRV_3 if(i==(iwidth-1) && j==(iheight-1)) { pDestPic[i * 2 + 1 + (j * 2 + 1)* iwidth * 2] = pSrcPic[ix0 + iy0 * iwidth]; } else {// ~RRV_3 ival = 9 * pSrcPic[ix0 + iy0 * iwidth] + 3 * pSrcPic[ix2 + iy0 * iwidth] + 3 * pSrcPic[ix0 + iy2 * iwidth] + 1 * pSrcPic[ix2 + iy2 * iwidth]; pDestPic[i * 2 + 1 + (j * 2 + 1)* iwidth * 2] = (ival + 8) / 16;// RRV_3 }// ~RRV_3 } }}//static voidvoid MeanUpSampling(PixelC *pSrcPic, PixelC *pDestPic, Int iwidth, Int iheight ){ Int i, j, ix0, iy0, ix1, iy1, ix2, iy2; Int ival; for(j = 0; j < iheight; j++) { for(i = 0; i < iwidth; i++) { ix0 = i; iy0 = j; ix1 = RRV_MAX(0, (i - 1)); iy1 = RRV_MAX(0, (j - 1)); ix2 = RRV_MIN((iwidth - 1), (i + 1)); iy2 = RRV_MIN((iheight - 1), (j + 1));// RRV_3 if(i==0 && j==0) { pDestPic[i * 2 + j * 2 * iwidth * 2] = pSrcPic[ix0 + iy0 * iwidth]; } else {// ~RRV_3 ival = 9 * pSrcPic[ix0 + iy0 * iwidth] + 3 * pSrcPic[ix1 + iy0 * iwidth] + 3 * pSrcPic[ix0 + iy1 * iwidth] + 1 * pSrcPic[ix1 + iy1 * iwidth]; pDestPic[i * 2 + j * 2 * iwidth * 2] = (ival + 8) / 16;// RRV_3 }// ~RRV_3// RRV_3 if(i==(iwidth-1) && j==0) { pDestPic[i * 2 + 1 + j * 2 * iwidth * 2] = pSrcPic[ix0 + iy0 * iwidth]; } else {// ~RRV_3 ival = 9 * pSrcPic[ix0 + iy0 * iwidth] + 3 * pSrcPic[ix2 + iy0 * iwidth] + 3 * pSrcPic[ix0 + iy1 * iwidth] + 1 * pSrcPic[ix2 + iy1 * iwidth]; pDestPic[i * 2 + 1 + j * 2 * iwidth * 2] = (ival + 8) / 16;// RRV_3 }// ~RRV_3// RRV_3 if(i==0 && j==(iheight-1)) { pDestPic[i * 2 + (j * 2 + 1) * iwidth * 2] = pSrcPic[ix0 + iy0 * iwidth]; } else {// ~RRV_3 ival = 9 * pSrcPic[ix0 + iy0 * iwidth] + 3 * pSrcPic[ix1 + iy0 * iwidth] + 3 * pSrcPic[ix0 + iy2 * iwidth] + 1 * pSrcPic[ix1 + iy2 * iwidth]; pDestPic[i * 2 + (j * 2 + 1) * iwidth * 2] = (ival + 8) / 16;// RRV_3 }// ~RRV_3// RRV_3 if(i==(iwidth-1) && j==(iheight-1)) { pDestPic[i * 2 + 1 + (j * 2 + 1)* iwidth * 2] = pSrcPic[ix0 + iy0 * iwidth]; } else {// ~RRV_3 ival = 9 * pSrcPic[ix0 + iy0 * iwidth] + 3 * pSrcPic[ix2 + iy0 * iwidth] + 3 * pSrcPic[ix0 + iy2 * iwidth] + 1 * pSrcPic[ix2 + iy2 * iwidth]; pDestPic[i * 2 + 1 + (j * 2 + 1)* iwidth * 2] = (ival + 8) / 16;// RRV_3 }// ~RRV_3 } }}//////FilterCodedPictureforRRV////Void CVideoObject::filterCodedPictureForRRV(PixelC *pPxlcY, PixelC *pPxlcU, PixelC *pPxlcV, Int isizex, Int isizey, Int inumMBx,Int inumMBy, Int iwidthY, Int iwidthUV){// PixelC pdataY[isizex *isizey];// PixelC pdataU[isizex *isizey /4];// PixelC pdataV[isizex *isizey /4]; PixelC *pdataY = new PixelC[isizex *isizey]; PixelC *pdataU = new PixelC[isizex *isizey /4]; PixelC *pdataV = new PixelC[isizex *isizey /4]; Int ipMB,ipPreMB; Int ixcount,iycount; Int icurMB = 0; Int i, j;// RRV_2 insertion Int iVpEdgeEnable; iVpEdgeEnable = (!m_volmd.bNewpredEnable)||(m_volmd.bNewpredSegmentType);// ~RRV_2// copy data, data -> pPxlc for(j = 0; j < isizey; j++) { for(i = 0; i < isizex; i++) { pdataY[i+ j* isizex] = pPxlcY[i+ j* iwidthY]; } } for(j = 0; j < isizey /2; j++) { for(i = 0; i < isizex /2; i++){ pdataU[i+ j *isizex /2] = pPxlcU[i +j *iwidthUV]; pdataV[i+ j* isizex /2] = pPxlcV[i +j *iwidthUV]; } }// check cod-frag/* printf("Checking cod flag numMBy = %d numMBx = %d\n", inumMBy, inumMBx); for(i = 0; i < inumMBy; i++) { for(j = 0; j < inumMBx; j++) { if(m_rgmbmd[i *inumMBx +j].m_bSkip == TRUE) { printf("T "); } else if(m_rgmbmd[i *inumMBx +j].m_bSkip == FALSE) { printf("F "); } else { printf("E "); } } printf("\n"); }*/// --- Filtering Macro-Block Borderline (Lum part) ---// printf("Filtering Macro-Block Horizontal Borderline (Lum)\n"); for(iycount = 1; iycount < (inumMBy * 2); iycount++) { icurMB = (iycount / 2) * inumMBx; for(ixcount=0; ixcount<(inumMBx * 2); ixcount+=2, icurMB++) { ipMB = icurMB; if(iycount % 2) { ipPreMB = ipMB; } else { ipPreMB = (ipMB - inumMBx); }// RRV_2 modification if(((m_rgmbmd[ipMB].m_bSkip == FALSE)|| (m_rgmbmd[ipPreMB].m_bSkip == FALSE))&& ((m_rgmbmd[ipMB].m_iVideoPacketNumber == m_rgmbmd[ipPreMB].m_iVideoPacketNumber)||(iVpEdgeEnable == 1))) {// if((m_rgmbmd[ipMB].m_bSkip == FALSE)||// (m_rgmbmd[ipPreMB].m_bSkip == FALSE))// {// ~RRV_2 filterMBHorBorder(pdataY, isizex, ixcount, iycount); filterMBHorBorder(pdataY, isizex, (ixcount+1), iycount); } } }// printf("Done\n");// printf("Filtering Macro-Block Vartial Borderline (Lum)\n"); for(iycount=0; iycount<(inumMBy * 2); iycount+=2) { icurMB = (iycount / 2) * inumMBx; for(ixcount = 1; ixcount < (inumMBx * 2); ixcount++) { ipMB = icurMB + (ixcount / 2); if(ixcount % 2) { ipPreMB = ipMB; } else { ipPreMB = ipMB - 1; }// RRV_2 modification if(((m_rgmbmd[ipMB].m_bSkip == FALSE)|| (m_rgmbmd[ipPreMB].m_bSkip == FALSE))&& ((m_rgmbmd[ipMB].m_iVideoPacketNumber == m_rgmbmd[ipPreMB].m_iVideoPacketNumber)||(iVpEdgeEnable == 1))) {// if((m_rgmbmd[ipMB].m_bSkip == FALSE)||// (m_rgmbmd[ipPreMB].m_bSkip == FALSE))// {// ~RRV_2 filterMBVarBorder(pdataY, isizex, ixcount, iycount); filterMBVarBorder(pdataY, isizex, ixcount, (iycount+1)); } } }// printf("Done\n");//--- Filtering Macro-Block Borderline (Cb & Cr part) ---// printf("Filtering Macro-Block Horizontal Borderline (Cb & Cr)\n"); for(iycount = 1; iycount < inumMBy; iycount++) { icurMB = iycount * inumMBx; for(ixcount = 0; ixcount < inumMBx; ixcount++, icurMB++) { ipMB = icurMB; ipPreMB = ipMB - inumMBx;// RRV_2 modification if(((m_rgmbmd[ipMB].m_bSkip == FALSE)|| (m_rgmbmd[ipPreMB].m_bSkip == FALSE))&& ((m_rgmbmd[ipMB].m_iVideoPacketNumber == m_rgmbmd[ipPreMB].m_iVideoPacketNumber)||(iVpEdgeEnable == 1))) {// if((m_rgmbmd[ipMB].m_bSkip == FALSE)||// (m_rgmbmd[ipPreMB].m_bSkip == FALSE))// {// ~RRV_2 filterMBHorBorder(pdataU, isizex/2, ixcount, iycount); filterMBHorBorder(pdataV, isizex/2, ixcount, iycount); } } }// printf("Done\n");// printf("Filtering Macro-Block Vartial Borderline (Cb & Cr)\n"); for(iycount = 0; iycount < inumMBy; iycount++) { icurMB = iycount * inumMBx; for(ixcount = 1; ixcount < inumMBx; ixcount++) { icurMB++; ipMB = icurMB; ipPreMB = ipMB - 1;// RRV_2 modification if(((m_rgmbmd[ipMB].m_bSkip == FALSE)|| (m_rgmbmd[ipPreMB].m_bSkip == FALSE))&& ((m_rgmbmd[ipMB].m_iVideoPacketNumber == m_rgmbmd[ipPreMB].m_iVideoPacketNumber)||(iVpEdgeEnable == 1))) {// if((m_rgmbmd[ipMB].m_bSkip == FALSE)||// (m_rgmbmd[ipPreMB].m_bSkip == FALSE))// {// ~RRV_2 filterMBVarBorder(pdataU, isizex/2, ixcount, iycount); filterMBVarBorder(pdataV, isizex/2, ixcount, iycount); } } }// printf("Done\n");// copy data, pPxlc -> data for(j = 0; j < isizey; j++) { for(i = 0; i < isizex; i++) { pPxlcY[i +j *iwidthY] = pdataY[i +j *isizex]; } } for(j = 0; j < isizey /2; j++) { for(i = 0; i < isizex /2; i++) { pPxlcU[i +j *iwidthUV] = pdataU[i +j* isizex /2]; pPxlcV[i +j *iwidthUV] = pdataV[i +j* isizex /2]; } }}Void filterMBVarBorder(PixelC *pPicTop, Int isizex, Int icurX, Int icurY){ PixelC *pPixel1, *pPixel2; Int ival1, ival2; Int i; icurX *= RRV_BLOCK_SIZE; icurY *= RRV_BLOCK_SIZE;//--- Read Cb Data --- pPixel1 = pPicTop + ((icurX - 1) + icurY * isizex); pPixel2 = pPicTop + ( icurX + icurY * isizex); for(i = 0; i < RRV_BLOCK_SIZE; i++) { ival1 = *pPixel1; ival2 = *pPixel2; *pPixel1 = (3 * ival1 + ival2 + 2) / 4; *pPixel2 = (ival1 + 3 * ival2 + 2) / 4; pPixel1 += isizex; pPixel2 += isizex; }}Void filterMBHorBorder(PixelC *pPicTop, Int isizex, Int icurX, Int icurY){ PixelC *pPixel1, *pPixel2; Int ival1, ival2; Int i; icurX *= RRV_BLOCK_SIZE; icurY *= RRV_BLOCK_SIZE;//--- Read Data --- pPixel1 = pPicTop + (icurX + (icurY - 1) * isizex); pPixel2 = pPicTop + (icurX + icurY * isizex); for(i = 0; i < RRV_BLOCK_SIZE; i++) { ival1 = *pPixel1; ival2 = *pPixel2; *pPixel1 = (3 * ival1 + ival2 + 2) / 4; *pPixel2 = (ival1 + 3 * ival2 + 2) / 4; pPixel1++; pPixel2++; }}Void writeCubicRct(Int xsize, Int line_interval, PixelC* src, PixelC* dst){ PixelC *p0, *p1; p0 = src; p1 = dst; for(int y = 0; y < xsize; y ++) { for(int x = 0; x < xsize; x ++) { (*p1 ++) = (*p0 ++); } p1 += (line_interval -xsize); }}Void writeCubicRct(Int xsize, Int line_interval, PixelI* src, PixelI* dst){ PixelI *p0, *p1; p0 = src; p1 = dst; for(int y = 0; y < xsize; y ++) { for(int x = 0; x < xsize; x ++) { (*p1 ++) = (*p0 ++); } p1 += (line_interval -xsize); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -