qtioverlay

Draw overlay on NV12/NV21.

Overview

高通的qtioverlay插件可以在YUV(NV12/NV21)图片帧上绘制RGB和YUV,它支持在YUV帧顶层绘制静态纹理图,回归边框,用户自定义文本和日期/时间,qtioverlay具备以下特性:

  • YUV帧可以来自于摄像头视频流或视频文件的解码;

  • 绘制信息可以是机器学习算法输出的Metadata或直接使用GST Propertie来设置的用户自定义文本;

  • Machine Learning Metadata支持检测、分割、分类和拍照定位等算法输出;

    • 一个metadata关联一个overlay item,支持同时绘制多个不同类型overlay item,metadata的个数没有上限,但数量过多会影响性能;

    • 检测算法的metadata数据结构被设计为bbox和label信息;

    • 分类算法的metada数据结构则仅有label和confidence信息(分类结果通常作为检测结果的一部分,即分类的数据结构为检测的数据结构结构体的一个成员);

  • 支持overlay图片的格式为RGBA;

  • 日期/时间和用户自定义文本内容只能通过设置GST Properties的方式来实现,也即这部分信息将和GST Pipeline绑定,一旦pipeline初始化完毕就无法改变。

qtioverlay插件源码地址:qtioverlay

例程地址:qtioverlay-example

Properties

  • name:qtioverlay的name。

  • qos:时间服务质量。

  • overlay-text:用户自定义文本字符串。

  • overlay-data:overlay日期字符串。

  • bbox-color:overlay ML Metadata回归边框的颜色,RGBA(32位无符号数),默认为0x0000CCFF。

  • date-color:overlay日期颜色,RGBA(32位无符号数),默认为0xFF0000FF。

  • text-color:用户自定义文本颜色,RGBA(32位无符号数),默认为0xFFFF00FF。

  • pose-color:overlay ML Metadata PostNet Type的颜色,RGBA(32位无符号数),默认为0x33CC00FF。

以上都是qtioverlay的GST Properties,一旦设置就与pipeline绑定,无法动态修改,并不适合开发使用,因此在开发中更多使用的是ML Metadata来完成绘制信息的传递。

Develop Guide

qtioverlay所依赖的库主要有两个qtimlmetaqmmf_overlaylibqtimlmeta.so为ML Metadata的实现,libqmmf_overlay.so为绘制的实现。

qtimlmeta

  • GstMLDetactionMeta

  • GstClassificationResult

  • gst_buffer_add_detection_meta()

  • 资源回收

GstMeta将随着GstBuffer的释放而自动释放,因此这部分资源的释放不需要用户来手动操作。

ML Metadata

qtiverlay

gst_overlay_apply_bbox_item中最终使用gstoverlay->overlay的成员函数CreateOverlayItemEnableOverlayItem进行绘图,这部分的实现在qmmf_overlay中的

增加meta-color属性

_GstMLDetectionMeta结构体中增加一个guint类型的32位无符号整型变量bbox_color用于表示qtipverlay颜色所需的RGBA值,在gstqtioverlay.cc也即qtioverlay的源码中增加一个gboolean类型的meta-color变量用于判断是使用bbox-color属性设置的固定边框颜色还是从ML Metadata中取颜色值动态改变边框颜色。

增加meta-thick属性

在gstoverlay中gst_overlay_apply_ml_bbox_item调用gst_overlay_apply_bbox_item完成bbox item的绘制,:

可以看到在整个流程中流没有关于绘制线条thick有关的参数,而最终的绘制工作交给了C2D来完成:

这部分使用了动态库的显示调用,高通并没有开源C2D的源码,我在整个overlay相关的源码中都没有找到thick相关的参数,我原以为会开发一个宏定义,但是并没有,因此这部分调查告一段落。

libqmmf_overlay.so的实现依赖于C2D(GPU加速),这部分我并未深入了解过,因此不做过多介绍。

后记:关于qtioverlay的介绍至此就结束了,插件或多或少有一些缺陷,开发也不可避免要妥协。好在尝试解决问题的过程始终是有趣的,但是还是希望高通能够更好的维护和完善自家平台的工具,让开发者有更好的开发体验。

Last updated

Was this helpful?