ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:18.64KB ,
资源ID:25040942      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25040942.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(可伸缩视频编码程序.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

可伸缩视频编码程序.docx

1、可伸缩视频编码程序#include #include #include #include #define MAXSIZE 352*288#define WIDTH 352 #define LENGTH 288#define GOP 16#define BLOCKTYPE 4 /BLOCKTYPE 为块的大小4,实质是把视频分成4*4的方块FILE *p_in = NULL;FILE *p_out = NULL;FILE *text = NULL;/char filename0 = crew.yuv;/char filename1 = crew_left.yuv; /char filename2

2、=flower.yuv;/char filename3=flower_lift.yuv;int ABANDONED ,GOPNUM;struct qualevydouble frameYMAXSIZE;double frameUMAXSIZE/4;double frameVMAXSIZE/4;yuanGOP;/Y:U:V=4:1:1 表示 4:1 的水平取样,没有垂直下采样。struct quadouble frameYMAXSIZE;double frameUMAXSIZE/4;double frameVMAXSIZE/4;yuan1GOP;/Y:U:V=4:1:1 表示 4:1 的水平取样

3、,没有垂直下采样。int MVXGOP-1MAXSIZE/(BLOCKTYPE*BLOCKTYPE)=0;int MVYGOP-1MAXSIZE/(BLOCKTYPE*BLOCKTYPE)=0;unsigned char bitvecYLENGTHWIDTH;unsigned char bitvecUVLENGTH/2WIDTH/2;void readoneframe(int i);void readoneGOP();void motionestimate(double*s,double*p,int src);void getLH(int src,double*sy,double*su,dou

4、ble*sv,double*py,double*pu,double*pv);void search(int src);void decode(int src,double*sy,double*su,double*sv,double*py,double*pu,double*pv);void prosessOneGOP();void find_snr (float *a,float *b,float *c,int src,double *y,double *u,double *v);int main(void) register int i; double total_time = 0.0f; d

5、ouble total_cost = 0.0f; char letter; printf(#n); printf(# #n); printf(# 此程序为基于哈尔小波的提升实现方案#n); printf(# ZZIA_WXJ#n); printf(#n); printf(请输入您要丢弃的帧数: n); scanf(%d,&ABANDONED); GOPNUM =8; printf(您确定要舍弃 %d 帧?n,ABANDONED); printf(确认请按: Y ,否则请按其它键.n); getchar(); scanf(%c,&letter); if(letter = y)|(letter =

6、 Y) printf(系统运行中,请稍等n); if (p_in=fopen(crew.yuv,rb)=NULL) printf( Input file %s does not existn,crew.yuv); exit(1); /新建输出文件 if (p_out=fopen(crew_lift.yuv,wb)=NULL) printf( cant creat file %s,crew_lift.yuv); if (text=fopen(stat.txt,wb)=NULL) printf( cant creat file %s,stat.txt); for(i=0;iGOPNUM;i+) r

7、egister clock_t begin = 0; register clock_t end = 0; register double cost = 0; begin = clock();/* 程序代码 */ prosessOneGOP(); /printf(完成第 %d 个GOP的处理!n,i+1); end = clock(); cost = (double)(end - begin) / CLOCKS_PER_SEC; printf(完成第 %d 个GOP的处理,所使用的时间:%lf seconds.nn,i+1, cost); total_cost += cost; /printf(

8、总共用时:%lf secondsn,total_cost); printf(总共耗时:%.4f secondsn,total_cost); printf(程序运行结束!n); else exit(0); return 0;/*编解码一组数据*/void prosessOneGOP() double *fmyGOP; double *fmuGOP; double *fmvGOP; float psnrGOP3; register int i,j,y,a; readoneGOP();/读入一组数据 for(i=0;iGOP;i+) fmyi=yuani.frameY; fmui=yuani.fra

9、meU; fmvi=yuani.frameV; for(i=1;i1) j=j/2; for(i=2;i1) j=j/2; for(i=4;i1) j=j/2; for(i=8;i1) j=j/2; for(i=16;i1) printf(The biggest number of GOP is 32!); a=1; j=ABANDONED; while(a0) for (y=0; yMAXSIZE; y+) *(fmya+y)=0; for (y=0; yMAXSIZE/4; y+) *(fmua+y)=0; *(fmva+y)=0; a=a+2; -j; a=2; while(a0) fo

10、r (y=0; yMAXSIZE; y+) *(fmya+y)=0; for (y=0; yMAXSIZE/4; y+) *(fmua+y)=0; *(fmva+y)=0; a=a+4; -j; a=4; while(a0) for (y=0; yMAXSIZE; y+) *(fmya+y)=0; for (y=0; y0) for (y=0; yMAXSIZE; y+) *(fmya+y)=0; for (y=0; y0) printf(最多可以丢弃15帧!);/解码 decode(8,fmy8,fmu8,fmv8,fmy0,fmu0,fmv0); decode(4,fmy4,fmu4,fm

11、v4,fmy0,fmu0,fmv0); decode(12,fmy12,fmu12,fmv12,fmy8,fmu8,fmv8); decode(2,fmy2,fmu2,fmv2,fmy0,fmu0,fmv0); decode(6,fmy6,fmu6,fmv6,fmy4,fmu4,fmv4); decode(10,fmy10,fmu10,fmv10,fmy8,fmu8,fmv8); decode(14,fmy14,fmu14,fmv14,fmy12,fmu12,fmv12); decode(1,fmy1,fmu1,fmv1,fmy0,fmu0,fmv0); decode(3,fmy3,fmu3,

12、fmv3,fmy2,fmu2,fmv2); decode(5,fmy5,fmu5,fmv5,fmy4,fmu4,fmv4); decode(7,fmy7,fmu7,fmv7,fmy6,fmu6,fmv6); decode(9,fmy9,fmu9,fmv9,fmy8,fmu8,fmv8); decode(11,fmy11,fmu11,fmv11,fmy10,fmu10,fmv10); decode(13,fmy13,fmu13,fmv13,fmy12,fmu12,fmv12); decode(15,fmy15,fmu15,fmv15,fmy14,fmu14,fmv14); for(i=0;iGO

13、P;i+) find_snr(&psnri0,&psnri1,&psnri2,i,fmyi,fmui,fmvi); for(i=0;iGOP;i+) fprintf(text,n%f ,psnri0); fprintf(text,%f ,psnri1); fprintf(text,%f ,psnri2); for(i=0;iGOP;i+) for (y=0; yMAXSIZE; y+) fprintf(p_out,%c,(unsigned char)(*(fmyi+y); for (y=0; yMAXSIZE/4; y+) fprintf(p_out,%c,(unsigned char)(*(

14、fmui+y); for (y=0; yMAXSIZE/4; y+) fprintf(p_out,%c,(unsigned char)(*(fmvi+y); /*读取一组数据到数组中*/void readoneGOP() int i = 0; for(i=0;iGOP;i+) readoneframe(i);/*读入一帧图像到char frameYiWIDTHLENGTH;char frameUiWIDTH/2LENGTH/2;char frameViWIDTH/2LENGTH/2;*/void readoneframe(int i) register int y; unsigned char

15、 fryMAXSIZE=0; unsigned char fruMAXSIZE/4=0; unsigned char frvMAXSIZE/4=0; if (fread (fry, 1, MAXSIZE, p_in) != MAXSIZE) printf (ReadOneFrame: cannot read %d bytes from input file, unexpected EOF?, exiting, MAXSIZE); if (fread (fru, 1, MAXSIZE/4, p_in) != MAXSIZE/4) printf (ReadOneFrame: cannot read

16、 %d bytes from input file, unexpected EOF?, exiting, MAXSIZE/4); if (fread (frv, 1, MAXSIZE/4, p_in) != MAXSIZE/4) printf (ReadOneFrame: cannot read %d bytes from input file, unexpected EOF?, exiting, MAXSIZE/4); for (y=0; yMAXSIZE; y+) yuani.frameYy = fryy; yuan1i.frameYy = fryy; for (y=0; yMAXSIZE

17、/4; y+) yuani.frameUy = fruy; yuan1i.frameUy = fruy; yuani.frameVy = frvy; yuan1i.frameVy = frvy; /*brife:motion estimatein:source frame,refrence frame,searchrangeout:MVsrc-1*/void motionestimate(double*s,double*p,int src)/全搜索 register int pic_x=0; register int pic_y=0; register int pic_xref=0; regi

18、ster int pic_yref=0; register int a,i,j,x,y; for(a=0;aMAXSIZE/(BLOCKTYPE*BLOCKTYPE);a+) unsigned sad=0U; unsigned char acc = 0; for(x=-4;x=4;x+) pic_xref=pic_x+x; if(pic_xref(WIDTH-BLOCKTYPE) continue; for(y=-4;y=4;y+) pic_yref=pic_y+y; if(pic_yref(LENGTH-BLOCKTYPE) continue; for(j=0;jBLOCKTYPE;j+)

19、for(i=0;iBLOCKTYPE;i+) acc+=abs(*(s+(pic_y+j)*WIDTH+pic_x+i)-*(p+(pic_yref+j)*WIDTH+pic_xref+i); if(accsad) sad=acc; MVXsrc-1a=x; MVYsrc-1a=y; pic_x+=BLOCKTYPE; if(a+1)*BLOCKTYPE)%WIDTH=0) pic_x=0; pic_y+=BLOCKTYPE; /*brief:get low and high frequency framein:source frame,refrence frameout:low and hi

20、gh frequency frame,bitvecY,bitvecuv*/void getLH(int src,double*sy,double*su,double*sv,double*py,double*pu,double*pv) register int pic_x=0; register int pic_y=0; register int pic_xref=0; register int pic_yref=0; register int pic_xuvref=0; register int pic_yuvref=0; register int pic_uvx=0; register in

21、t pic_uvy=0; register int a,i,j,x,y; unsigned char bitvecYLENGTHWIDTH; unsigned char bitvecUVLENGTH/2WIDTH/2; for (y=0; yLENGTH; y+) for (x=0; xWIDTH; x+) bitvecYyx=0; for(a=0;aMAXSIZE/(BLOCKTYPE*BLOCKTYPE);a+) /获得高频子带 pic_xref=pic_x+MVXsrc-1a; pic_yref=pic_y+MVYsrc-1a; for(j=0;jBLOCKTYPE;j+) for(i=

22、0;iBLOCKTYPE;i+) *(sy+(pic_y+j)*WIDTH+pic_x+i)=(*(sy+(pic_y+j)*WIDTH+pic_x+i)-*(py+(pic_yref+j)*WIDTH+pic_xref+i)/2; pic_xuvref=pic_uvx+(MVXsrc-1a)/2; pic_yuvref=pic_uvy+(MVYsrc-1a)/2; for(j=0;j(BLOCKTYPE/2);j+) for(i=0;i(BLOCKTYPE/2);i+) *(su+(pic_uvy+j)*WIDTH/2+pic_uvx+i)=(*(su+(pic_uvy+j)*WIDTH/2

23、+pic_uvx+i)-*(pu+(pic_yuvref+j)*WIDTH/2+pic_xuvref+i)/2; *(sv+(pic_uvy+j)*WIDTH/2+pic_uvx+i)=(*(sv+(pic_uvy+j)*WIDTH/2+pic_uvx+i)-*(pv+(pic_yuvref+j)*WIDTH/2+pic_xuvref+i)/2; /参考中心更新 pic_x+=BLOCKTYPE; if(a+1)*BLOCKTYPE)%WIDTH=0) pic_x=0; pic_y+=BLOCKTYPE; pic_uvx+=BLOCKTYPE/2; if(a+1)*BLOCKTYPE)%WIDTH=0) pic_uvx=0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1