1.引言 近几年,国内在嵌入式无线联网领域发送(2)
2013-05-06 18:02
导读:本文选用 Hi3510 自带嵌入式Linux-2.6.14 内核操作系统,开发前需要搭建开发环境,可以安装一款Fedoral 9.0 服务器,同时建立交叉编译器、安装SDK 包。SDK 是基
本文选用 Hi3510 自带嵌入式Linux-2.6.14 内核操作系统,开发前需要搭建开发环境,可以安装一款Fedoral 9.0 服务器,同时建立交叉编译器、安装SDK 包。SDK 是基于Hi3510视频评估板的软件开发工具,包含了在Linux 相关应用开发时使用的各种工具及其源代码,是用户开发中最基本的平台软件。通过make menuconfig 配置内核可实现系统的量身定做,去除本系统无关部分,缩减内核,最后将配置后的内核使用mkimage 工具做成映像文件,通过网口下载到Hi3510 中。
无线发送通过重新配置内核Usb Serial Driver 可实现其在内核的驱动部分,但需要把UsbDriver 的PID 和VID 设置成本模块的ID,即需要把PID 和VID 号增加到文件driversusbserial option.c 的结构体static struct usb_device_id 中,重新编译后便可支持无线发送模块。
ID 更改步骤如下:
path:
linux-2.6.14driversusbserial
file:
option.c
结构体:
定义两个宏(DTM6211 的VID:0x1AB7 PID:0x6000):
#define DTM6211_OPTION_VENDOR_ID 0x1AB7
#define DTM6211_ OPTION_PRODUCT_COLT 0x6000
增加到结构体中
static struct usb_device_id option_ids[] = {
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
…
{ USB_DEVICEDTM6211_OPTION_VENDOR_I , DTM6211_
OPTION_PRODUCT_COLT) },
}
4.2 视频处理软件设计
视频处理软件主要是对采集过来的视频数据进行H.264 压缩,编码中涉及的参数需调用SDK 提供的API 进行配置,其中包括图像组长度(GOP)、编码帧率(fps)、量化参数(maxqp)、比特率(bps)和用户数据的插入等,然后将压缩过的裸流,发送到USB 端口。
其中关于配置摄像头部分,完成normal 为PAL 制式,mode 为GIF 格式的选择,其主要程序为:
(转载自中国科教评价网www.nseac.com )
step 1:
fd = open("/dev/misc/tw2834dev",O_RDWR); /*: Open the A/D device, and config it.Default is TW2834*/
step 2:if ((mode != QVGA) && (mode != VGA) && (mode != SXGA))
/*: config thd A/D devide normal(PAL/NTSC)*/
..........
step 3:switch (mode) /*: config VI mode(D1/CIF......)*/
{
case CIF:
{
hiRet = ioctl(fd,TW2834_SET_4CIF,&val);
break;
}
.......
}
配置输入公共属性部分,主要完成工作模式为从模式,VIU 与A/D 芯片的接口类型BT656,通道分布模式四路CIF,BT656 为场模式等工作,其主要程序为:
22222222222222222
VSTART 输入通道号之后需要创建一个线程,使用pthread_create()函数,随后执行线程venc_start(),其核心程序如下:
/*step 1: Open video encoder*/
hiRet = HI_VENC_Open(&venc_init);
/*step 2: Overlay must be close ,before VI pulic attribute is configed*/
for (i = 0; i < 4; i++ )
{ HI_VI_DisableOverlay(i);}
/*step 3: VI chnnel must be disable, before VI public attribute is configed*/
for (i = 0; i < 4; i++ )
{HI_VI_DisableVIChn(i);}
/*step 4: VI must be disable, before VI public attribute is configed*/
hiRet = HI_VI_DisableVI();
/*step 5: config public attribute for different mode*/
struPubAttr.enMaster = VIDEO_CONTROL_MODE_SLAVER;
struPubAttr.enInputNorm = VIDEO_ENCODING_MODE_PAL;