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

📄 sesenc.cpp

📁 jpeg and mpeg 编解码技术源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:

	rgpfReconSeg [BASE_LAYER] = NULL;
	rgpfReconSeg [ENHN_LAYER] = NULL;

	rgpfReconYUV [BASE_LAYER] = fopen (pchYUV, "wb"); // reconstructed YUV file
	assert (rgpfReconYUV [BASE_LAYER] != NULL);
	if (volmd.fAUsage != RECTANGLE)	{
		rgpfReconSeg [BASE_LAYER] = fopen (pchSeg, "wb"); // reconstructed seg file
		assert (rgpfReconSeg [BASE_LAYER] != NULL);
	}
	/*
	if (m_rgbSpatialScalability [iobj - m_iFirstVO] == TRUE)	{
		sprintf (pchCmp, ENHN_SUB_CMPFILE, m_pchOutStrFiles, iobj, m_pchPrefix);
		sprintf (pchTrace, ENHN_SUB_TRCFILE, m_pchOutStrFiles, iobj, m_pchPrefix);
		rgpostrm [ENHN_LAYER] = new ofstream (pchCmp, IOS_BINARY | ios::out);
		rgpostrmTrace [ENHN_LAYER] = NULL;
		if (volmd.bTrace)
			rgpostrmTrace [ENHN_LAYER] = new ofstream (pchTrace);

			sprintf (pchYUV, ENHN_SUB_YUVFILE, m_pchReconYUVDir, iobj, m_pchPrefix);
			sprintf (pchSeg, ENHN_SUB_SEGFILE, m_pchReconYUVDir, iobj, m_pchPrefix);
			rgpfReconYUV [ENHN_LAYER] = fopen (pchYUV, "wb");		// reconstructed YUV file
			if (volmd.fAUsage != RECTANGLE)	{
				rgpfReconSeg [ENHN_LAYER] = fopen (pchSeg, "wb"); // reconstructed seg file
				assert (FALSE);									// no spatial scalability for shape
			}
	}
	*/ //wchen: moved down 
	if (!m_bTexturePerVOP) 
		sprintf (pchYUV, ROOT_YUVFILE, m_pchBmpFiles, m_pchPrefix);
	else 
		sprintf (pchYUV, SUB_YUVFILE, m_pchBmpFiles, iobj, m_pchPrefix);
	pfYuvSrc = fopen (pchYUV, "rb");
	if (pfYuvSrc == NULL)	{
		fprintf (stderr, "can't open %s\n", pchYUV);
		exit (1);
	}

	if (m_rgbSpatialScalability [iobj - m_iFirstVO] == TRUE)	{
		sprintf (pchCmp, ENHN_SUB_CMPFILE, m_pchOutStrFiles, iobj, m_pchPrefix);
		sprintf (pchTrace, ENHN_SUB_TRCFILE, m_pchOutStrFiles, iobj, m_pchPrefix);
		rgpostrm [ENHN_LAYER] = new ofstream (pchCmp, IOS_BINARY | ios::out);
		rgpostrmTrace [ENHN_LAYER] = NULL;
		if (volmd_enhn.bTrace) // modified by Sharp (98/2/12)
			rgpostrmTrace [ENHN_LAYER] = new ofstream (pchTrace);

// begin: added by Sharp (98/10/26)
		if ( volmd_enhn.bTemporalScalability == TRUE ){
			rgpfReconYUV [ENHN_LAYER] = rgpfReconYUV[BASE_LAYER];
			if (volmd_enhn.fAUsage != RECTANGLE)	{
				if ( volmd_enhn.iEnhnType == 0 )
					rgpfReconSeg [ENHN_LAYER] = rgpfReconSeg[BASE_LAYER];
				else{
					sprintf (pchSeg, ENHN_SUB_SEGFILE, m_pchReconYUVDir, iobj, m_pchPrefix);
					rgpfReconSeg [ENHN_LAYER] = fopen (pchSeg, "wb"); // reconstructed seg file
				}
			}
		} else {
// end: added by Sharp (98/10/26)
		sprintf (pchYUV, ENHN_SUB_YUVFILE, m_pchReconYUVDir, iobj, m_pchPrefix);
		sprintf (pchSeg, ENHN_SUB_SEGFILE, m_pchReconYUVDir, iobj, m_pchPrefix);
		rgpfReconYUV [ENHN_LAYER] = fopen (pchYUV, "wb");		// reconstructed YUV file
		if (volmd_enhn.fAUsage != RECTANGLE)	{ // modified by Sharp (98/2/12)
			rgpfReconSeg [ENHN_LAYER] = fopen (pchSeg, "wb"); // reconstructed seg file
// deleted by Sharp (98/10/26)
	// begin: added by Sharp (98/2/10)
	//			if ( volmd.bTemporalScalability == TRUE )
	//				assert (rgpfReconSeg [ENHN_LAYER] != NULL);
	//			else
	// end: added by Sharp (98/2/10)
// end: deleted by Sharp (98/10/26)
			assert (FALSE);									// no spatial scalability for shape
		}
		} // added by Sharp (98/10/26)

		if ( volmd_enhn.bTemporalScalability == FALSE ){ // added by Sharp (98/2/10)
		if (!m_bTexturePerVOP) { 
			fprintf (stderr,"m_bTexturePerVOP != 0 is not applyed for spatial scalable coding\n");
		}
		else 
			sprintf (pchYUV, ENHN_SUB_YUVFILE, m_pchBmpFiles, iobj, m_pchPrefix);
		pfYuvSrcSpatialEnhn = fopen (pchYUV, "rb");
		if (pfYuvSrcSpatialEnhn == NULL){
			fprintf (stderr,"can't open %s\n", pchYUV);
			exit(1);
		}
		} // added by Sharp (98/2/10)
	}

	if (volmd.fAUsage != RECTANGLE ||
		m_rgbSpatialScalability [iobj - m_iFirstVO] == TRUE && volmd_enhn.fAUsage != RECTANGLE) { // load Alpha // modified by Sharp (98/2/12)
		if (!m_bAlphaPerVOP) {
			pxlcObjColor = iobj;
			sprintf (pchSeg, ROOT_SEGFILE, m_pchBmpFiles, m_pchPrefix);
		}
		else	{
			pxlcObjColor = opaqueValue;		  // out data notation
			sprintf (pchSeg, SUB_SEGFILE, m_pchBmpFiles, iobj, m_pchPrefix);
		}
		pfAlpSrc = fopen (pchSeg, "rb");
		if (pfAlpSrc == NULL)	{
			fprintf (stderr, "can't open %s\n", pchSeg);
			exit (1);
		}
	}
