高通AIS框架 QCarCom demo关键点

阅读: 评论:0

高通AIS框架 QCarCom demo关键点

高通AIS框架 QCarCom demo关键点

        网上关于高通AIS框架的内容很少,建议跟高通有业务往来的公司,开发人员可用公司账号注册下高通的CreatePoint网站,里面可以查看很多关于高通的文档,是个不错的平台。前提是公司买了这方面服务哈~~~

        针对qcarcam_test.cpp这个demo(我是在Android上做的),这里只记录几个关键点(所以要求前提开发者自身对这个demo有一定熟悉度,对源码有一定的了解)!!!

        一、 color的foramt参数

                1. display_setting的color format是一个枚举,如rgb888,output_setting的则是0x开头的十六进制(也对应源码中的枚举值,但是要写成十六进制,也可参考源码下的一些xml配置文件);

                2. 注意color format的rgb的高低位存储顺序,我做的这个项目(使用的HDMI、HUB作为输入源,BSP转为CSI)中验证HUB输出的是b、g、r的顺序,所以如果目标板上的颜色与输入源不同,可从这个方向先查;

        二、disable_display=1,不代表需要屏蔽post_to_window的函数

                具体要看源码中post_to_window中做了什么,可在qcom/ais的源码中查看,在一个test的文件夹下,这个文件夹就是包含qcarcam_test.cpp的目录。这个demo是引用的test_util_la这个库(mk文件中查看引入哪些头文件和库),可以根据引入的库看哪部分源码。

        三、启用disable_display,即disable_display=1

                如果启用了disable_display,init_window的那个函数就不会创建native window了。

                可以通过引用库的函数来获取视频流的每一帧buffer memory。该函数我当时项目上是用的test_util_get_buf_ptr函数和test_util_get_buf_ptr_t结构体(ais下test文件夹下源码中查找),网上找不到这方面的知识,但亲测有效。

                具体使用如下:

test_util_get_buf_ptr_t buf_ptr;
test_util_get_buf_ptr(input_ctxt->qcarcam_window, &buf_ptr);
void* p_puf = (void*)buf_ptr.p_va;      // void*: unsigned char*

        四、获取的buffer如何显示

                由第三点获取到的buffer要如何显示呢?

                这就需要有OpenGL等图形渲染相关的知识了,可以自行百度搜索,有很多。这里不多说明。

        五、性能优化之连续内存

                关注下demo里分配的内存是不是连续的

                qnx和android上的方式不同,要注意,我是在android native实现的,所以开发者要自行识别,还是得了解下源码,看源码中的buffer是如何分配的,怎么取等等。

                以第三章获取到的buffer(void* p_buf)为例:

                1. qnx上创建连续内存,可以使用pmem_malloc_ext_v2;

unsigned int width = CAMERA_WIDTH;
unsigned int height = CAMERA_HEIGHT;//hardcode for RGBA8888, should be found in bufferq_info
unsigned int stride = bytes_num_per_pixel* ((width + (64 - 1)) & ~(64 - 1)); unsigned int size = (((stride * height) + 4096 - 1) & ~(4096 - 1));
int vmid = 1 << 2; //depends on which VM is using
pmem_handle_t phandle = NULL;
m_buffer_addr = pmem_malloc_ext_v2(size, PMEM_GRAPHICS_FRAMEBUFFER_ID,             PMEM_FLAGS_TYPED_MEM, PMEM_ALIGNMENT_4K, 1 << 2, &phandle, NULL);
HMI_UNUSED(phandle);

                2. android上,我这个项目源码里已经是连续内存了。直接通过第三章获取到的buffer显示就好。

                3. 本地创建共享2D图像数据

                使用eglCreateImageKHR函数,用eglCreateImageKHR的返回值“代替”’原先的buffer(void* p_buf),二者不等价!!!可学习下eglCreateImageKHR的知识。

                在Android上使用eglCreateImageKHR函数如下:

EGLint attribs[] = {EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE};
EGLClientBuffer clientBuffer = (EGLClientBuffer)p_buf;
EGLImageKHR eglImage = eglCreateImageKHR(egl_device->GetEGLCurrentDisplay(), egl_device->GetEGLCurrentContext(), EGL_NATIVE_BUFFER_ANDROID, clientBuffer, attribs);

                通过以上代码可知,第三章获取的buffer其实是作为eglCreateImageKHR函数的第四个参数EGLClientBuffer使用的

                

本文发布于:2024-01-31 19:37:43,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170670106330879.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:高通   框架   关键   AIS   QCarCom
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23