输出结果发送

  1. 构建输出数据结构。

    插件之间传递的数据统一采用protobuf定义,根据API中提供的protobuf数据格式,选择合适的结构,具体的数据格式参考Metadata”章节Metadata proto文件”章节。无法匹配时,用户可自定义结构,但是必须遵守以下规则。

    数据结构内部为单个repeated变量,如下所示:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    message CustomDataList                      // 用户自定义数据类型。
    {    
        repeated CustomData dataVec = 1;
    }
    message CustomData                          // 用户自定义数据内容。
    {    
        repeated MxpiMetaHeader headerVec = 1;  // 用于描述数据之间的依赖关系,便于序列化插件组装数据。
        xxx;                                    // 用户自定义区域。
    }
    

    如需创建自定义插件元数据,添加新的数据结构,请参见创建自定义插件元数据

  2. 发送数据。

    用户组装输出数据结构,然后通过调用“AddProtoMetadata()”,将结果挂载至获取输入时对应的Buffer,最后通过“SendData()”接口发送数据。

    1
    2
    3
    MxpiMetadataManager mxpiMetadataManager(buffer);
    mxpiMetadataManager.AddProtoMetadata(metadataKey, std::static_pointer_cast<void>(customDataListSptr));   // customDataListSptr 为用户自定义数据结构的智能指针。
    SendData(0, buffer);                           // 0为输出端口编号,根据具体情况修改。
    

  3. 异常输出。

    当业务逻辑出现异常时,同样需要将结果传递给下游,通过如下方式实现:
    1. 添加错误信息。

      将错误码和错误信息组装到MxpiErrorInfo数据结构中,并将错误信息添加到元数据(metadata)中。

      1
      2
      3
      4
      5
      MxpiErrorInfo mxpiErrorInfo;
      mxpiErrorInfo.ret = ErrorCode;              // “ErrorCode”为对应的错误码。
      mxpiErrorInfo.errorInfo = "Image resize, failed.";
      MxpiMetadataManager mxpiMetadataManager(buffer);
      mxpiMetadataManager.AddErrorInfo(pluginName, mxpiErrorInfo);
      
    2. 发送错误信息。
      1
      SendData(0, buffer);                        // 上一步操作已将错误信息挂载至buffer,执行该操作即可将错误信息发给下游插件。