输出结果发送
- 构建输出数据结构。
插件之间传递的数据统一采用protobuf定义,根据API中提供的protobuf数据格式,选择合适的结构,具体的数据格式参考“Metadata”章节和“Metadata proto文件”章节。无法匹配时,用户可自定义结构,但是必须遵守以下规则。
数据结构内部为单个repeated变量,如下所示:message CustomDataList // 用户自定义数据类型。 { repeated CustomData dataVec = 1; } message CustomData // 用户自定义数据内容。 { repeated MxpiMetaHeader headerVec = 1; // 用于描述数据之间的依赖关系,便于序列化插件组装数据。 xxx; // 用户自定义区域。 }
- 发送数据。
用户组装输出数据结构,然后通过调用“AddProtoMetadata()”,将结果挂载至获取输入时对应的Buffer,最后通过“SendData()”接口发送数据。
MxpiMetadataManager mxpiMetadataManager(buffer); mxpiMetadataManager.AddProtoMetadata(metadataKey, std::static_pointer_cast<void>(customDataListSptr)); // customDataListSptr 为用户自定义数据结构的智能指针。 SendData(0, buffer); // 0为输出端口编号,根据具体情况修改。
- 异常输出。当业务逻辑出现异常时,同样需要将结果传递给下游,通过如下方式实现:
- 添加错误信息。
将错误码和错误信息组装到MxpiErrorInfo数据结构中,并将错误信息添加到元数据(metadata)中。
MxpiErrorInfo mxpiErrorInfo; mxpiErrorInfo.ret = ErrorCode; // “ErrorCode”为对应的错误码。 mxpiErrorInfo.errorInfo = "Image resize, failed."; MxpiMetadataManager mxpiMetadataManager(buffer); mxpiMetadataManager.AddErrorInfo(pluginName, mxpiErrorInfo);
- 发送错误信息。
SendData(0, buffer); // 上一步操作已将错误信息挂载至buffer,执行该操作即可将错误信息发给下游插件。
- 添加错误信息。
父主题: (可选)插件开发