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

📄 vtcenc.cpp

📁 完整的RTP RTSP代码库
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	}	//	printf("%d %d\n", mzte_codec.m_iHeight, mzte_codec.m_iWidth );	mzte_codec.m_iDCWidth = GetDCWidth(); //added by SL 030499 (This is the real DC-width and height)	mzte_codec.m_iDCHeight = GetDCHeight();		// begin: deleted by Sharp (99/2/16)#if 0	mzte_codec.m_iAcmOrder = 0;	mzte_codec.m_iAcmMaxFreqChg = 0;	init_acm_maxf_enc();#endif	// end: deleted by Sharp (99/2/16)	//	fprintf(stdout,"init ac model!\n");				int height;	int width;	int x,y;	for (col=0; col<mzte_codec.m_iColors; col++) {		height = mzte_codec.m_Image[col].height; 		width  = mzte_codec.m_Image[col].width;//			printf("SPlayer %d %d\n", width, height);				mzte_codec.m_SPlayer[col].coeffinfo = new COEFFINFO * [height];		if (mzte_codec.m_SPlayer[col].coeffinfo == NULL)			exit(fprintf(stderr,"Allocating memory for coefficient structure (I)."));		mzte_codec.m_SPlayer[col].coeffinfo[0] = new COEFFINFO [height*width];		if (mzte_codec.m_SPlayer[col].coeffinfo[0] == NULL)			exit(fprintf(stderr,"Allocating memory for coefficient structure (II)."));		for (y = 1; y < height; ++y)			mzte_codec.m_SPlayer[col].coeffinfo[y] = 			mzte_codec.m_SPlayer[col].coeffinfo[y-1]+width;				// for (int y=0; y<height; y++) // modified by Sharp (99/2/16) // FPDAM		for (y=0; y<height; y++) // FPDAM 			for (x=0; x<width; x++) {				mzte_codec.m_SPlayer[col].coeffinfo[y][x].skip =0;			}	}	//	fprintf(stdout,"Coeffinfo memory allocation done!\n");  /*------- DC: Open and initialize bitstream file -------*/  if ((bitfile=fopen(mzte_codec.m_cBitFile,"wb"))==NULL)    errorHandler("Can't open file '%s' for writing.", mzte_codec.m_cBitFile);  init_bit_packing_fp(bitfile,1);	tile_table_pos = header_Enc(synfilter);//	@@@@@@@@@@// deleted for FDAM1 by Samsung AIT on 2000/02/03//  if(!mzte_codec.m_usErrResiDisable)//	  emit_bits((UShort)mzte_codec.m_usSegmentThresh,16);// ~deleted for FDAM1 by Samsung AIT 2000/02/03	// begin: added by Sharp (99/2/16)	for (Int iTile = 0; iTile<mzte_codec.m_iNumOfTile; iTile++ ){		if ( mzte_codec.m_tiling_disable == 0 ){// FPDAM begin: modified by Sharp			cut_tile_image(mzte_codec.m_Image, mzte_codec.m_ImageOrg, iTile, mzte_codec.m_iColors, tile_width, tile_height, anafilter[0]);// FPDAM end: modified by Sharp// FPDAM begin: added by Sharp		if ( mzte_codec.m_iAlphaChannel )			mzte_codec.m_iTextureTileType				= CheckTextureTileType(mzte_codec.m_Image[0].mask,						mzte_codec.m_iWidth,						mzte_codec.m_iHeight,						mzte_codec.m_iRealWidth,						mzte_codec.m_iRealHeight);// FPDAM end: added by Sharp			if ( iTile != 0 ){				if ((bitfile=fopen(mzte_codec.m_cBitFile,"ab"))==NULL)					errorHandler("Can't open file '%s' for writing.",mzte_codec.m_cBitFile);				fseek(bitfile,0,SEEK_END);				init_bit_packing_fp(bitfile,1);			}// FPDAM begin: modified by Sharp//			tile_header_Enc(iTile);			tile_header_Enc(synfilter,iTile);// FPDAM end: modified by Sharp		}		if( !mzte_codec.m_usErrResiDisable )			texture_packet_header_Enc(synfilter);		if ( mzte_codec.m_tiling_disable == 0 )			printf("Encoding %d-th tile\n", iTile);		mzte_codec.m_iAcmOrder = 0;		mzte_codec.m_iAcmMaxFreqChg = 0;		init_acm_maxf_enc();	// end: added by Sharp (99/2/16)		/* DISCRETE WAVELET TRANSFORM */		noteProgress("Wavelet Transform....");  // begin: modified by Sharp (99/5/10)	// begin: added by Sharp (99/2/16)//		if(mzte_codec.m_tiling_disable==0){//			perform_DWT_Tile(anafilter, mzte_codec.m_ImageOrg, iTile); //*********//		} else {// FPDAM begin: added by Sharp		if ( mzte_codec.m_tiling_disable!=0 || !mzte_codec.m_iAlphaChannel || mzte_codec.m_iTextureTileType!=TRANSP_TILE)// FPDAM end: added by Sharp			perform_DWT(anafilter);//		}	// end: added by Sharp (99/2/16)// end: modified by Sharp (99/5/10)	// 	choose_wavelet_filter(&anafilter, &synfilter, mzte_codec.m_iWvtType); // hjlee 0901	//	perform_DWT(anafilter); deleted by Sharp (99/2/16)		noteProgress("Completed wavelet transform.");// begin: added by Sharp (99/4/7)	if ( mzte_codec.m_tiling_disable == 0 ){		stat(mzte_codec.m_cBitFile, &file_info);		init_size = file_info.st_size;	}	TextureObjectLayer_enc(bitfile);	if (mzte_codec.m_tiling_disable==0 && mzte_codec.m_tiling_jump_table_enable == 1) {		if (iTile==0){/*    printf("Header = %d\n", tile_table_pos);*/			stat(mzte_codec.m_cBitFile, &file_info);/*          printf("%d\n", file_info.st_size);*/			table[0] = file_info.st_size - tile_table_pos								- (34 * mzte_codec.m_iNumOfTile + used_bits + 8)/8;		} else {			stat(mzte_codec.m_cBitFile, &file_info);/*          printf("%d\n", file_info.st_size);*/			table[iTile] = file_info.st_size - init_size;		}/*    printf("Encoded Table[%d] = %d\n", iTile, table[iTile]);*/	}// end: added by Sharp (99/4/7)	// begin: deleted by Sharp (99/4/7)#if 0	// begin: added by Sharp (99/2/16)		if (mzte_codec.m_tiling_disable==0){			struct stat file_info;			if (iTile==0){				TextureObjectLayer_enc(synfilter, iTile, &tile_table_pos);	/*    printf("Header = %d\n", tile_table_pos);*/				stat(mzte_codec.m_cBitFile, &file_info);	/*          printf("%d\n", file_info.st_size);*/				table[0] = file_info.st_size - tile_table_pos									- (34 * mzte_codec.m_iNumOfTile + used_bits + 8)/8;			} else {				int init_size;				stat(mzte_codec.m_cBitFile, &file_info);				init_size = file_info.st_size;				TextureObjectLayer_enc(synfilter, iTile, &garbage);				stat(mzte_codec.m_cBitFile, &file_info);	/*          printf("%d\n", file_info.st_size);*/				table[iTile] = file_info.st_size - init_size;			}	/*    printf("Encoded Table[%d] = %d\n", iTile, table[iTile]);*/		}		else {			TextureObjectLayer_enc(synfilter, iTile, &garbage);		}	// end: added by Sharp (99/2/16)#endif// end: deleted by Sharp (99/4/7)	//	TextureObjectLayer_enc(synfilter);  deleted by Sharp (99/2/16)	// begin: added by Sharp (99/2/16)		}		if (mzte_codec.m_tiling_disable==0 && mzte_codec.m_tiling_jump_table_enable == 1){			bitfile = fopen(mzte_codec.m_cBitFile,"r+b");			garbage = ftell(bitfile);			if (fseek(bitfile, tile_table_pos, SEEK_SET)!=0){				fprintf(stderr, "rewind failed\n");				exit(111);			}			garbage = ftell(bitfile);						{				unsigned char byte_buf;				Int bits;				fread(&byte_buf, sizeof(char), 1, bitfile);				fflush(bitfile);				fseek(bitfile, -1L, SEEK_CUR);				byte_buf = (byte_buf >> (8 - used_bits));				bits = emit_bits_local ( byte_buf, used_bits, bitfile );				for (Int iTile=0; iTile<mzte_codec.m_iNumOfTile; iTile++) {					bits = emit_bits_local ( (table[iTile]>>16), 16, bitfile );					bits = emit_bits_local ( 1, 1, bitfile );					bits = emit_bits_local ( (table[iTile]&0xffff), 16, bitfile );					bits = emit_bits_local ( 1, 1, bitfile );				}				fflush(bitfile);				fread(&byte_buf, sizeof(char), 1, bitfile);				fflush(bitfile);				fseek(bitfile, -1L, SEEK_CUR);				emit_bits_local ( byte_buf, bits, bitfile );			}			fclose(bitfile);			free(table); // added by Sharp (99/5/10)		}	// end: added by Sharp (99/2/16)		/*----- free up coeff data structure -----*/		noteDetail("Freeing up encoding data structures....");		for (col=0; col<mzte_codec.m_iColors; col++) {	// begin: added by Sharp (99/2/16)		  /* delete */ free (mzte_codec.m_Image[col].data);/*			delete (mzte_codec.m_Image[col].mask);*/			if ( mzte_codec.m_tiling_disable == 0 ){ //modified by SL 030399			  free /*delete*/ (mzte_codec.m_ImageOrg[col].data);/*				delete (mzte_codec.m_ImageOrg[col].mask);*/			}	// end: added by Sharp (99/2/16)						if (mzte_codec.m_SPlayer[col].coeffinfo[0] != NULL)				delete (mzte_codec.m_SPlayer[col].coeffinfo[0]);			mzte_codec.m_SPlayer[col].coeffinfo[0] = NULL;			if (mzte_codec.m_SPlayer[col].coeffinfo)				delete (mzte_codec.m_SPlayer[col].coeffinfo);			mzte_codec.m_SPlayer[col].coeffinfo = NULL;		}// begin: added by Sharp (99/2/16)		delete (mzte_codec.m_Image);		delete (mzte_codec.m_ImageOrg);// end: added by Sharp (99/2/16)// begin: added by Sharp (99/3/29)		delete anafilter;		delete synfilter;// end: added by Sharp (99/3/29)		noteDetail("Completed freeing up encoding data structures.");		noteProgress("\n----- Encoding Completed. -----\n");	}	else { /* this part should be copyed from VERSION 1 FCD software later */	// allocate memory for source image	mzte_codec.m_Image = new PICTURE[3];	// hjlee 0901	  anafilter = (FILTER **) malloc(sizeof(FILTER *)*mzte_codec.m_iWvtDecmpLev);	  synfilter = (FILTER **) malloc(sizeof(FILTER *)*mzte_codec.m_iWvtDecmpLev);	  if(anafilter == NULL || synfilter == NULL) 		errorHandler("Error allocating memory for filters\n");	  for(i=0;i<mzte_codec.m_iWvtDecmpLev; i++) {		choose_wavelet_filter(&(anafilter[i]),				  &(synfilter[mzte_codec.m_iWvtDecmpLev-1-i]),				  mzte_codec.m_WvtFilters[mzte_codec.m_iWvtUniform?0:i]);	  }	  	  // read source image	read_image(	m_cImagePath,				mzte_codec.m_iWidth,				mzte_codec.m_iHeight,				mzte_codec.m_iColors,				8,				mzte_codec.m_Image				);	if (mzte_codec.m_iAlphaChannel != 0) {  // arbitrary shape coding		// allocate meory for segmentation		mzte_codec.m_SegImage = new PICTURE[3];		// read the segmentation map of the source image */		mzte_codec.m_iAlphaChannel = read_segimage(m_cSegImagePath, 										  mzte_codec.m_Image[0].width, 										  mzte_codec.m_Image[0].height, 										  mzte_codec.m_iColors, 										  mzte_codec.m_Image); 	}	get_virtual_image_V1(mzte_codec.m_Image,					mzte_codec.m_iWvtDecmpLev,					mzte_codec.m_iAlphaChannel,					mzte_codec.m_iColors,					mzte_codec.m_iAlphaTh,					mzte_codec.m_iChangeCRDisable,					anafilter[0]);	for (col=0; col<mzte_codec.m_iColors; col++) {		mzte_codec.m_Image[col].height = mzte_codec.m_iHeight >> (Int)(col>0);		mzte_codec.m_Image[col].width  = mzte_codec.m_iWidth >> (Int)(col>0);	}	mzte_codec.m_iAcmOrder = 0;	mzte_codec.m_iAcmMaxFreqChg = 0;	init_acm_maxf_enc();//	fprintf(stdout,"init ac model!\n");			int height;	int width;	for (col=0; col<mzte_codec.m_iColors; col++) {		int x,y;		height = mzte_codec.m_Image[col].height; 		width  = mzte_codec.m_Image[col].width;    		mzte_codec.m_SPlayer[col].coeffinfo = new COEFFINFO * [height];		if (mzte_codec.m_SPlayer[col].coeffinfo == NULL)			exit(fprintf(stderr,"Allocating memory for coefficient structure (I)."));		mzte_codec.m_SPlayer[col].coeffinfo[0] = new COEFFINFO [height*width];		if (mzte_codec.m_SPlayer[col].coeffinfo[0] == NULL)			exit(fprintf(stderr,"Allocating memory for coefficient structure (II)."));		for (y = 1; y < height; ++y)		  mzte_codec.m_SPlayer[col].coeffinfo[y] = 			mzte_codec.m_SPlayer[col].coeffinfo[y-1]+width;				for (y=0; y<height; y++)			for (x=0; x<width; x++) {				mzte_codec.m_SPlayer[col].coeffinfo[y][x].skip =0;			}	}//	fprintf(stdout,"Coeffinfo memory allocation done!\n");	/* DISCRETE WAVELET TRANSFORM */	noteProgress("Wavelet Transform....");  // 	choose_wavelet_filter(&anafilter, &synfilter, mzte_codec.m_iWvtType); // hjlee 0901	perform_DWT(anafilter);	noteProgress("Completed wavelet transform.");	TextureObjectLayer_enc_V1(synfilter); 	/*----- free up coeff data structure -----*/	noteDetail("Freeing up encoding data structures....");	for (col=0; col<mzte_codec.m_iColors; col++) {		if (mzte_codec.m_SPlayer[col].coeffinfo[0] != NULL)			delete (mzte_codec.m_SPlayer[col].coeffinfo[0]);		mzte_codec.m_SPlayer[col].coeffinfo[0] = NULL;		if (mzte_codec.m_SPlayer[col].coeffinfo)			delete (mzte_codec.m_SPlayer[col].coeffinfo);		mzte_codec.m_SPlayer[col].coeffinfo = NULL;	}	noteDetail("Completed freeing up encoding data structures.");	noteProgress("\n----- Encoding Completed. -----\n");	}}// begin: added by Sharp (99/2/16)Int CVTCEncoder::emit_bits_local( UShort data, Int size, FILE *fp ){    static Int remain_bits = 0;    static UInt buf = 0;    UInt put_buffer = data;    unsigned char c;		assert(sizeof(UShort)==2);    /* Mask off any excess bits in code */    put_buffer &= (((Int)1) << size) - 1;    /* new number of bits in buffer */    remain_bits += size;    /* align incoming bits */    put_buffer <<= 24 - remain_bits;    /* and merge with old buffer contents */    put_buffer |= buf;    while (remain_bits >= 8) {        c = (unsigned char) ((put_buffer >> 16) & 0xFF);//				printf("%d at %d\n", c, ftell(fp));//				getchar();        fwrite(&c, sizeof(char), 1, fp);        put_buffer <<= 8;        remain_bits    -= 8;    }    buf = put_buffer;    return remain_bits;}Void CVTCEncoder::tile_header_Enc(FILTER **wvtfilter, Int tile_id){  if ( mzte_codec.m_tiling_disable == 0 ){    emit_bits((UShort)(TEXTURE_TILE_START_CODE>>16), 16);    emit_bits((UShort)TEXTURE_TILE_START_CODE, 16);    emit_bits((UShort)tile_id, 16);    if ( mzte_codec.m_extension_type == 1 ){      emit_bits((UShort)1, 16); /* reference tile_id1 */      emit_bits((UShort)1, 16); /* reference tile_id2 */    }  }// FPDAM begin: added by Sharp	if ( mzte_codec.m_usErrResiDisable ) {		if ( mzte_codec.m_iAlphaChannel ) {			emit_bits((UShort)MARKER_BIT, 1);			emit_bits((UShort)mzte_codec.m_iTextureTileType, 2);			emit_bits((UShort)MARKER_BIT, 1);#ifdef  _FPDAM_DBG_fprintf(stderr,".............texture_tile_type=%d\n",mzte_codec.m_iTextureTileType);#endif		}		if ( mzte_codec.m_iAlphaChannel && mzte_codec.m_iTextureTileType == BOUNDA_TILE ){			noteProgress("Encoding Tile Shape Bitstream ....");			ShapeEnCoding(mzte_codec.m_Image[0].mask, mzte_codec.m_iWidth, mzte_codec.m_iHeight, 				mzte_codec.m_iWvtDecmpLev, 				mzte_codec.m_iSTOConstAlpha,				mzte_codec.m_iSTOConstAlphaValue, 				mzte_codec.m_iChangeCRDisable,				mzte_codec.m_iShapeScalable,				mzte_codec.m_bStartCodeEnable,				wvtfilter);		}	}// FPDAM end: added by Sharp}// end: added by Sharp (99/2/16)

⌨️ 快捷键说明

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