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

📄 rrv.cpp

📁 完整的RTP RTSP代码库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -