uvc camera使用buf的物理地址出现错误

    在使用uvc camera输出图像数据buf之后,如果想将这些图像数据进一步处理,比如编码录像保存。为了减少数据拷贝,在将数据送往编码器的时候,一般会使用物理地址进行编码,但是uvc camera输出的buf,想通过struct v4l2_buffer结构体中的m.offset成员变量获取物理地址会出现错误---物理地址不正确。

    出现以上现象,那是因为在uvc camera的驱动注册时,在uvc_queue_init()函数中,通过queue.mem_ops变量设置了buf queue的内存操作集,而uvc camera的该变量赋值为vb2_vmalloc_memops,该变量的定义在videobuf2_vmalloc.c中,该变量决定着buf的内存申请方式,而它通过是使用videobuf2申请虚拟内存,也就是说它并没有申请物理地址连续的内存块,所以uvc camera不能通过物理地址操作buf内存,需要从写其申请内存的方式,申请物理地址连续的内存之后才可以使用物理地址。

 

 

转载请注明出处!

你可能感兴趣的:(camera)