6/20/2011 8:53:14 AM

来源:互联网 发布:windows手机应用市场 编辑:程序博客网 时间:2024/05/02 04:39

还没有将报警处理加入到SDK中

板子报警触发后

有关采集的问题

次数根本对不上

把编码注释掉 只是简单的采集看看

不管哪个系统硬件资源是一致的

vfat 在mss/blk0p3中

在第一个系统中挂在/dev/mmca3上

修改前端

 ci_set_clock(1, 1, 2400);
 
 
模拟输入采集的最大帧率为25帧
在vedio_record中将编码注释掉,计算read_a_frame和return_a_frame的总时间为40ms上下

前端输入在修改ov2655时钟前,为63ms,但比较均匀
修改后采样一帧图像的数据不均匀

现在看一下界面的问题
自动滚到最后一行

#define INFO_APPEND(view, str)/
{/
 GtkTextBuffer *buffer;/
 GtkTextMark *mark;/
 GtkTextIter iter;/
 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));/
    gtk_text_buffer_get_end_iter(buffer, &iter);/
 gtk_text_buffer_insert(buffer, &iter, str, -1);/
 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));/
 mark = gtk_text_buffer_get_insert(buffer);/
 gtk_text_view_scroll_mark_onscreen(GTK_TEXT_VIEW(view), mark);/
}
textview textbuffer textmark
在屏幕上滚动看看
PAL 制只能到25帧

现在就是还是报警信号
AMP_ALERT_ON

收到消息后走了回调
现在看一下这个报警走的什么?
收到这个报警触发后怎么调用图像?

模拟设备树的通道被点击

现在就是说在找到对应的播放句柄出来

如果有就表示这一路图像已经在播放了

能不能找到一个空闲的播放窗口出来
首先创建了4个对象 COutDlg
每个对象关联到一个窗口
将这些窗口都重新进行布局
要做个选中框出来
设备树有一个输出窗口
设备树上的点击事件
检查点击点的位置,如果这个点击点的位置是在这棵树的某个节点上
将这个节点的状态设置为选中状态
有了选中状态后在执行
首先会判断当前选中的窗口是否已经有了图像播放
如果没有播放,找到对应的父节点dvs节点,然后通道这个节点找到对应的DVS设备
获取通道所在的seq
如果这个通道已经在开始播放了,就把已经播放的窗口移动到当前的这个窗口
如果没有播放就开始播放
如果报警了就找到第一个没有使用的窗口
怎么找,逐一遍历找
回调也找到主窗体类中
已知设备ip,从设备树中找到对应的设备对象
找到这个设备对象后调用启动预览的方法
加个方法就能找到对应的DVS对象

查询摄像头的制式
在亚洲,一般使用PAL(720X576)制式的摄像头,而欧洲一般使用NTSC(720X480),使用VIDIOC_QUERYSTD来检测:

v4l2_std_id std;do {  ret = ioctl(fd, VIDIOC_QUERYSTD, &std);} while (ret == -1 && errno == EAGAIN);
switch (std) {    case V4L2_STD_NTSC:        //……    case V4L2_STD_PAL:        //……}

设置视频捕获的格式
struct v4l2_format fmt;

memset ( &fmt, 0, sizeof(fmt) );
fmt.type      = V4L2_BUF_TYPE_VIDEO_CAPTURE;
fmt.fmt.pix.width  = 720;
fmt.fmt.pix.height    = 576;
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
fmt.fmt.pix.field       = V4L2_FIELD_INTERLACED;
if (ioctl(fd, VIDIOC_S_FMT, &fmt) == -1) {  return -1;}
v4l2_format结构如下:
struct v4l2_format{ 
  enum v4l2_buf_type type;  
   // 数据流类型,必须永远是V4L2_BUF_TYPE_VIDEO_CAPTURE  
     union    {        struct v4l2_pix_format    pix;   
           struct v4l2_window        win;    
                struct v4l2_vbi_format    vbi;  
                       __u8    raw_data[200];       
                             } fmt;
                             }
                            
                             ;struct v4l2_pix_format{    __u32                   width;     
                                // 宽,必须是16的倍数    __u32                   height;   
                                    // 高,必须是16的倍数    __u32                   pixelformat;
                                      // 视频数据存储类型,例如是YUV4:2:2还是RGB    enum v4l2_field         field;
                                         __u32                   bytesperline;        __u32                   sizeimage; 
                                           enum v4l2_colorspace    colorspace;    __u32                   priv;       };

分配内存

接下来可以为视频捕获分配内存:

struct v4l2_requestbuffers  req;if (ioctl(fd, VIDIOC_REQBUFS, &req) == -1) {  return -1;}v4l2_requestbuffers 结构如下:struct v4l2_requestbuffers{    __u32               count;  // 缓存数量,也就是说在缓存队列里保持多少张照片    enum v4l2_buf_type  type;   // 数据流类型,必须永远是V4L2_BUF_TYPE_VIDEO_CAPTURE     enum v4l2_memory    memory; // V4L2_MEMORY_MMAP 或 V4L2_MEMORY_USERPTR    __u32               reserved[2];};

原创粉丝点击