调试camera的时候,有些时候LCD或许还不能正常工作,或则UI尚未完成,而我们却想看到camera拍摄到的图像,这时就可以借助Trace32的强大功能。当然,前提是你可以启动camera。^_^
首先,我们要确保sensor已经正常工作了,可以把断点设置在OEMCamera_CameraLayerCB()这个函数,它是一个总体的回调函数,包括收到帧事件,所以如果此函数断点反复的被执行到,那么说明sensor有数据(帧)传上来,如图:
在断点被执行到后,打开"Stack ”,查看函数的调用关系,可以看到camera_process_qdsp_msg()里面的一个参数为buf = 0x108b3af8,这个就是存放预览图片buffer的地址,得到这个buffer以后就可以在TRACE32里输入如下命令: data.image 0x108b3af8 128. 160. /rgb565le,就可以看到buffer中的预览图像:
在使用这条命令时,有几点需要说明的。1.我们在camera_process_qdsp_msg()里面获得的buffer的地址可能前一次得到的与后一次得到的不同,我们直接用TRACE32查看这2个地址会发现,其中一个的内容是固定的,而另外一个是一直在跳变的,即一个是保存断点瞬间的预览图像,而另外一个是实时变化的图像。所以如果我们在输入命令的参数里面设置为变化的地址,那么我们在PC上就可以看到sensor移动时候的实时效果了。
2. 还有一点就是输入命令时候指定的image的大小一定要跟我们设置的预览大小一致,也就是跟LCD上显示的大小一致,比如前面调试的项目用的LCD是160*128,因此参数也必须是128. 160. ,否则就看不到完整的图像。
首先,我们要确保sensor已经正常工作了,可以把断点设置在OEMCamera_CameraLayerCB()这个函数,它是一个总体的回调函数,包括收到帧事件,所以如果此函数断点反复的被执行到,那么说明sensor有数据(帧)传上来,如图:
在断点被执行到后,打开"Stack ”,查看函数的调用关系,可以看到camera_process_qdsp_msg()里面的一个参数为buf = 0x108b3af8,这个就是存放预览图片buffer的地址,得到这个buffer以后就可以在TRACE32里输入如下命令: data.image 0x108b3af8 128. 160. /rgb565le,就可以看到buffer中的预览图像:
在使用这条命令时,有几点需要说明的。1.我们在camera_process_qdsp_msg()里面获得的buffer的地址可能前一次得到的与后一次得到的不同,我们直接用TRACE32查看这2个地址会发现,其中一个的内容是固定的,而另外一个是一直在跳变的,即一个是保存断点瞬间的预览图像,而另外一个是实时变化的图像。所以如果我们在输入命令的参数里面设置为变化的地址,那么我们在PC上就可以看到sensor移动时候的实时效果了。
2. 还有一点就是输入命令时候指定的image的大小一定要跟我们设置的预览大小一致,也就是跟LCD上显示的大小一致,比如前面调试的项目用的LCD是160*128,因此参数也必须是128. 160. ,否则就看不到完整的图像。