赞
踩
高通由于驱动模块位于QNX侧,所以高通本身实现了一套以hypervisor为基础的传输数据的模块。
AIS就是其中用于传输摄像头数据的接口。本文章基于sa8155p实现QCARCAM的数据。
QNX是由加拿大的Quantum Software Systems公司创建的实时操作系统。该公司的创始人是Dan Dodge和Gordon Bell。1980年代初,他们开始研究实时操作系统,并于1982年创建了Quantum Software Systems公司。该公司的第一个产品是QNX操作系统。
QNX最初是用于数控机床和其他实时控制应用的,但很快就被应用在其他领域,如通讯设备、医疗设备、汽车电子等。
1999年,QNX被收购并成为黑莓的子公司。目前,QNX已经成为汽车电子市场的领先供应商,其操作系统被广泛应用于汽车的娱乐系统、驾驶员信息系统、车载通信等领域。
高通AIS是高通公司的人工智能解决方案,它包括一系列的硬件和软件技术,用于在移动设备、物联网和汽车等领域中实现人工智能的应用。高通AIS的核心是高通骁龙移动平台上的人工智能引擎,它可以加速深度学习任务的执行,提高计算效率和节能效果。高通AIS还提供了一系列丰富的开发工具和样例代码,帮助开发者更快地构建人工智能应用。
ais侧用ais_client去获取视频数据流。
qcarcam_ret_t qcarcam_initialize(qcarcam_init_t* p_init_params);
qcarcam初始化
qcarcam_ret_t qcarcam_query_inputs(qcarcam_input_t* p_inputs, unsigned int size, unsigned int* ret_size);
查询有效camera,驱动配置了多少个camera,并获取相机得基本属性
qcarcam_hndl_t qcarcam_open(qcarcam_input_desc_t desc);
打开camera,输入参数为camera_id,oms为0, dms为1
qcarcam_ret_t qcarcam_s_buffers(qcarcam_hndl_t hndl, qcarcam_buffers_t* p_buffers);
设置buffer参数,重要的是buffer缓冲个数不得少于2,建议个数设置为5
qcarcam_ret_t qcarcam_start(qcarcam_hndl_t hndl);
开启照相机
qcarcam_ret_t qcarcam_get_frame(qcarcam_hndl_t hndl, qcarcam_frame_info_t* p_frame_info, unsigned long long int timeout, unsigned int flags);
获取视频帧,默认超时时间设置为500000000
qcarcam_ret_t qcarcam_release_frame(qcarcam_hndl_t hndl, unsigned int idx);
释放帧数据,在获取帧数据拷贝后,一定要执行release操作
qcarcam_ret_t qcarcam_stop(qcarcam_hndl_t hndl);
停止获取摄像头视频帧
qcarcam_ret_t qcarcam_close(qcarcam_hndl_t hndl);
关闭摄像头
qcarcam_ret_t qcarcam_uninitialize(void);
释放ais资源
即
qcarcam_s_buffers
设置buffer的不同方式
int ionDev = open("/dev/ion", O_RDONLY);
int aret = alloc_ion_buffer(ionDev, ion_buf);
mQcarcamOutBufs.buffers[i].planes[0].p_buf = (void *)(uintptr_t)(ion_buf->fd);
mpQcarcamMmapBufs[i].size = mQcarcamOutBufs.buffers[i].planes[0].size;
mpQcarcamMmapBufs[i].ptr = mmap(NULL, mpQcarcamMmapBufs[i].size, PROT_READ | PROT_WRITE, MAP_SHARED, ion_buf->fd, 0);
Android 侧需要通过读取/dev/ion指定文件获取文件的fd,再通过map映射关系来获取指针。
ion_bufs[i].ptr[0] = pmem_malloc_ext_v2(mQcarcamOutBufs.buffers[i].planes[0].size + mQcarcamOutBufs.buffers[i].planes[1].size,
PMEM_CAMERA_ID, PMEM_FLAGS_SHMEM | PMEM_FLAGS_PHYS_NON_CONTIG | PMEM_FLAGS_CACHE_NONE,
PMEM_ALIGNMENT_4K, 0, (pmem_handle_t *)&ion_bufs[i].mem_handle, NULL);
mQcarcamOutBufs.buffers[i].planes[0].p_buf = ion_bufs[i].mem_handle;
区别于Android的方式,由于视频驱动位于QNX侧,所以QNX获取视频数据不需要通过V4l2结构来获取,直接可以通过pmen内存共享的方式获取
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。