1、函数的输出型参数用&修饰。
经典案例 swap(a,b),如果把b当做输出型参数,这个函数不会改变b。因为值传递深拷贝。参考我博客c++笔记2(参考learncpp.com) - 夕西行 - 博客园 (cnblogs.com)的1部分标签内容。
我在相机帧转为QImage格式时犯了这个错误。
在其他地方调用
这个img是空的,因为对象img本身不会被改变。
2、图像格式转换为QImage后,emit这个QImage可能出现的问题
情况一:转换后直接emit
情况二:先调用封装的转换函数,再emit
这种情况可能出现 QPixmap::fromImage(img)访问冲突,在转换函数内用深拷贝解决。
OutImage = QImage(buffer, width, height, QImage::Format_RGB888).copy();
3、成功采集的帧指针建议深拷贝后使用。
帧指针指向的空间持续被相机清空、赋值。当采集成功时,如果让自定义的指针 m_ptr_success 指向这个成功采集的帧指针。那么在使用 m_ptr_success 的过程中可能造成内存读写冲突。
当然,也可以通过加锁方式解决。
4、推荐使用官方相机SDK中的回调函数
当然也可以自己创建线程,将拉流死循环放在线程中执行。
5、connect不应该放在频繁触发函数中
如,按钮继续、暂停来回频繁按下。
可以打开相机时connect,关闭相机时disconnect。