网上关于高通AIS框架的内容很少,建议跟高通有业务往来的公司,开发人员可用公司账号注册下高通的CreatePoint网站,里面可以查看很多关于高通的文档,是个不错的平台。前提是公司买了这方面服务哈~~~
1. display_setting的color format是一个枚举,如rgb888,output_setting的则是0x开头的十六进制(也对应源码中的枚举值,但是要写成十六进制,也可参考源码下的一些xml配置文件);
2. 注意color format的rgb的高低位存储顺序,我做的这个项目(使用的HDMI、HUB作为输入源,BSP转为CSI)中验证HUB输出的是b、g、r的顺序,所以如果目标板上的颜色与输入源不同,可从这个方向先查;
具体要看源码中post_to_window中做了什么,可在qcom/ais的源码中查看,在一个test的文件夹下,这个文件夹就是包含qcarcam_test.cpp的目录。这个demo是引用的test_util_la这个库(mk文件中查看引入哪些头文件和库),可以根据引入的库看哪部分源码。
如果启用了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要如何显示呢?
这就需要有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小时内删除。
留言与评论(共有 0 条评论) |