亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mpeg4_b.c

?? 用MPEG-4對YUV視頻文件編碼壓縮成divx視頻文件
?? C
字號:
/* mpeg4encoder.cpp : Defines the entry point for the console application.*/



#include <stdio.h> 
#include <stdlib.h>
#include <time.h>

#include "user_macro.h"
#include "xvid.h"   
#include "encoder.h" 

#ifdef _TRIMEDIA
#include "clock.h"
#endif

#ifdef WIN32
#include <windows.h>
#include <mmsystem.h> 
#endif

/* global variable used by amvfast algorithm */
extern int SAD16_count,SAD8_count;
extern float factor1,factor2; 

XVID_ENC_PARAM encparam;/* encoding parameter struct variable */
XVID_ENC_FRAME encframe;/* encoding frame information struct variable */
/*XVID_ENC_STATS stats;*/
FILE *fdin,*fdout,*fconyuvout;/* file pointer */

/*********************************************************/
FILE *ftestlog;

char * FileName;
/************************************************************/


int framenum;/* encoding frame number */
unsigned char* PutBitsBuffer;/* bits streams buffer pointer */
unsigned char* ConstructYUVBuffer;/*construct image buffer pointer */
unsigned char *InYUVBuffer;/* input image buffer pointer */
static void* eHandle;/* point to global Encoder struct */

#ifdef _LOGFILE
FILE * encodelog;/*log file pointer */
#endif

/* 12.9 fyh add a global variable to counter memory useage */
extern int mem_useage;

/* function prototype declare */
int encoderrealse();

/*
  error process function
  
*/
void error(char* infor)
{
   printf("%s",infor);
   encoderrealse();
   exit(1);
}

/*
  read a frame data from YUV420 file 
*/
void readframe(FILE *fd,unsigned char *frame,int num)
{ long pos;
  int chrom_hsize, chrom_vsize,horizontal_size,vertical_size;
  int size;
  
  horizontal_size =	encparam.height ;
  vertical_size = 	encparam.width ;
  chrom_hsize =  horizontal_size>>1;
  chrom_vsize =  vertical_size>>1;
  size=horizontal_size*vertical_size+(chrom_hsize*chrom_vsize)*2;
  pos=num*size;
  fseek(fd,pos,SEEK_SET);
  fread(frame,1,size,fd);
}

/*
    write data from buffer to file
	
*/
void writefile(FILE *fd,unsigned char *buffer,int length)

{
	fwrite(buffer,1,length,fd);
}