// begin: deleted by Sharp (98/10/26)
	// begin: added by Sharp (98/2/10)
	// #ifndef __OUT_ONE_FRAME_
	// 	if (m_rgbSpatialScalability [iobj - m_iFirstVO] == TRUE && volmd_enhn.bTemporalScalability == TRUE && volmd_enhn.iEnhnType != 0) { // modified by Sharp (98/3/24)
	// 		FILE *pfTemp;
	// 		sprintf (pchYUV, "%s/%2.2d/%s_bgc.yuv", m_pchReconYUVDir, iobj, m_pchPrefix);
	// 		pfTemp = fopen (pchYUV, "wb");			 // clear file pointer for background composition
	// 		fclose(pfTemp);
	// 	}
	// #endif
	// end: added by Sharp (98/2/10)
// end: deleted by Sharp (98/10/26)
}

Void CSessionEncoder::initVOEncoder (CVideoObjectEncoder** rgpvoenc, Int iobj, ofstream* rgpostrmTrace [])
{
	Int iVOidx = iobj - m_iFirstVO;
	Bool bTemporalScalability = m_rgvolmd[BASE_LAYER][iVOidx].bTemporalScalability; // added by Sharp (98/2/10)
//	Bool bTemporalScalability = TRUE; // added by Sharp (98/2/10)
	if (m_rgbSpatialScalability [iVOidx] == TRUE)	{
		rgpvoenc [BASE_LAYER] = new CVideoObjectEncoder (
														iobj, 
														m_rgvolmd [BASE_LAYER] [iVOidx], 
														m_rgvopmd [BASE_LAYER] [iVOidx], 
														m_iFirstFrame,
														m_iLastFrame,
														m_rctOrg.width,
														m_rctOrg.height(),
														m_rguiRateControl [BASE_LAYER] [iVOidx],
														m_rguiBudget [BASE_LAYER] [iVOidx],
														rgpostrmTrace [BASE_LAYER],
														m_rguiWarpingAccuracy [iVOidx],
														m_rgNumOfPnts [iVOidx],
														m_pppstDst [iVOidx],
														m_SptMode,
														m_rctFrame,
                                                        m_rctOrg,
														m_rgiMVFileUsage [BASE_LAYER][iVOidx],
														m_pchMVFileName  [BASE_LAYER][iVOidx]);
// begin: added by Sharp (98/2/10)
		if ( bTemporalScalability )
			rgpvoenc [ENHN_LAYER] = new CVideoObjectEncoder (
														iobj, 
														m_rgvolmd [ENHN_LAYER] [iVOidx],
														m_rgvopmd [ENHN_LAYER] [iVOidx], 
														m_iFirstFrame,
														m_iLastFrame,
														m_rctOrg.width,
														m_rctOrg.height(),
														m_rguiRateControl [ENHN_LAYER] [iVOidx],
														m_rguiBudget [ENHN_LAYER] [iVOidx],
														rgpostrmTrace [ENHN_LAYER],
														0,
														-1,
                                                        m_pppstDst [iVOidx],
														m_SptMode,
														m_rctFrame,
														m_rctOrgSpatialEnhn,
														m_rgiMVFileUsage [ENHN_LAYER][iVOidx],
														m_pchMVFileName  [ENHN_LAYER][iVOidx]);
		else
// end: added by Sharp (98/2/10)
			rgpvoenc [ENHN_LAYER] = new CVideoObjectEncoder (
														iobj, 
														m_rgvolmd [ENHN_LAYER] [iVOidx],
														m_rgvopmd [ENHN_LAYER] [iVOidx], 
														m_iFirstFrame,
														m_iLastFrame,
														m_rctOrgSpatialEnhn.width,
														m_rctOrgSpatialEnhn.height (),
														m_rguiRateControl [ENHN_LAYER] [iVOidx],
														m_rguiBudget [ENHN_LAYER] [iVOidx],
														rgpostrmTrace [ENHN_LAYER],
														0,
														-1,
                                                        m_pppstDst [iVOidx],
														m_SptMode,
														m_rctFrame,
														m_rctOrgSpatialEnhn,
														m_rgiMVFileUsage [ENHN_LAYER][iVOidx],
														m_pchMVFileName  [ENHN_LAYER][iVOidx]);
	}
	else	{
		rgpvoenc [BASE_LAYER] = new CVideoObjectEncoder (
														iobj, 
														m_rgvolmd [BASE_LAYER] [iVOidx], 
														m_rgvopmd [BASE_LAYER] [iVOidx], 
														m_iFirstFrame,
														m_iLastFrame,
														m_rctOrg.width,
														m_rctOrg.height (),
														m_rguiRateControl [BASE_LAYER] [iVOidx],
														m_rguiBudget [BASE_LAYER] [iVOidx],
														rgpostrmTrace [BASE_LAYER],
														m_rguiWarpingAccuracy [iVOidx],
														m_rgNumOfPnts [iVOidx],
														m_pppstDst [iVOidx],
														m_SptMode,
														m_rctFrame,
                                                        m_rctOrg,
														m_rgiMVFileUsage [BASE_LAYER][iVOidx],
														m_pchMVFileName  [BASE_LAYER][iVOidx]);
	}
}

