使用SC3336 3MP Camera,使用sdk中third_party_af_algo自定义demo运行,但是在运行后,发现打印的输出值都是为零。但是此时的rtsp输出视频均是正常。
检查发现demo中的3A算法,third_party_af_algo中的print_af_stats函数输出全是为零。调试发现其中set_af_manual_meascfg函数rk_aiq_user_api2_af_SetAttrib设置,返回为成功,但是通过rk_aiq_user_api2_af_GetAttrib读取的数据都是零。
RV1103 自动调焦 自定义算法 错误
您好,SC3336 3MP Camera不带调焦电机3A 中的 AF 变倍对焦应该是没办法实现的,rkisp在SC3336上仅能测试库函数功能.
printf_af_stats 传入的参数是 rk_aiq_uapi2_sysctl_get3ASatsBlk 设置的,该api阻塞运行,当有新3A统计值生成时会立即返回。所以如果printf_af_stats 输出异常需要先确定 rk_aiq_uapi2_sysctl_get3ASatsBlk 获取的 3A 统计值是否异常。
而 rk_aiq_user_api2_af_SetAttrib 和 rk_aiq_user_api2_af_GetAttrib 都没有公开的源码无法确定内部执行了什么,在 rkisp_demo 的使用中先调用 rk_aiq_user_api2_af_GetAttrib 后获取默认值后再调用 rk_aiq_user_api2_af_SetAttrib 去设置,不确定在设置中修改了哪些参数,也不清楚您所描述的打印是哪些,建议先跑通 rkisp_demo 后再参考 rkisp_demo 的设置来进行下一步测试。我个人还是偏向于在 rk_aiq_uapi2_sysctl_get3ASatsBlk 找问题。
如果方便的话可以提供一下您自定义的demo,方便我们或者其他成员了解您测试的环境参数
printf_af_stats 传入的参数是 rk_aiq_uapi2_sysctl_get3ASatsBlk 设置的,该api阻塞运行,当有新3A统计值生成时会立即返回。所以如果printf_af_stats 输出异常需要先确定 rk_aiq_uapi2_sysctl_get3ASatsBlk 获取的 3A 统计值是否异常。
而 rk_aiq_user_api2_af_SetAttrib 和 rk_aiq_user_api2_af_GetAttrib 都没有公开的源码无法确定内部执行了什么,在 rkisp_demo 的使用中先调用 rk_aiq_user_api2_af_GetAttrib 后获取默认值后再调用 rk_aiq_user_api2_af_SetAttrib 去设置,不确定在设置中修改了哪些参数,也不清楚您所描述的打印是哪些,建议先跑通 rkisp_demo 后再参考 rkisp_demo 的设置来进行下一步测试。我个人还是偏向于在 rk_aiq_uapi2_sysctl_get3ASatsBlk 找问题。
如果方便的话可以提供一下您自定义的demo,方便我们或者其他成员了解您测试的环境参数
自定义demo,是由sdk中的代码改造而成的。
基于luckfox-pico/media/samples/test目录下的sample_venc_stresstest.c文件,作为基础的视频采集框架。
直接拷贝luckfox-pico/media/isp/release_camera_engine_rkaiq_rv1106_arm-rockchip830-linux-uclibcgnueabihf/rkisp_demo/demo/af_algo_demo目录下的third_party_af_algo.cpp(复制修改为.c)和third_party_af_algo.h。 sample_venc_stresstest::main函数中1023行添加third_party_af_algo::custom_af_run函数。仅仅添加这个启动函数,其他代码不做改动。
其他的代码
运行的状态就是,third_party_af_algo.c文件中的print_af_stats运行过程中,打印的全部都是零。但是AW和AE的状态,通过视频测试看到都是工作正常的。但是3A读取的数据就都是错误的。
基于luckfox-pico/media/samples/test目录下的sample_venc_stresstest.c文件,作为基础的视频采集框架。
直接拷贝luckfox-pico/media/isp/release_camera_engine_rkaiq_rv1106_arm-rockchip830-linux-uclibcgnueabihf/rkisp_demo/demo/af_algo_demo目录下的third_party_af_algo.cpp(复制修改为.c)和third_party_af_algo.h。 sample_venc_stresstest::main函数中1023行添加third_party_af_algo::custom_af_run函数。仅仅添加这个启动函数,其他代码不做改动。
其他的代码
运行的状态就是,third_party_af_algo.c文件中的print_af_stats运行过程中,打印的全部都是零。但是AW和AE的状态,通过视频测试看到都是工作正常的。但是3A读取的数据就都是错误的。
咋样,有没有点点眉目?Crocodile wrote: ↑2024-08-28 3:25 您好,SC3336 3MP Camera不带调焦电机3A 中的 AF 变倍对焦应该是没办法实现的,rkisp在SC3336上仅能测试库函数功能.
printf_af_stats 传入的参数是 rk_aiq_uapi2_sysctl_get3ASatsBlk 设置的,该api阻塞运行,当有新3A统计值生成时会立即返回。所以如果printf_af_stats 输出异常需要先确定 rk_aiq_uapi2_sysctl_get3ASatsBlk 获取的 3A 统计值是否异常。
而 rk_aiq_user_api2_af_SetAttrib 和 rk_aiq_user_api2_af_GetAttrib 都没有公开的源码无法确定内部执行了什么,在 rkisp_demo 的使用中先调用 rk_aiq_user_api2_af_GetAttrib 后获取默认值后再调用 rk_aiq_user_api2_af_SetAttrib 去设置,不确定在设置中修改了哪些参数,也不清楚您所描述的打印是哪些,建议先跑通 rkisp_demo 后再参考 rkisp_demo 的设置来进行下一步测试。我个人还是偏向于在 rk_aiq_uapi2_sysctl_get3ASatsBlk 找问题。
如果方便的话可以提供一下您自定义的demo,方便我们或者其他成员了解您测试的环境参数
我去查阅了相关的资料和看了您的源码,我还不能下一个结论。
您所实现的是从SAMPLE_COMM_ISP中把需要传入custom_of_run的ctx提取出来,我决定作为传入参数这个ctx应该是没有问题的,但是后面又调用了RKMPI库,RKMPI的内存管理都是基于内存缓存池,我觉得问题应该是内存缓存池和其他用户空间是分开管理的,而aiq无法获取到视频流进行计算 也就是图中“获取3A统计”就出了问题,获取不到有效帧直接传入计算线程打印结果
rkisp_demo的实现流程图如下 其中用V4l2 缓冲块作为获取3A统计的输入,在用户空间上应该可以被aiq访问。
不能下结论的原因是rk_aiq_uapi2并没有公开源码,不能确定内部的实现,比如正常调用RKMPI库时RKISP是怎么通过管道配置到VI上的, 在rkisp_demo中aiq是怎么获取到v4l2 缓冲区的内容的,获取数据返回正确的依据条件是什么等等。我建议不同的模块在测试是否工作正常还是在Rockchip专门提供的demo下进行,没有源码和文档直接混用demo间的api在闭源的开发环境下会有很多无法预测的错误
您所实现的是从SAMPLE_COMM_ISP中把需要传入custom_of_run的ctx提取出来,我决定作为传入参数这个ctx应该是没有问题的,但是后面又调用了RKMPI库,RKMPI的内存管理都是基于内存缓存池,我觉得问题应该是内存缓存池和其他用户空间是分开管理的,而aiq无法获取到视频流进行计算 也就是图中“获取3A统计”就出了问题,获取不到有效帧直接传入计算线程打印结果
rkisp_demo的实现流程图如下 其中用V4l2 缓冲块作为获取3A统计的输入,在用户空间上应该可以被aiq访问。
不能下结论的原因是rk_aiq_uapi2并没有公开源码,不能确定内部的实现,比如正常调用RKMPI库时RKISP是怎么通过管道配置到VI上的, 在rkisp_demo中aiq是怎么获取到v4l2 缓冲区的内容的,获取数据返回正确的依据条件是什么等等。我建议不同的模块在测试是否工作正常还是在Rockchip专门提供的demo下进行,没有源码和文档直接混用demo间的api在闭源的开发环境下会有很多无法预测的错误
这是rk_aiq的uapi2部分源码,来自其他Rockchip芯片的SDK, 这里仅提供参考,可能在版本或者适配芯片上有差异
- Attachments
-
-
uAPIv2.7z (107.88 KiB)Downloaded 85 times
-