/*
  encoder initialization
*/
int encoderinit()
{	
	int size;

	/* 
      vlc table initialization and function pointer initialization. 
    */
	xvid_init();

    /* initialize image resolution */
	encparam.width=352;
	encparam.height=288;
	framenum=50;/* encoding frame numbers */

	/* alloc global memory */
	mem_useage=0;
	size=encparam.width *encparam.height *3/2;
	mem_useage+=size;
	if (!(InYUVBuffer = (unsigned char *)malloc(size)))
	     error("malloc failed InYUVBuffer\n");

#ifdef _OUT_CONSTRUCT_IMAGE
	mem_useage+=size;
	if (!(ConstructYUVBuffer = (unsigned char *)malloc(size)))
       error("malloc failed ConstructYUVBuffer\n");
#endif

	size=encparam.width *encparam.height;
	mem_useage+=size;
	if(!(PutBitsBuffer= (unsigned char *)malloc(size)))
	    error("malloc failed PutBitsBuffer\n");

    /* initialize encoding frame structure */
	encframe.bitstream=PutBitsBuffer;
/*	encframe.colorspace=XVID_CSP_I420;*/
	encframe.image=InYUVBuffer;/* initialize input image poniter */
#ifdef _OUT_CONSTRUCT_IMAGE
	encframe.constructimage=ConstructYUVBuffer;/* initialize constructed image poniter */  
#endif
	encframe.stride =encparam.width ;/* image buffer stride */
/*	encframe.sequence_time=1;*/
	encframe.length=-1; /* bit streams length conter */
	encframe.intra =-1; /* intra frame flag */
	encframe.quant = 0; /* quantization step */   
	encframe.general = 0;
	encframe.motion  = 0;

	/* four motion vector mode */
//   	encframe.general |= XVID_INTER4V;
	/* use halfpel interpolation */
    encframe.general |= XVID_HALFPEL;
	/* half pixel search */
    encframe.motion |= HALFPELREFINE16; 
    /*encframe.motion |= HALFPELREFINE8; */

	/* amvfast sad threhold value parameter */
	factor1=(float)1.05;
	factor2=(float)1.5;
/*	factor1=(float)1.2;
	factor2=(float)1.8; */

/*	encframe.general |= XVID_MPEGQUANT; *//* MPEG quantization   */
/*	encframe.quant_inter_matrix=NULL;
	encframe.quant_intra_matrix=NULL;*/


    /* initialize encoding pararmeter structure */
	encparam.rc_bitrate=1000000;/* sequence bitrate (bps) */
    encparam.fbase=25; 
	encparam.fincr=1;
	encparam.min_quantizer=1;
	encparam.max_quantizer=31;
	encparam.sequence_time=1;

	encparam.framerate=encparam.fbase/encparam.fincr;/* sequence framerate (fps) */
	encparam.max_key_interval=encparam.framerate*encparam.sequence_time;/* gop frame number */

	/* initialize parameter related rate control */
	encparam.rc_reaction_delay_factor = 16;
	encparam.rc_averaging_period = 100;
	encparam.rc_buffer = 100;
/*	encparam.bquant_ratio=100;*/
/*	0-1表示使用位率控制模型0-為高位率模型,1-為低位率模型*/
	encparam.rc_type=0;
	/*encparam.rc_type=0;*/
	encparam.global=0;


	/* open in/out file */
//	if (!(fdin = fopen("e:/sequence/cif/singer.yuv","rb")))   

	FileName = "D:/作業/圖像/compression/sequence/basket.yuv";
	if (!(fdin = fopen(FileName,"rb")))
 	    error("Couldn't open yuv file\n");

/******************************************************/
	if (!(ftestlog = fopen("testlog.dat","wb")))
		error("Couldn't open file testlog.dat\n");
    fprintf(ftestlog,"\n\nPicture:   %s\n",FileName);
/**********************************************************/

	
#ifdef _OUT_CONSTRUCT_IMAGE
	if(!(fconyuvout = fopen("construct.yuv","wb")))
		error("Couldn't open construct yuv file\n");
#endif

	if (!(fdout = fopen("result.divx","wb")))
		error("Couldn't open mpg file\n");

#ifdef _LOGFILE
	if(!(encodelog=fopen("encodelog.dat","a")))
		error("Couldn't open encodelog.dat file\n");
	encparam.pFile=(void *)encodelog;
#else
    encparam.pFile=NULL;
#endif	

	/* encoding parameter check and alloc memory resource */
	encoder_create(&encparam);
	printf("memory useage: %d byte \n",mem_useage);
	
	eHandle=encparam.handle ;
	
	return 0;
}
/*
  release encoder resource 
*/
int encoderrealse()
{
	if(eHandle)
	{
		encoder_destroy(eHandle);
		eHandle = NULL;
	}
	
	free(PutBitsBuffer);
    free(InYUVBuffer);

#ifdef _OUT_CONSTRUCT_IMAGE
	free(ConstructYUVBuffer);
#endif
	
	return 0;
}
/*
   Finish sequence encoding process.
   include :
   read source YUV file,encoding loop,
   output bitstreame and constructed YUV file,
   output encoding statistic inforamtion.
  
*/
void putseq()
{  

	int i,frame_num=0;
	float psnr=0.0;
	/*int max_brame=0;*/
    int total_length=0;/* statistics bit streams length */
        
#ifdef _TRIMEDIA                   
        tmTimeStamp_t begin,end;
        float total_time=0;
        float interval;
#endif       

#ifdef WIN32
	int tick1,tick2,interval;
	int total_time=0;
#endif		

	for(i=0;i<framenum;i++)
	{
		/* read source YUV data from file */
		readframe(fdin,InYUVBuffer,i);

		/* reset each frame bit streams length counter */
		encframe.length = 0;

		/* set time profile point */
#ifdef _TRIMEDIA		
	getClock(&begin);	
#endif	
#ifdef WIN32
	tick1 = timeGetTime ();
#endif
        
	    /* encoding */ 
		/*encoder_encode(eHandle, &encframe,&stats);*/

/********************************************************/
	    fprintf(ftestlog,"\n\nframe: %d\n",i);
/******************************************************************/
        encoder_encode(eHandle, &encframe);

		/* set time profile point */
#ifdef _TRIMEDIA        
        getClock(&end);
        interval=diffClock(&begin,&end);  
        total_time+=interval;
#endif
#ifdef WIN32
	tick2 = timeGetTime();
	interval=tick2-tick1;
	total_time+=interval;
#endif        
  
		/* output bitstream to file */
		writefile(fdout,PutBitsBuffer,encframe.length);

		/* output encoding information */
#ifndef _TRIMEDIA
#ifdef WIN32
		printf("frame num= %4d length= %8d intra= %4d psnr= %8.3f dB time=%d ms\n",
			i,encframe.length*8,encframe.intra,encframe.psnr,interval);	
#else
		printf("frame num= %4d length= %8d intra= %4d psnr= %8.3f dB\n",
			i,encframe.length*8,encframe.intra,encframe.psnr);
#endif
#else			
		printf("frame num= %4d length= %8d intra= %4d psnr= %8.3f dB time=%8.3f ms\n",
			i,encframe.length*8,encframe.intra,encframe.psnr,interval);	
#endif
		
#ifdef _LOGFILE
#ifndef _TRIMEDIA
#ifdef WIN32
		fprintf(encodelog,"frame num=%4d length=%8d intra=%4d psnr=%8.3f dB time=%d ms\n ",
			i,encframe.length*8,encframe.intra ,encframe.psnr,interval);
#else
		fprintf(encodelog,"frame num=%4d length=%8d intra=%4d psnr=%8.3f dB\n ",
			i,encframe.length*8,encframe.intra ,encframe.psnr);
#endif
#else			
		fprintf(encodelog,"frame num=%4d length=%8d intra=%4d psnr=%8.3f dB time=%8.3f ms\n ",
			i,encframe.length*8,encframe.intra ,encframe.psnr,interval);
#endif						
//		total_length+=encframe.length*8;
#endif

		total_length+=encframe.length*8;
		/* process skip frame */
		if(!encframe.flag_skipframe)
		{
#ifdef _OUT_CONSTRUCT_IMAGE
		   writefile(fconyuvout,ConstructYUVBuffer,encparam.width*encparam.height*3/2 );
#endif
			psnr+=encframe.psnr;
			frame_num++;
		}
	}

	/* After encoding finishing, output encoding statistic inforamtion */ 
	psnr/=frame_num; 
#ifndef _TRIMEDIA
#ifdef WIN32
	total_time/=frame_num;
	printf("Total_PSNRY=%f dB   Total_bits= %d bit Total_frame_number= %d Time= %d ms\n ",psnr,total_length,frame_num,total_time);
#else	
	printf("Total_PSNRY=%f dB   Total_bits= %d bit Total_frame_number= %d \n ",psnr,total_length,frame_num);
#endif
#else                                                                                                                                    
	total_time/=frame_num;
	printf("Total_PSNRY=%f dB   Total_bits= %d bit Total_frame_number= %d Time= %8.3f ms\n ",psnr,total_length,frame_num,total_time);
#endif
	
#ifdef  _LOGFILE
#ifndef _TRIMEDIA
#ifdef WIN32
	fprintf(encodelog,"Total_PSNRY=%f dB   Total_bits= %d bit Total_frame_number= %d Time= %d ms\n ",psnr,total_length,frame_num,total_time);
#else
	fprintf(encodelog,"Total_PSNRY=%f dB   Total_bits= %d bit Total_frame_number= %d\n ",psnr,total_length,frame_num);
#endif
    fprintf(encodelog,"total check points: %d MB(16x16) %d block(8x8)\n",SAD16_count,SAD8_count);

#else
	fprintf(encodelog,"Total_PSNRY=%f dB   Total_bits= %d bit Total_frame_number= %d Time= %8.3f ms \n ",psnr,total_length,frame_num,total_time);
#endif
	fclose(encodelog);
#endif

#ifdef _OUT_CONSTRUCT_IMAGE
   fclose(fconyuvout);
#endif

	fclose(fdout);
	fclose(fdin);

/*********************************************************/
    fprintf(ftestlog,"Total_PSNRY=%f dB   Total_bits= %d bit   Total_framenum= %d\n",
		    psnr,total_length,frame_num);
	fclose(ftestlog);
/************************************************************/

}

