| 首页 | Search搜索 | 新闻资讯 | 技术应用 | 资源下载 | DSP专栏 | 电路图 | 芯片销售 | 产品商城 | 服务导航 | 邮购须知 | 客户评价 | 会员中心.登陆 | 注册 | 合作 | 
应用专题: 产品专题:
文档 下载 产品 电路图
您现在的位置: 安诺电子在线 >> 文章 >> 技术交流 >> 文章正文
专题栏目
更多内容
最新推荐 更多内容
相关文章
ADI ADSP-BF609 Blackf
ADI ADSP-BF609 Blackf
ADI ADSP-BF518 Blackfi
ADI智能电网全程解决方案
ADI低成本无线ECG Holte
ADI芯片识别与故障维修
ADI ADE7816精密多路电表
可靠性技术在医学仪器中
ADSP-BF516网络功能实现
Blackfin嵌入式系统驱动
更多内容
基于ADI Blackfin的视频监控初始化           ★★★
基于ADI Blackfin的视频监控初始化
作者:佚名 文章来源:Internet 点击数: 更新时间:2012-2-3 15:03:54
标签:ADI Blackfin 视频监控 初始化

最近一直在做视频监控方面的工作,采用的主要是ADI Blackfin芯片。在此写一下该芯片的一般初始化过程,与大家共勉:

初始化阶段做的工作:
int ioctl(int fd, ind cmd, …) input output control 的缩写。用于和设备进行“对话”。 如果驱动程序提供了对ioctl的支持,用户就可以在用户程序中使用ioctl 函数控制设备的 I/O 通道。
fd:设备的文件描述符;cmd:用户程序对设备的控制命令 ;.省略号一般是一个表示类型长度的参数,也可以没有。
1.打开视频:
Open(”/dev/video0”,vdàfd);关闭视频设备用 close(”/dev/video0”,vdàfd);
2.读 video_capability 中信息:
ioctl(vd->fd, VIDIOCGCAP, &(vd->capability));成功后可读取 vd->capability
各分量。
3.读 video_picture 中信息:
ioctl(vd->fd, VIDIOCGPICT, &(vd->picture));
4.改变 video_picture 中分量的值:
先为分量赋新值,再调用VIDIOCSPICT。
vd->picture.colour = 65535;
if(ioctl(vd->fd, VIDIOCSPICT, &(vd->picture)) < 0)
{
perror("VIDIOCSPICT");
return -1;
}
5.初始化 channel:
必须先做得到vd->capability中的信息
for (i = 0; i < vd->capability.channels; i++)
{
vd->channel[i].channel = i;
if (ioctl(vd->fd, VIDIOCGCHAN, &(vd->channel[i])) < 0)
{
perror("v4l_get_channel:");
return -1;
}
}
截取图象的一种方法:用mmap(内存映射)方式截取视频。
mmap( )系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通
文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,
不必再调用read(),write()等操作。
两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B
各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反
之亦然。采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接
读写内存,而不需要任何数据的拷贝。1.设置 picture 的属性。
2.初始化 video_mbuf,以得到所映射的 buffer 的信息。
ioctl(vd->fd, VIDIOCGMBUF, &(vd->mbuf))
3.可以修改 video_mmap 和帧状态的当前设置
vd->mmap.format = VIDEO_PALETTE_RGB24
vd->framestat[0] = vd->framestat[1] = 0; vd->frame = 0;
4.将 mmap 与 video_mbuf 绑定
void* mmap ( void * addr , size_t len , int prot , int flags , int fd ,
off_t offset )
len 为映射到调用进程地址空间的字节数,它从被映射文件开头,offset
个字节开始算起。Prot 为指定共享内存的访问权限 PROT_READ(可读),
PROT_WRITE(可写), PROT_EXEC (可执行)。Flags 为 MAP_SH
ARED MAP_PRIVATE 中必选一个,MAP_ FIXED 不推荐使用。addr 为共
内存享的起始地址,一般设 0,表示由系统分配。Mmap( ) 返回值是系统实
际分配的起始地址。
if((vd->map=(unsigned char*)mmap(0, vd->mbuf.size, PROT_READ| PR
OT_WRITE, MAP_SHARED, vd->fd, 0)) < 0)
{
perror("v4l_mmap mmap:");
return -1;
}
5.Mmap 方式下真正做视频截取的是 VIDIOCMCAPTURE。
ioctl(vd->fd, VIDIOCMCAPTURE, &(vd->mmap)) ;
若调用成功,开始一帧的截取,是非阻塞的,是否截取完毕留给VIDIOC
SYNC 来判断。
6.调用 VIDIOCSYNC 等待一帧截取结束
if(ioctl(vd->fd, VIDIOCSYNC, &frame) < 0)
{
perror("v4l_sync:VIDIOCSYNC");
return -1;
}
若成功,表明一帧截取已完成。可以开始做下一次 VIDIOCMCAPTURE,fra
me 是当前截取的帧的序号。

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    | 设为首页 | 加入收藏 | 联系安诺 | 友情链接 | 版权申明 |
    安诺电子 版权所有:安诺电子
    电话: 0731-22461925
    传真: 0731-22573522
    信息产业部备案
    *湘ICP备06016315号