如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
ARM11硬件编解码例程摘要:介绍基于华恒科技HHS3C6410平台,将摄像头采集的数据通过硬件编码后通过网络发送,客户端(Linux)通过网络实时接收并显示的具体实现;主要介绍S3C6410的H264硬件编码特性和V4L2编程。关键词:S3C6410H.264视频监控V4L20引言HHS3C6410是华恒科技推出的一款针对高性能手持设备和通用视频处理应用的低功率,高性能的嵌入式开发板,采用三星S3C6410ARM1176JZF-S处理器,最高主频可达667MHz;S3C6410内部集成的多媒体编解码器(MFC)支持mpeg4/h.263/h.264的编码与解码,并支持VC1解码,性能可以达到全双工30fps@640x480同时编解码和半双工30fps@720x480或25fps@720x576编解码。H.264/AVC标准是一套兼顾广播和电信,覆盖从低码率通信到高清晰电视的广域标准,相比以前的标准,具有更高的压缩率,高质量图像,容错功能,并有很强的网络适应性。1总体设计监控系统由监控前端,监控终端,网络三部分组成,监控前端是一个嵌入式Linux系统,它通过S3C6410的CameraIF接收摄像头(SAA7113)采集的数据,并传送给硬件编解码(MFC)模块,并把得到的经过H264压缩的数据打包发送到IP网络上,监控终端(Linux)通过网络接收数据包,经过解码实时播放。总体框架如图1:图1.总体框架图整个嵌入式视频采集系统由软件和硬件两部分组成。硬件方面,以S3C6410处理器为核心通过CameraIF接口接收摄像头数据,经过MFC硬件编码后通过DM9000发送,UART作为开发调试接口;软件方面,引导程序和Linux内核,设备驱动程序形成基本的嵌入式运行环境,应用层负责视频采集,压缩及传输。2软件设计软件设计包括嵌入式系统构建和应用软件两部分,其中嵌入式系统部分按照华恒科技S3C6410用户手册构建,其中包括了Bootloader,Linux内核,交叉编译器,驱动等;下面介绍应用软件设计:监控前端:监控前端主要包括视频采集模块和视频压缩编码模块。视频采集模块使用V4L2接口收集摄像头数据到缓冲区中,视频压缩模块调用MFC驱动把YUV420数据压缩编码,同时可以指定编码参数。示例代码如下:cam_fp=open(cam_name,O_RDWR);//打开camera设备...mfc_fd=open(MFC_DEV_NAME,O_RDWR|O_NDELAY);//打开MFC设备...addr=(char*)mmap(0,BUF_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,mfc_fd,0);//mmapMFC//设置编码参数enc_init.in_width=out_width;enc_init.in_height=out_height;enc_init.in_frameRateRes=atoi(argv[2]);enc_init.in_frameRateDiv=0;enc_init.in_bitrate=atoi(argv[3]);enc_init.in_gopNum=atoi(argv[4]);ioctl(mfc_fd,IOCTL_MFC_H264_ENC_INIT,&enc_init);frame_size=(enc_init.in_width*enc_init.in_height*3)>>1;//得到MFC输入缓冲区地址get_buf_addr.in_usr_data=(int)addr;ioctl(mfc_fd,IOCTL_MFC_GET_FRAM_BUF_ADDR,&get_buf_addr);in_buf=(char*)get_buf_addr.out_buf_addr;//得到MFC输出缓冲区地址get_buf_addr.in_usr_data=(int)addr;ioctl(mfc_fd,IOCTL_MFC_GET_LINE_BUF_ADDR,&get_buf_addr);out_buf=(char*)get_buf_addr.out_buf_addr;//V4L2编程ioctl(cam_fp,VIDIOC_QUERYCAP,&cap);//选择输入/输出ioctl(cam_fp,VIDIOC_S_INPUT,&index);ioctl(cam_fp,VIDIOC_S_OUTPUT,&index);//设置格式,注意必须设置输出为YUV420格式ioctl(cam_fp,VIDIOC_G_FBUF,&fb);fb.capability=cap.capabilities;fb.fmt.width=out_width;fb.fmt.height=out_height;fb.fm