/*
  Application entry function,
  agc and argv are no meaning.
 
*/
int main(int argc, char* argv[])
{
#ifndef _TRIMEDIA	
	time_t begin,end;
#else
	uint32_t begin; 
#endif

  /* 
	We must initialize timer before use trimedia timer.
  */
#ifdef _TRIMEDIA                     
        initClock();                     
#endif 

/****************************************************************/
	FileName=argv[1];
/*******************************************************************/
	/* encoder initialization */	
	encoderinit();

	/* encoding */ 
#ifndef _TRIMEDIA
	time(&begin);
#else
/*
   對于200MHzCPU,CYCLES()所使用的低分辨率時鐘最大計時為21s
*/
	begin=CYCLES();
#endif
	
	putseq();

#ifndef _TRIMEDIA
	time(&end);
	printf("time use up %d second\n",end-begin);
#else
    printf("total time is %u cycles \n", CYCLES()-begin); 
#endif
	
	/* release encoder */
	encoderrealse();

   /* 
	 We must release timer after use trimedia timer.
   */
#ifdef _TRIMEDIA
	releaseClock();
#endif	
	
	return 0;   
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看一区二区精品视频| 亚洲国产日韩av| 中文字幕在线观看不卡| 亚洲国产美女搞黄色| 岛国精品一区二区| 欧美一区二区三区四区五区| 中文字幕精品—区二区四季| 蜜臀精品一区二区三区在线观看| 成人av电影在线网| 精品成人a区在线观看| 一区二区三区四区五区视频在线观看| 国产一区免费电影| 欧美一区二区三区免费在线看| 亚洲女人的天堂| 成人一区二区三区| 日韩你懂的在线播放| 亚洲一区自拍偷拍| av激情综合网| 国产精品日产欧美久久久久| 蜜乳av一区二区| 欧美区一区二区三区| 亚洲欧洲韩国日本视频| 高清shemale亚洲人妖| 日韩你懂的电影在线观看| 亚洲va天堂va国产va久| 一本色道久久综合狠狠躁的推荐 | 国产a级毛片一区| 日韩免费观看高清完整版在线观看| 一区二区三区日本| 97se亚洲国产综合自在线观| 国产亚洲精久久久久久| 国模少妇一区二区三区| 2022国产精品视频| 久久成人18免费观看| 国产精品高清亚洲| 国产成人综合亚洲91猫咪| 久久在线免费观看| 国产成人精品免费| 国产欧美日韩另类视频免费观看| 国产麻豆91精品| 国产日本欧美一区二区| 高清av一区二区| 中文字幕一区二区日韩精品绯色| 成人激情黄色小说| 亚洲免费观看在线观看| 欧美专区在线观看一区| 亚洲国产精品久久一线不卡| 欧美日韩1区2区| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美一区二区三区视频在线观看| 奇米一区二区三区| 久久久亚洲高清| eeuss国产一区二区三区| 中文字幕欧美一区| 欧美午夜一区二区| 日韩在线一区二区三区| 久久色在线视频| av网站免费线看精品| 一区二区三区四区不卡在线 | 国产精品一区二区在线观看网站| 国产欧美日本一区二区三区| 91麻豆免费在线观看| 亚洲自拍与偷拍| 欧美日韩国产综合视频在线观看| 青青草国产成人av片免费| 2023国产精品自拍| 在线视频欧美精品| 国模娜娜一区二区三区| 亚洲美女屁股眼交3| 日韩欧美三级在线| 成人av资源站| 人禽交欧美网站| 国产精品久久久爽爽爽麻豆色哟哟 | 麻豆视频观看网址久久| 国产亚洲短视频| 欧美日韩你懂得| 极品美女销魂一区二区三区| 亚洲欧美区自拍先锋| 日韩精品一区在线观看| 91在线观看地址| 国内精品久久久久影院色 | 久久亚洲一级片| 欧美视频中文字幕| 国产成人综合精品三级| 一个色妞综合视频在线观看| 精品少妇一区二区三区免费观看| 91蝌蚪porny| 国产成人亚洲精品青草天美| 午夜精品一区二区三区电影天堂| 中文字幕免费不卡在线| 欧美一级xxx| 欧美伊人精品成人久久综合97| 国精品**一区二区三区在线蜜桃| 亚洲影院在线观看| 亚洲欧洲成人精品av97| 久久奇米777| 欧美一区中文字幕| 欧洲av一区二区嗯嗯嗯啊| 成人黄色网址在线观看| 激情综合一区二区三区| 日韩成人一区二区| 亚洲国产精品一区二区久久恐怖片 | 亚洲另类色综合网站| 久久精品视频免费观看| 精品免费国产二区三区| 欧美精品aⅴ在线视频| 91福利国产精品| 91美女在线视频| 99久久99久久久精品齐齐| 韩国欧美国产1区| 老司机午夜精品| 免费欧美在线视频| 秋霞午夜鲁丝一区二区老狼| 亚洲国产日产av| 日韩中文字幕1| 欧美aaa在线| 激情六月婷婷久久| 久久91精品国产91久久小草| 奇米色777欧美一区二区| 免费看欧美美女黄的网站| 日韩av一级电影| 美女视频黄久久| 精品夜夜嗨av一区二区三区| 免费久久99精品国产| 另类的小说在线视频另类成人小视频在线| 天堂va蜜桃一区二区三区漫画版| 日韩电影一二三区| 久久国产麻豆精品| 国产精品一区二区在线观看网站| 国产激情视频一区二区在线观看 | a亚洲天堂av| 色女孩综合影院| 欧美乱熟臀69xxxxxx| 91精品国产综合久久小美女| 日韩一区二区在线观看视频| 久久色中文字幕| 中文字幕日本乱码精品影院| 亚洲一区二区在线播放相泽| 亚洲成av人片在线观看| 久久99精品久久久久久国产越南| 国产高清成人在线| 一本色道亚洲精品aⅴ| 欧美日免费三级在线| 日韩一级免费一区| 国产女同互慰高潮91漫画| 亚洲欧洲另类国产综合| 亚洲1区2区3区4区| 国产一区二区主播在线| 94-欧美-setu| 日韩一区二区三区免费看| 国产免费观看久久| 亚洲电影视频在线| 国产精品一区二区无线| 91行情网站电视在线观看高清版| 欧美一级理论性理论a| 欧美国产欧美综合| 天天综合网天天综合色| 国产a级毛片一区| 欧美日本视频在线| 中文文精品字幕一区二区| 亚洲妇熟xx妇色黄| 成人看片黄a免费看在线| 欧美精三区欧美精三区| 国产精品三级久久久久三级| 亚洲mv大片欧洲mv大片精品| 高清在线观看日韩| 欧美肥胖老妇做爰| 亚洲男人的天堂网| 精品中文字幕一区二区| 91成人免费在线| 久久久久成人黄色影片| 青青草国产精品97视觉盛宴| 91香蕉视频在线| 国产欧美精品一区| 人人超碰91尤物精品国产| 色丁香久综合在线久综合在线观看| 精品国产成人在线影院 | 91丨九色丨黑人外教| 欧美大尺度电影在线| 亚洲影院在线观看| 99久久久久久| 国产亚洲一区二区三区在线观看| 午夜久久电影网| 在线这里只有精品| 中文字幕一区三区| 国产精品18久久久久| 精品国产精品一区二区夜夜嗨| 日韩福利电影在线| 欧美日韩激情一区二区| 一区二区三区欧美日| 99re热这里只有精品免费视频| 欧美激情自拍偷拍| 国产专区欧美精品| 2017欧美狠狠色| 久久爱www久久做| 日韩午夜在线播放| 久久99久久久欧美国产| 日韩精品一区二区三区swag| 日本成人在线视频网站| 欧美一区二区三区免费视频|