V4l2 capture时 USERPTR和MMAP的区别
2012-10-09 10:47
197 查看
视频应用可以通过两种方式从V4L2驱动申请buffer
1. USERPTR, 顾名思义是用户空间指针的意思,应用层负责分配需要的内存空间,然后以指针的形式传递给V4L2驱动层,V4L2驱动会把capture的内容保存到指针所指的空间
一般来说,应用层需要确保这个内存空间物理上是连续的(IPU处理单元的需求),在android系统可以通过PMEM驱动来分配大块的连续物理内存。应用层在不需要的时候要负责释放申请的PMEM内存。
2. MMAP方式,内存映射模式,应用调用VIDIOC_REQBUFS ioctl分配设备buffers,参数标识需要的数目和类型。这个ioctl也可以用来改变buffers的数据以及释放分配的内存,当然这个内存空间一般也是连续的。在应用空间能够访问这些物理地址之前,必须调用mmap函数把这些物理空间映射为用户虚拟地址空间。
虚拟地址空间是通过munmap函数释放的; 而物理内存的释放是通过VIDIOC_REQBUFS来实现的(设置参数buf count为(0)),物理内存的释放是实现特定的,mx51 v4l2是在关闭设备时进行释放的。
所以二者都是申请连续的物理内存,只是申请和释放的方式不同
1. USERPTR, 顾名思义是用户空间指针的意思,应用层负责分配需要的内存空间,然后以指针的形式传递给V4L2驱动层,V4L2驱动会把capture的内容保存到指针所指的空间
一般来说,应用层需要确保这个内存空间物理上是连续的(IPU处理单元的需求),在android系统可以通过PMEM驱动来分配大块的连续物理内存。应用层在不需要的时候要负责释放申请的PMEM内存。
2. MMAP方式,内存映射模式,应用调用VIDIOC_REQBUFS ioctl分配设备buffers,参数标识需要的数目和类型。这个ioctl也可以用来改变buffers的数据以及释放分配的内存,当然这个内存空间一般也是连续的。在应用空间能够访问这些物理地址之前,必须调用mmap函数把这些物理空间映射为用户虚拟地址空间。
虚拟地址空间是通过munmap函数释放的; 而物理内存的释放是通过VIDIOC_REQBUFS来实现的(设置参数buf count为(0)),物理内存的释放是实现特定的,mx51 v4l2是在关闭设备时进行释放的。
所以二者都是申请连续的物理内存,只是申请和释放的方式不同
相关文章推荐
- V4l2 capture时 USERPTR和MMAP的区别
- V4l2 capture时 USERPTR和MMAP的区别
- 【Qt开发】 V4L2_CAP_VIDEO_OVERLAY与V4L2_CAP_VIDEO_CAPTURE的区别
- V4L2 之V4L2_MEMORY_USERPTR
- Capture images using V4L2 on Linux
- 微信网页授权snsapi_base,snsapi_userinfo区别和实现
- drop user和drop user cascade的区别
- v4L2摄像头获取单幅图片测试程序(MMAP模式)
- su user 和 su - user的区别
- drop user和drop user cascade的区别
- auto_ptr与shared_ptr 的区别
- select * from user与select u.id,u.name from user的区别?
- Android编译选项eng、user、userdebug的区别
- zval_dtor与zval_ptr_dtor的区别
- V4L 简介及其与V4L2区别
- drop user和drop user cascade的区别
- preg_match_all中第四个参数PREG_PATTERN_ORDER,PREG_SET_ORDER,PREG_OFFSET_CAPTURE之间的区别!
- 关于Microsoft Unified Communications Managed API 3.0开发的相关技术问题(UserEndpoint 、ApplicationEndpoint的区别是什么?)
- linux ftpusers和user_list 区别
- mmap与read/write的区别