插件之间传递的数据统一采用protobuf定义,根据API中提供的protobuf数据格式,选择合适的结构,具体的数据格式参考“Metadata”章节和“Metadata proto文件”章节。无法匹配时,用户可自定义结构,但是必须遵守以下规则。
1 2 3 4 5 6 7 8 9 | message CustomDataList // 用户自定义数据类型。 { repeated CustomData dataVec = 1; } message CustomData // 用户自定义数据内容。 { repeated MxpiMetaHeader headerVec = 1; // 用于描述数据之间的依赖关系,便于序列化插件组装数据。 xxx; // 用户自定义区域。 } |
用户组装输出数据结构,然后通过调用“AddProtoMetadata()”,将结果挂载至获取输入时对应的Buffer,最后通过“SendData()”接口发送数据。
1 2 3 | MxpiMetadataManager mxpiMetadataManager(buffer); mxpiMetadataManager.AddProtoMetadata(metadataKey, std::static_pointer_cast<void>(customDataListSptr)); // customDataListSptr 为用户自定义数据结构的智能指针。 SendData(0, buffer); // 0为输出端口编号,根据具体情况修改。 |
将错误码和错误信息组装到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); |
1 | SendData(0, buffer); // 上一步操作已将错误信息挂载至buffer,执行该操作即可将错误信息发给下游插件。 |