imx6d overlay视频应用程序-mxc_v4l2_overlay分析

主程序流程分析:

  1. 处理命令行输入,主要是对输入和输出的宽、高、起始位置及视频capture的指定
  2. Open视频capture
  3. Open “frame buffer0”
  4. 通过FBIOGET_VSCREENINFO ioctl命令,获取fb0的可变参数
  5. 根据获取的fb0的可变参数判断1中输入参数中“左、右、上、下”是否合法
  6. 通过FBIOGET_FSCREENINFO ioctl命令,获取fb0的固定参数
  7. 根据fb0固定参数的id,通过VIDIOC_S_OUTPUT ioctl命令设置输出通路("DISP3 BG - DI1"这些跟V4L2驱动层对应,总共可以有6路输出)
  8. 调用mxc_v4l_overlay_setup设置overlay模式
  9. Open “frame buffer1”
  10. 通过FBIOGET_FSCREENINFO ioctl获取fb1固定参数
  11. 根据fb1固定参数的id判断fb1(前景)和fb0(背景)是否为同一组(DISP3或DISP4)
  12. Open “frame buffer2”
  13. 通过FBIOGET_FSCREENINFO ioctl获取fb2固定参数并判断与fb0是否为同一组(注,只有在11步不满足的情况下才执行12、13步,即fb1不满足情况下选fb2)
  14. 如果设置了overlay参数(-fg)执行15~22步
  15. 通过MXCFB_SET_GBL_ALPHA ioctl使能全局alpha,值为0
  16. 通过MXCFB_SET_CLR_KEY ioctl设置color key
  17. 如果设置了alpha模式(-a)执行18~21步
  18. 通过FBIOPUT_VSCREENINFO ioctl命令设置前景变参
  19. 通过FBIOGET_VSCREENINFO ioctl命令获取刚设置的前景变参
  20. 通过MXCFB_SET_LOC_ALPHA ioctl命令设置前景的本地alpha,地址0、1均设置为0
  21. 调用mmap分配alpha buffer0和buffer1
  22. 通过VIDIOC_G_FBUF ioctl命令获取v4l2 framebuffer ,并把flag设置为V4L2_FBUF_FLAG_OVERLAY
  23. 如果没有设置了overlay参数(没有-fg)执行24~27步
  24. 如果设置了alpha模式(-a)执行25~26步
  25. 通过MXCFB_SET_LOC_ALPHA ioctl命令设置背景的本地alpha,地址0、1均设置为0
  26. 调用mmap分配alpha buffer0和buffer1
  27. 根据背景fb0的var设置fb_v4l2的fmt成员,并把flag设置为V4L2_FBUF_FLAG_PRIMARY
  28. 根据前面设置的fb_v4l2,通过VIDIOC_S_FBUF ioctl命令设置v4l2 framebuffer
  29. 通过VIDIOC_G_FBUF ioctl命令获取下v4l2 framebuffer
  30. 调用mxc_v4l_overlay_test进行overlay测试

 

mxc_v4l_overlay_setup函数:

  1. 通过VIDIOC_ENUM_FRAMESIZES ioctl获取sensor支持的frame size,并打印
  2. 通过VIDIOC_ENUM_FMT ioctl获取sensor支持的frame format,并打印
  3. 获取VIDIOC_G_CROP (crop为何物)
  4. 设置VIDIOC_S_CROP(capture)
  5. 通过VIDIOC_S_FMT设置v4l2的format(capture)
  6. 通过VIDIOC_S_PARM设置framerate
  7. 通过VIDIOC_S_CTRL设置rotate参数
  8. 设置overlay模式下的crop和fmt

 

mxc_v4l_overlay_test函数:

  1. 通过VIDIOC_OVERLAY ioctl命令打开overlay模式
  2. 如果设置了alpha执行3~7步
  3. Open fb0
  4. FBIOGET_VSCREENINFO 获取变参
  5. 调用fill_alpha_buffer将alpha_buf0、1填充好
  6. 通过MXCFB_SET_LOC_ALP_BUF ioctl设置本地alpha地址
  7. 循环调用fill_alpha_buffer设置alpha buffer
  8. 通过VIDIOC_S_CTRL ioctl flash a frame三次
  9. 如果设置了g_camera_color(-v参数),则进行相应处理
  10. 进入while循环sleep
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值