Bool CSessionEncoder::loadData (UInt iFrame, FILE* pfYuvSrc, FILE* pfSegSrc, PixelC pxlcObjColor, CVOPU8YUVBA* pvopcDst, CRct& rctOrg, const VOLMode& volmd)
{
	Int iLeadingPixels = iFrame * rctOrg.area ();
	if (volmd.nBits<=8) {
		fseek (pfYuvSrc, iLeadingPixels + iLeadingPixels / 2, SEEK_SET);	//4:2:0
	} else { // NBIT: 2 bytes per pixel, Y component plus UV
		fseek (pfYuvSrc, iLeadingPixels * 3, SEEK_SET);
	}
	if (volmd.fAUsage != RECTANGLE)
		fseek (pfSegSrc, iLeadingPixels, SEEK_SET);	

	Int iYDataHeight = rctOrg.height ();
	Int iUVDataHeight = rctOrg.height () / 2;
	Int iYFrmWidth = pvopcDst->whereY ().width;
	Int iUvFrmWidth = pvopcDst->whereUV ().width;
	Int nSkipYPixel = iYFrmWidth * EXPANDY_REF_FRAME + EXPANDY_REF_FRAME;
	Int nSkipUvPixel = iUvFrmWidth * EXPANDUV_REF_FRAME + EXPANDUV_REF_FRAME;
	PixelC* ppxlcY = (PixelC*) pvopcDst->pixelsY () + nSkipYPixel;
	PixelC* ppxlcU = (PixelC*) pvopcDst->pixelsU () + nSkipUvPixel;
	PixelC* ppxlcV = (PixelC*) pvopcDst->pixelsV () + nSkipUvPixel;

	CoordI y,x;
	for (y = 0; y < iYDataHeight; y++) {
		Int size = (Int) fread (ppxlcY, sizeof (PixelC), rctOrg.width, pfYuvSrc);
		if (size == 0)
			fprintf (stderr, "Unexpected end of file\n");
		ppxlcY += iYFrmWidth;
	}

 /* modified by Rockwell (98/05/08)
	if (volmd.nBits<=8) {*/
	for (y = 0; y < iUVDataHeight; y++) {
		Int size = (Int) fread (ppxlcU, sizeof (PixelC), rctOrg.width / 2, pfYuvSrc);
		if (size == 0)
			fprintf (stderr, "Unexpected end of file\n");
		ppxlcU += iUvFrmWidth;
	}

	for (y = 0; y < iUVDataHeight; y++) {
		Int size = (Int) fread (ppxlcV, sizeof (PixelC), rctOrg.width / 2, pfYuvSrc);
		if (size == 0)
			fprintf (stderr, "Unexpected end of file\n");
		ppxlcV += iUvFrmWidth;
	}
  /* modified by Rockwell (98/05/08)
  } else { // NBIT: fill UV space with default pixel value
	Int iDefval = 1<<(volmd.nBits-1);
	Int iUVDataWidth = rctOrg.width / 2;
	for (y = 0; y < iUVDataHeight; y++) {
		for (x = 0; x < iUVDataWidth; x++) {
			ppxlcU[x] = iDefval;
			ppxlcV[x] = iDefval;
		}
		ppxlcU += iUvFrmWidth;
		ppxlcV += iUvFrmWidth;
	}
    }
  */

	PixelC* ppxlcBY = (PixelC*) pvopcDst->pixelsBY () + nSkipYPixel;
	Int iObjectExist = 0;
	if (volmd.fAUsage == ONE_BIT) { // load Alpha
		//binary
		for (y = 0; y < iYDataHeight; y++) {
			for (x = 0; x < rctOrg.width; x++) {
				PixelC pxlcCurr = getc (pfSegSrc);
				ppxlcBY [x] = (pxlcCurr == pxlcObjColor) ? opaqueValue : transpValue;
				iObjectExist += ppxlcBY [x];
			}
			ppxlcBY += iYFrmWidth;
		}
		((CU8Image*) pvopcDst->getPlane (BUV_PLANE))->decimateBinaryShapeFrom (*(pvopcDst->getPlane (BY_PLANE)));
	}
	else if (volmd.fAUsage == EIGHT_BIT) { // load Alpha
		//gray
		PixelC* ppxlcA = (PixelC*) pvopcDst->pixelsA () + nSkipYPixel;
		for (y = 0; y < iYDataHeight; y++) {
			for (x = 0; x < rctOrg.width; x++) {
				PixelC pxlcCurr = getc (pfSegSrc);
				ppxlcA [x]  = (pxlcCurr >= GRAY_ALPHA_THRESHOLD) ? pxlcCurr : transpValue;
				ppxlcBY [x] = (pxlcCurr >= GRAY_ALPHA_THRESHOLD) ? opaqueValue : transpValue;
				iObjectExist += ppxlcBY [x];
			}
			ppxlcBY += iYFrmWidth;
			ppxlcA  += iYFrmWidth;
		}
		((CU8Image*) pvopcDst->getPlane (BUV_PLANE))->decimateBinaryShapeFrom (*(pvopcDst->getPlane (BY_PLANE)));
	}
	else                                                                                                        //rectangle
		iObjectExist = 1;

/*	static int ini = 0;
	if(ini = 0)
	{
		srand(123421);
		ini = 1;
	}

	int k = rand();
	if((k%4)==0)
		iObjectExist = 0;*/

	re

⌨️ 快捷键说明

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