houxiao
2017-07-10 d9125b1f5e3bfd1c657d75c4ef812f1202dc406d
proto support st_track_id

git-svn-id: http://192.168.1.226/svn/proxy@693 454eff88-639b-444f-9e54-f578c98de674
8个文件已修改
534 ■■■■■ 已修改文件
FaceServer/PbFaceList 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FaceServer/PbFaceList.pb.cc 288 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FaceServer/PbFaceList.pb.h 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FaceServer/STFaceCache.cpp 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FaceServer/STFaceCache.h 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FaceServer/face_daemon_proto.h 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FaceServer/main_face_daemon.cpp 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FaceServer/proto_hton_ntoh.cpp 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FaceServer/PbFaceList
@@ -8,7 +8,7 @@
    required uint32 image_count = 2;
    optional uint32 src_width = 3;
    optional uint32 src_height = 4;
    message FaceListImage
    {
        enum ImageType
@@ -43,14 +43,15 @@
        }
        
        required uint32 idx = 1;
        required uint32 size = 2;
        required ImageType type = 3 [default = MBFT_Y8];
        required uint32 width = 4;
        required uint32 height = 5;
        optional uint32 top_left_x = 6;
        optional uint32 top_left_y = 7;
        repeated bytes img = 8;
        required uint32 st_track_id = 2;
        required uint32 size = 3;
        required ImageType type = 4 [default = MBFT_Y8];
        required uint32 width = 5;
        required uint32 height = 6;
        optional uint32 top_left_x = 7;
        optional uint32 top_left_y = 8;
        repeated bytes img = 9;
    }
    
    repeated FaceListImage images = 5;
FaceServer/PbFaceList.pb.cc
@@ -37,6 +37,7 @@
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PbFaceList_FaceListImage, idx_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PbFaceList_FaceListImage, st_track_id_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PbFaceList_FaceListImage, size_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PbFaceList_FaceListImage, type_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PbFaceList_FaceListImage, width_),
@@ -46,11 +47,12 @@
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PbFaceList_FaceListImage, img_),
  0,
  1,
  6,
  2,
  7,
  3,
  4,
  5,
  6,
  ~0u,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PbFaceList, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PbFaceList, _internal_metadata_),
@@ -69,8 +71,8 @@
};
static const ::google::protobuf::internal::MigrationSchema schemas[] = {
  { 0, 12, sizeof(PbFaceList_FaceListImage)},
  { 20, 29, sizeof(PbFaceList)},
  { 0, 13, sizeof(PbFaceList_FaceListImage)},
  { 22, 31, sizeof(PbFaceList)},
};
static ::google::protobuf::Message const * const file_default_instances[] = {
@@ -123,26 +125,27 @@
void AddDescriptorsImpl() {
  InitDefaults();
  static const char descriptor[] = {
      "\n\nPbFaceList\"\227\005\n\nPbFaceList\022\027\n\005magic\030\001 \002"
      "\n\nPbFaceList\"\254\005\n\nPbFaceList\022\027\n\005magic\030\001 \002"
      "(\r:\01011706629\022\023\n\013image_count\030\002 \002(\r\022\021\n\tsrc"
      "_width\030\003 \001(\r\022\022\n\nsrc_height\030\004 \001(\r\022)\n\006imag"
      "es\030\005 \003(\0132\031.PbFaceList.FaceListImage\032\210\004\n\r"
      "FaceListImage\022\013\n\003idx\030\001 \002(\r\022\014\n\004size\030\002 \002(\r"
      "\022:\n\004type\030\003 \002(\0162#.PbFaceList.FaceListImag"
      "e.ImageType:\007MBFT_Y8\022\r\n\005width\030\004 \002(\r\022\016\n\006h"
      "eight\030\005 \002(\r\022\022\n\ntop_left_x\030\006 \001(\r\022\022\n\ntop_l"
      "eft_y\030\007 \001(\r\022\013\n\003img\030\010 \003(\014\"\313\002\n\tImageType\022\014"
      "\n\010MBFT_SDP\020\001\022\r\n\tMBFT_FMTP\020\002\022\016\n\nMBFT_INDE"
      "X\020\003\022\024\n\020MBFT_PTR_AVFRAME\020\004\022\022\n\016MBFT_H264_N"
      "ALU\020\005\022\026\n\022MBFT_H264_NALU_AUX\020\006\022\r\n\tMBFT_JP"
      "EG\020\007\022\014\n\010MBFT_YUV\020\010\022\013\n\007MBFT_Y8\020\t\022\017\n\013MBFT_"
      "YUV420\020\n\022\r\n\tMBFT_NV12\020\013\022\014\n\010MBFT_RGB\020\014\022\017\n"
      "\013MBFT_RGB888\020\r\022\017\n\013MBFT_RGB565\020\016\022\r\n\tMBFT_"
      "RGBA\020\017\022\r\n\tMBFT_BGRA\020\020\022\021\n\rMBFT_BGRA8888\020\021"
      "\022\021\n\rMBFT_ABGR8888\020\022\022\021\n\rMBFT_ARGB8888\020\023"
      "es\030\005 \003(\0132\031.PbFaceList.FaceListImage\032\235\004\n\r"
      "FaceListImage\022\013\n\003idx\030\001 \002(\r\022\023\n\013st_track_i"
      "d\030\002 \002(\r\022\014\n\004size\030\003 \002(\r\022:\n\004type\030\004 \002(\0162#.Pb"
      "FaceList.FaceListImage.ImageType:\007MBFT_Y"
      "8\022\r\n\005width\030\005 \002(\r\022\016\n\006height\030\006 \002(\r\022\022\n\ntop_"
      "left_x\030\007 \001(\r\022\022\n\ntop_left_y\030\010 \001(\r\022\013\n\003img\030"
      "\t \003(\014\"\313\002\n\tImageType\022\014\n\010MBFT_SDP\020\001\022\r\n\tMBF"
      "T_FMTP\020\002\022\016\n\nMBFT_INDEX\020\003\022\024\n\020MBFT_PTR_AVF"
      "RAME\020\004\022\022\n\016MBFT_H264_NALU\020\005\022\026\n\022MBFT_H264_"
      "NALU_AUX\020\006\022\r\n\tMBFT_JPEG\020\007\022\014\n\010MBFT_YUV\020\010\022"
      "\013\n\007MBFT_Y8\020\t\022\017\n\013MBFT_YUV420\020\n\022\r\n\tMBFT_NV"
      "12\020\013\022\014\n\010MBFT_RGB\020\014\022\017\n\013MBFT_RGB888\020\r\022\017\n\013M"
      "BFT_RGB565\020\016\022\r\n\tMBFT_RGBA\020\017\022\r\n\tMBFT_BGRA"
      "\020\020\022\021\n\rMBFT_BGRA8888\020\021\022\021\n\rMBFT_ABGR8888\020\022"
      "\022\021\n\rMBFT_ARGB8888\020\023"
  };
  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
      descriptor, 678);
      descriptor, 699);
  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
    "PbFaceList", &protobuf_RegisterTypes);
  ::google::protobuf::internal::OnShutdown(&TableStruct::Shutdown);
@@ -221,6 +224,7 @@
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int PbFaceList_FaceListImage::kIdxFieldNumber;
const int PbFaceList_FaceListImage::kStTrackIdFieldNumber;
const int PbFaceList_FaceListImage::kSizeFieldNumber;
const int PbFaceList_FaceListImage::kTypeFieldNumber;
const int PbFaceList_FaceListImage::kWidthFieldNumber;
@@ -292,7 +296,7 @@
void PbFaceList_FaceListImage::Clear() {
// @@protoc_insertion_point(message_clear_start:PbFaceList.FaceListImage)
  img_.Clear();
  if (_has_bits_[0 / 32] & 127u) {
  if (_has_bits_[0 / 32] & 255u) {
    ::memset(&idx_, 0, reinterpret_cast<char*>(&top_left_y_) -
      reinterpret_cast<char*>(&idx_) + sizeof(top_left_y_));
    type_ = 9;
@@ -325,10 +329,24 @@
        break;
      }
      // required uint32 size = 2;
      // required uint32 st_track_id = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(16u)) {
          set_has_st_track_id();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 input, &st_track_id_)));
        } else {
          goto handle_unusual;
        }
        break;
      }
      // required uint32 size = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(24u)) {
          set_has_size();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
@@ -339,10 +357,10 @@
        break;
      }
      // required .PbFaceList.FaceListImage.ImageType type = 3 [default = MBFT_Y8];
      case 3: {
      // required .PbFaceList.FaceListImage.ImageType type = 4 [default = MBFT_Y8];
      case 4: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(24u)) {
            static_cast< ::google::protobuf::uint8>(32u)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
@@ -350,7 +368,7 @@
          if (::PbFaceList_FaceListImage_ImageType_IsValid(value)) {
            set_type(static_cast< ::PbFaceList_FaceListImage_ImageType >(value));
          } else {
            mutable_unknown_fields()->AddVarint(3, value);
            mutable_unknown_fields()->AddVarint(4, value);
          }
        } else {
          goto handle_unusual;
@@ -358,10 +376,10 @@
        break;
      }
      // required uint32 width = 4;
      case 4: {
      // required uint32 width = 5;
      case 5: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(32u)) {
            static_cast< ::google::protobuf::uint8>(40u)) {
          set_has_width();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
@@ -372,10 +390,10 @@
        break;
      }
      // required uint32 height = 5;
      case 5: {
      // required uint32 height = 6;
      case 6: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(40u)) {
            static_cast< ::google::protobuf::uint8>(48u)) {
          set_has_height();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
@@ -386,10 +404,10 @@
        break;
      }
      // optional uint32 top_left_x = 6;
      case 6: {
      // optional uint32 top_left_x = 7;
      case 7: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(48u)) {
            static_cast< ::google::protobuf::uint8>(56u)) {
          set_has_top_left_x();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
@@ -400,10 +418,10 @@
        break;
      }
      // optional uint32 top_left_y = 7;
      case 7: {
      // optional uint32 top_left_y = 8;
      case 8: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(56u)) {
            static_cast< ::google::protobuf::uint8>(64u)) {
          set_has_top_left_y();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
@@ -414,10 +432,10 @@
        break;
      }
      // repeated bytes img = 8;
      case 8: {
      // repeated bytes img = 9;
      case 9: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(66u)) {
            static_cast< ::google::protobuf::uint8>(74u)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                input, this->add_img()));
        } else {
@@ -456,41 +474,46 @@
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(1, this->idx(), output);
  }
  // required uint32 size = 2;
  if (has_size()) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(2, this->size(), output);
  // required uint32 st_track_id = 2;
  if (has_st_track_id()) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(2, this->st_track_id(), output);
  }
  // required .PbFaceList.FaceListImage.ImageType type = 3 [default = MBFT_Y8];
  // required uint32 size = 3;
  if (has_size()) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(3, this->size(), output);
  }
  // required .PbFaceList.FaceListImage.ImageType type = 4 [default = MBFT_Y8];
  if (has_type()) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      3, this->type(), output);
      4, this->type(), output);
  }
  // required uint32 width = 4;
  // required uint32 width = 5;
  if (has_width()) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(4, this->width(), output);
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(5, this->width(), output);
  }
  // required uint32 height = 5;
  // required uint32 height = 6;
  if (has_height()) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(5, this->height(), output);
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(6, this->height(), output);
  }
  // optional uint32 top_left_x = 6;
  // optional uint32 top_left_x = 7;
  if (has_top_left_x()) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(6, this->top_left_x(), output);
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(7, this->top_left_x(), output);
  }
  // optional uint32 top_left_y = 7;
  // optional uint32 top_left_y = 8;
  if (has_top_left_y()) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(7, this->top_left_y(), output);
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(8, this->top_left_y(), output);
  }
  // repeated bytes img = 8;
  // repeated bytes img = 9;
  for (int i = 0, n = this->img_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteBytes(
      8, this->img(i), output);
      9, this->img(i), output);
  }
  if (_internal_metadata_.have_unknown_fields()) {
@@ -509,41 +532,46 @@
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(1, this->idx(), target);
  }
  // required uint32 size = 2;
  if (has_size()) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(2, this->size(), target);
  // required uint32 st_track_id = 2;
  if (has_st_track_id()) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(2, this->st_track_id(), target);
  }
  // required .PbFaceList.FaceListImage.ImageType type = 3 [default = MBFT_Y8];
  // required uint32 size = 3;
  if (has_size()) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(3, this->size(), target);
  }
  // required .PbFaceList.FaceListImage.ImageType type = 4 [default = MBFT_Y8];
  if (has_type()) {
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
      3, this->type(), target);
      4, this->type(), target);
  }
  // required uint32 width = 4;
  // required uint32 width = 5;
  if (has_width()) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(4, this->width(), target);
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(5, this->width(), target);
  }
  // required uint32 height = 5;
  // required uint32 height = 6;
  if (has_height()) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(5, this->height(), target);
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(6, this->height(), target);
  }
  // optional uint32 top_left_x = 6;
  // optional uint32 top_left_x = 7;
  if (has_top_left_x()) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(6, this->top_left_x(), target);
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(7, this->top_left_x(), target);
  }
  // optional uint32 top_left_y = 7;
  // optional uint32 top_left_y = 8;
  if (has_top_left_y()) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(7, this->top_left_y(), target);
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(8, this->top_left_y(), target);
  }
  // repeated bytes img = 8;
  // repeated bytes img = 9;
  for (int i = 0, n = this->img_size(); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      WriteBytesToArray(8, this->img(i), target);
      WriteBytesToArray(9, this->img(i), target);
  }
  if (_internal_metadata_.have_unknown_fields()) {
@@ -565,29 +593,36 @@
        this->idx());
  }
  if (has_st_track_id()) {
    // required uint32 st_track_id = 2;
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::UInt32Size(
        this->st_track_id());
  }
  if (has_size()) {
    // required uint32 size = 2;
    // required uint32 size = 3;
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::UInt32Size(
        this->size());
  }
  if (has_width()) {
    // required uint32 width = 4;
    // required uint32 width = 5;
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::UInt32Size(
        this->width());
  }
  if (has_height()) {
    // required uint32 height = 5;
    // required uint32 height = 6;
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::UInt32Size(
        this->height());
  }
  if (has_type()) {
    // required .PbFaceList.FaceListImage.ImageType type = 3 [default = MBFT_Y8];
    // required .PbFaceList.FaceListImage.ImageType type = 4 [default = MBFT_Y8];
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::EnumSize(this->type());
  }
@@ -603,35 +638,40 @@
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        unknown_fields());
  }
  if (((_has_bits_[0] & 0x0000004f) ^ 0x0000004f) == 0) {  // All required fields are present.
  if (((_has_bits_[0] & 0x0000009f) ^ 0x0000009f) == 0) {  // All required fields are present.
    // required uint32 idx = 1;
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::UInt32Size(
        this->idx());
    // required uint32 size = 2;
    // required uint32 st_track_id = 2;
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::UInt32Size(
        this->st_track_id());
    // required uint32 size = 3;
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::UInt32Size(
        this->size());
    // required uint32 width = 4;
    // required uint32 width = 5;
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::UInt32Size(
        this->width());
    // required uint32 height = 5;
    // required uint32 height = 6;
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::UInt32Size(
        this->height());
    // required .PbFaceList.FaceListImage.ImageType type = 3 [default = MBFT_Y8];
    // required .PbFaceList.FaceListImage.ImageType type = 4 [default = MBFT_Y8];
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::EnumSize(this->type());
  } else {
    total_size += RequiredFieldsByteSizeFallback();
  }
  // repeated bytes img = 8;
  // repeated bytes img = 9;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->img_size());
  for (int i = 0, n = this->img_size(); i < n; i++) {
@@ -639,15 +679,15 @@
      this->img(i));
  }
  if (_has_bits_[0 / 32] & 48u) {
    // optional uint32 top_left_x = 6;
  if (_has_bits_[0 / 32] & 96u) {
    // optional uint32 top_left_x = 7;
    if (has_top_left_x()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::UInt32Size(
          this->top_left_x());
    }
    // optional uint32 top_left_y = 7;
    // optional uint32 top_left_y = 8;
    if (has_top_left_y()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::UInt32Size(
@@ -682,9 +722,12 @@
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  img_.MergeFrom(from.img_);
  if (from._has_bits_[0 / 32] & 127u) {
  if (from._has_bits_[0 / 32] & 255u) {
    if (from.has_idx()) {
      set_idx(from.idx());
    }
    if (from.has_st_track_id()) {
      set_st_track_id(from.st_track_id());
    }
    if (from.has_size()) {
      set_size(from.size());
@@ -722,7 +765,7 @@
}
bool PbFaceList_FaceListImage::IsInitialized() const {
  if ((_has_bits_[0] & 0x0000004f) != 0x0000004f) return false;
  if ((_has_bits_[0] & 0x0000009f) != 0x0000009f) return false;
  return true;
}
@@ -733,6 +776,7 @@
void PbFaceList_FaceListImage::InternalSwap(PbFaceList_FaceListImage* other) {
  img_.UnsafeArenaSwap(&other->img_);
  std::swap(idx_, other->idx_);
  std::swap(st_track_id_, other->st_track_id_);
  std::swap(size_, other->size_);
  std::swap(width_, other->width_);
  std::swap(height_, other->height_);
@@ -776,15 +820,39 @@
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.idx)
}
// required uint32 size = 2;
bool PbFaceList_FaceListImage::has_size() const {
// required uint32 st_track_id = 2;
bool PbFaceList_FaceListImage::has_st_track_id() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
void PbFaceList_FaceListImage::set_has_size() {
void PbFaceList_FaceListImage::set_has_st_track_id() {
  _has_bits_[0] |= 0x00000002u;
}
void PbFaceList_FaceListImage::clear_has_size() {
void PbFaceList_FaceListImage::clear_has_st_track_id() {
  _has_bits_[0] &= ~0x00000002u;
}
void PbFaceList_FaceListImage::clear_st_track_id() {
  st_track_id_ = 0u;
  clear_has_st_track_id();
}
::google::protobuf::uint32 PbFaceList_FaceListImage::st_track_id() const {
  // @@protoc_insertion_point(field_get:PbFaceList.FaceListImage.st_track_id)
  return st_track_id_;
}
void PbFaceList_FaceListImage::set_st_track_id(::google::protobuf::uint32 value) {
  set_has_st_track_id();
  st_track_id_ = value;
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.st_track_id)
}
// required uint32 size = 3;
bool PbFaceList_FaceListImage::has_size() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
void PbFaceList_FaceListImage::set_has_size() {
  _has_bits_[0] |= 0x00000004u;
}
void PbFaceList_FaceListImage::clear_has_size() {
  _has_bits_[0] &= ~0x00000004u;
}
void PbFaceList_FaceListImage::clear_size() {
  size_ = 0u;
@@ -800,15 +868,15 @@
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.size)
}
// required .PbFaceList.FaceListImage.ImageType type = 3 [default = MBFT_Y8];
// required .PbFaceList.FaceListImage.ImageType type = 4 [default = MBFT_Y8];
bool PbFaceList_FaceListImage::has_type() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
  return (_has_bits_[0] & 0x00000080u) != 0;
}
void PbFaceList_FaceListImage::set_has_type() {
  _has_bits_[0] |= 0x00000040u;
  _has_bits_[0] |= 0x00000080u;
}
void PbFaceList_FaceListImage::clear_has_type() {
  _has_bits_[0] &= ~0x00000040u;
  _has_bits_[0] &= ~0x00000080u;
}
void PbFaceList_FaceListImage::clear_type() {
  type_ = 9;
@@ -825,15 +893,15 @@
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.type)
}
// required uint32 width = 4;
// required uint32 width = 5;
bool PbFaceList_FaceListImage::has_width() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
  return (_has_bits_[0] & 0x00000008u) != 0;
}
void PbFaceList_FaceListImage::set_has_width() {
  _has_bits_[0] |= 0x00000004u;
  _has_bits_[0] |= 0x00000008u;
}
void PbFaceList_FaceListImage::clear_has_width() {
  _has_bits_[0] &= ~0x00000004u;
  _has_bits_[0] &= ~0x00000008u;
}
void PbFaceList_FaceListImage::clear_width() {
  width_ = 0u;
@@ -849,15 +917,15 @@
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.width)
}
// required uint32 height = 5;
// required uint32 height = 6;
bool PbFaceList_FaceListImage::has_height() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
  return (_has_bits_[0] & 0x00000010u) != 0;
}
void PbFaceList_FaceListImage::set_has_height() {
  _has_bits_[0] |= 0x00000008u;
  _has_bits_[0] |= 0x00000010u;
}
void PbFaceList_FaceListImage::clear_has_height() {
  _has_bits_[0] &= ~0x00000008u;
  _has_bits_[0] &= ~0x00000010u;
}
void PbFaceList_FaceListImage::clear_height() {
  height_ = 0u;
@@ -873,15 +941,15 @@
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.height)
}
// optional uint32 top_left_x = 6;
// optional uint32 top_left_x = 7;
bool PbFaceList_FaceListImage::has_top_left_x() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
  return (_has_bits_[0] & 0x00000020u) != 0;
}
void PbFaceList_FaceListImage::set_has_top_left_x() {
  _has_bits_[0] |= 0x00000010u;
  _has_bits_[0] |= 0x00000020u;
}
void PbFaceList_FaceListImage::clear_has_top_left_x() {
  _has_bits_[0] &= ~0x00000010u;
  _has_bits_[0] &= ~0x00000020u;
}
void PbFaceList_FaceListImage::clear_top_left_x() {
  top_left_x_ = 0u;
@@ -897,15 +965,15 @@
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.top_left_x)
}
// optional uint32 top_left_y = 7;
// optional uint32 top_left_y = 8;
bool PbFaceList_FaceListImage::has_top_left_y() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
  return (_has_bits_[0] & 0x00000040u) != 0;
}
void PbFaceList_FaceListImage::set_has_top_left_y() {
  _has_bits_[0] |= 0x00000020u;
  _has_bits_[0] |= 0x00000040u;
}
void PbFaceList_FaceListImage::clear_has_top_left_y() {
  _has_bits_[0] &= ~0x00000020u;
  _has_bits_[0] &= ~0x00000040u;
}
void PbFaceList_FaceListImage::clear_top_left_y() {
  top_left_y_ = 0u;
@@ -921,7 +989,7 @@
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.top_left_y)
}
// repeated bytes img = 8;
// repeated bytes img = 9;
int PbFaceList_FaceListImage::img_size() const {
  return img_.size();
}
FaceServer/PbFaceList.pb.h
@@ -221,10 +221,10 @@
  // accessors -------------------------------------------------------
  // repeated bytes img = 8;
  // repeated bytes img = 9;
  int img_size() const;
  void clear_img();
  static const int kImgFieldNumber = 8;
  static const int kImgFieldNumber = 9;
  const ::std::string& img(int index) const;
  ::std::string* mutable_img(int index);
  void set_img(int index, const ::std::string& value);
@@ -250,45 +250,52 @@
  ::google::protobuf::uint32 idx() const;
  void set_idx(::google::protobuf::uint32 value);
  // required uint32 size = 2;
  // required uint32 st_track_id = 2;
  bool has_st_track_id() const;
  void clear_st_track_id();
  static const int kStTrackIdFieldNumber = 2;
  ::google::protobuf::uint32 st_track_id() const;
  void set_st_track_id(::google::protobuf::uint32 value);
  // required uint32 size = 3;
  bool has_size() const;
  void clear_size();
  static const int kSizeFieldNumber = 2;
  static const int kSizeFieldNumber = 3;
  ::google::protobuf::uint32 size() const;
  void set_size(::google::protobuf::uint32 value);
  // required uint32 width = 4;
  // required uint32 width = 5;
  bool has_width() const;
  void clear_width();
  static const int kWidthFieldNumber = 4;
  static const int kWidthFieldNumber = 5;
  ::google::protobuf::uint32 width() const;
  void set_width(::google::protobuf::uint32 value);
  // required uint32 height = 5;
  // required uint32 height = 6;
  bool has_height() const;
  void clear_height();
  static const int kHeightFieldNumber = 5;
  static const int kHeightFieldNumber = 6;
  ::google::protobuf::uint32 height() const;
  void set_height(::google::protobuf::uint32 value);
  // optional uint32 top_left_x = 6;
  // optional uint32 top_left_x = 7;
  bool has_top_left_x() const;
  void clear_top_left_x();
  static const int kTopLeftXFieldNumber = 6;
  static const int kTopLeftXFieldNumber = 7;
  ::google::protobuf::uint32 top_left_x() const;
  void set_top_left_x(::google::protobuf::uint32 value);
  // optional uint32 top_left_y = 7;
  // optional uint32 top_left_y = 8;
  bool has_top_left_y() const;
  void clear_top_left_y();
  static const int kTopLeftYFieldNumber = 7;
  static const int kTopLeftYFieldNumber = 8;
  ::google::protobuf::uint32 top_left_y() const;
  void set_top_left_y(::google::protobuf::uint32 value);
  // required .PbFaceList.FaceListImage.ImageType type = 3 [default = MBFT_Y8];
  // required .PbFaceList.FaceListImage.ImageType type = 4 [default = MBFT_Y8];
  bool has_type() const;
  void clear_type();
  static const int kTypeFieldNumber = 3;
  static const int kTypeFieldNumber = 4;
  ::PbFaceList_FaceListImage_ImageType type() const;
  void set_type(::PbFaceList_FaceListImage_ImageType value);
@@ -296,6 +303,8 @@
 private:
  void set_has_idx();
  void clear_has_idx();
  void set_has_st_track_id();
  void clear_has_st_track_id();
  void set_has_size();
  void clear_has_size();
  void set_has_type();
@@ -317,6 +326,7 @@
  mutable int _cached_size_;
  ::google::protobuf::RepeatedPtrField< ::std::string> img_;
  ::google::protobuf::uint32 idx_;
  ::google::protobuf::uint32 st_track_id_;
  ::google::protobuf::uint32 size_;
  ::google::protobuf::uint32 width_;
  ::google::protobuf::uint32 height_;
@@ -500,15 +510,39 @@
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.idx)
}
// required uint32 size = 2;
inline bool PbFaceList_FaceListImage::has_size() const {
// required uint32 st_track_id = 2;
inline bool PbFaceList_FaceListImage::has_st_track_id() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void PbFaceList_FaceListImage::set_has_size() {
inline void PbFaceList_FaceListImage::set_has_st_track_id() {
  _has_bits_[0] |= 0x00000002u;
}
inline void PbFaceList_FaceListImage::clear_has_size() {
inline void PbFaceList_FaceListImage::clear_has_st_track_id() {
  _has_bits_[0] &= ~0x00000002u;
}
inline void PbFaceList_FaceListImage::clear_st_track_id() {
  st_track_id_ = 0u;
  clear_has_st_track_id();
}
inline ::google::protobuf::uint32 PbFaceList_FaceListImage::st_track_id() const {
  // @@protoc_insertion_point(field_get:PbFaceList.FaceListImage.st_track_id)
  return st_track_id_;
}
inline void PbFaceList_FaceListImage::set_st_track_id(::google::protobuf::uint32 value) {
  set_has_st_track_id();
  st_track_id_ = value;
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.st_track_id)
}
// required uint32 size = 3;
inline bool PbFaceList_FaceListImage::has_size() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void PbFaceList_FaceListImage::set_has_size() {
  _has_bits_[0] |= 0x00000004u;
}
inline void PbFaceList_FaceListImage::clear_has_size() {
  _has_bits_[0] &= ~0x00000004u;
}
inline void PbFaceList_FaceListImage::clear_size() {
  size_ = 0u;
@@ -524,15 +558,15 @@
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.size)
}
// required .PbFaceList.FaceListImage.ImageType type = 3 [default = MBFT_Y8];
// required .PbFaceList.FaceListImage.ImageType type = 4 [default = MBFT_Y8];
inline bool PbFaceList_FaceListImage::has_type() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
  return (_has_bits_[0] & 0x00000080u) != 0;
}
inline void PbFaceList_FaceListImage::set_has_type() {
  _has_bits_[0] |= 0x00000040u;
  _has_bits_[0] |= 0x00000080u;
}
inline void PbFaceList_FaceListImage::clear_has_type() {
  _has_bits_[0] &= ~0x00000040u;
  _has_bits_[0] &= ~0x00000080u;
}
inline void PbFaceList_FaceListImage::clear_type() {
  type_ = 9;
@@ -549,15 +583,15 @@
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.type)
}
// required uint32 width = 4;
// required uint32 width = 5;
inline bool PbFaceList_FaceListImage::has_width() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void PbFaceList_FaceListImage::set_has_width() {
  _has_bits_[0] |= 0x00000004u;
  _has_bits_[0] |= 0x00000008u;
}
inline void PbFaceList_FaceListImage::clear_has_width() {
  _has_bits_[0] &= ~0x00000004u;
  _has_bits_[0] &= ~0x00000008u;
}
inline void PbFaceList_FaceListImage::clear_width() {
  width_ = 0u;
@@ -573,15 +607,15 @@
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.width)
}
// required uint32 height = 5;
// required uint32 height = 6;
inline bool PbFaceList_FaceListImage::has_height() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void PbFaceList_FaceListImage::set_has_height() {
  _has_bits_[0] |= 0x00000008u;
  _has_bits_[0] |= 0x00000010u;
}
inline void PbFaceList_FaceListImage::clear_has_height() {
  _has_bits_[0] &= ~0x00000008u;
  _has_bits_[0] &= ~0x00000010u;
}
inline void PbFaceList_FaceListImage::clear_height() {
  height_ = 0u;
@@ -597,15 +631,15 @@
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.height)
}
// optional uint32 top_left_x = 6;
// optional uint32 top_left_x = 7;
inline bool PbFaceList_FaceListImage::has_top_left_x() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
  return (_has_bits_[0] & 0x00000020u) != 0;
}
inline void PbFaceList_FaceListImage::set_has_top_left_x() {
  _has_bits_[0] |= 0x00000010u;
  _has_bits_[0] |= 0x00000020u;
}
inline void PbFaceList_FaceListImage::clear_has_top_left_x() {
  _has_bits_[0] &= ~0x00000010u;
  _has_bits_[0] &= ~0x00000020u;
}
inline void PbFaceList_FaceListImage::clear_top_left_x() {
  top_left_x_ = 0u;
@@ -621,15 +655,15 @@
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.top_left_x)
}
// optional uint32 top_left_y = 7;
// optional uint32 top_left_y = 8;
inline bool PbFaceList_FaceListImage::has_top_left_y() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void PbFaceList_FaceListImage::set_has_top_left_y() {
  _has_bits_[0] |= 0x00000020u;
  _has_bits_[0] |= 0x00000040u;
}
inline void PbFaceList_FaceListImage::clear_has_top_left_y() {
  _has_bits_[0] &= ~0x00000020u;
  _has_bits_[0] &= ~0x00000040u;
}
inline void PbFaceList_FaceListImage::clear_top_left_y() {
  top_left_y_ = 0u;
@@ -645,7 +679,7 @@
  // @@protoc_insertion_point(field_set:PbFaceList.FaceListImage.top_left_y)
}
// repeated bytes img = 8;
// repeated bytes img = 9;
inline int PbFaceList_FaceListImage::img_size() const {
  return img_.size();
}
FaceServer/STFaceCache.cpp
@@ -9,12 +9,6 @@
#include "sample_face_search.h"
#include <cv_face.h>
#define FDP_FDR_INVALID FDP_FaceDetectResult(0, 0, 0)
#define ENABLE_AUTO_CREATE_STFACEDB
#define ENABLE_SEARCH_IN_NEGATIVE_DBID
#define ENABLE_SEARCH_IN_NEGATIVE_DBID
#define RESULT_CONFIDENCE 0.70
struct STFaceCacheContext
{
    cv_handle_t handle_verify;
@@ -72,7 +66,7 @@
        handles.handle_db = nullptr;
        dbLoadOK = false;
    }
    std::string db_full_path() const
    {
        if (dbfpath.empty() || dbfname.empty())
@@ -89,7 +83,8 @@
STFaceCache::STFaceCache(const std::string& _stfacedbPath)
    : stfacedbPath(_stfacedbPath), stfaceModels(STFACESDK_BASE "/models"), 
    _dbContext(new stface_ctx_map_t), _cacheContext(new STFaceCacheContext)
    _dbContext(new stface_ctx_map_t), _cacheContext(new STFaceCacheContext),
    tempdbFaceCount(0)
{
    LOG_INFO << "st face db: " << stfacedbPath << LOG_ENDL;
    LOG_INFO << "st face sdk models: " << stfaceModels << LOG_ENDL;
@@ -207,13 +202,22 @@
        return FDP_FDR_INVALID;
    }
    
#ifdef ENABLE_SEARCH_IN_NEGATIVE_DBID
            STFaceImage imgNeg(img);
            imgNeg.db_id = -1;
            return detect(imgNeg);
#else
            return FDP_FDR_INVALID;
#ifdef ENABLE_DETECT_IN_NEGATIVE_DBID
    STFaceImage imgNeg(img);
    FDP_FaceDetectResult res(FDP_FDR_INVALID);
    imgNeg.db_id = STFS_DBID_VISITOR_1;
    res = detect(imgNeg); // #todo optimize extract feature once
    if (res.db_id != STFS_DBID_INVALID)
        return res;
    imgNeg.db_id = STFS_DBID_TEMPDB_1;
    res = detect(imgNeg);
    if (res.db_id != STFS_DBID_INVALID)
        return res;
#endif
    return FDP_FDR_INVALID;
}
FDP_FaceDetectResult STFaceCache::detect(const STFaceImage& img)
@@ -323,6 +327,10 @@
        return FDP_FDR_INVALID;
    }
    
#ifdef ENABLE_ADD_TO_TEMPDB_WHEN_NOT_DETECT
    tempdbFaceCount++;
#endif
    int idx = stface_db_add(ctx.handles, img);
    LOG_INFO << "stface_db_add dbid=" << img.db_id << ", idx=" << idx << LOG_ENDL;
    if (idx <= 1)
@@ -347,7 +355,6 @@
    stface_ctx_map_t& dbContext(*(stface_ctx_map_t*)_dbContext);
    STFaceCacheContext& cacheContext(*(STFaceCacheContext*)_cacheContext);
    for(stface_ctx_map_t::iterator iterCtx = dbContext.begin(); iterCtx != dbContext.end(); ++iterCtx)
    {
        STFaceDBContext& ctx(iterCtx->second);
@@ -416,4 +423,26 @@
    topResult.push_back(FDP_FaceDetectResult(-1, 2, 4));
    topResult.push_back(FDP_FaceDetectResult(1, 6, 5));
    */
}
}
void STFaceCache::delete_db(int dbid)
{
    stface_ctx_map_t& dbContext(*(stface_ctx_map_t*)_dbContext);
    STFaceCacheContext& cacheContext(*(STFaceCacheContext*)_cacheContext);
    stface_ctx_map_t::iterator iterCtx = dbContext.find(dbid);
    if (iterCtx == dbContext.end())
    {
        LOG_WARN << "no dbid=%d" << dbid << LOG_ENDL;
        return;
    }
    STFaceDBContext& ctx(iterCtx->second);
    ctx.close_db();
    char mvDBtoBak[1000];
    sprintf(mvDBtoBak, "cd %s; mv %s %d.bak;", stfacedbPath.c_str(), ctx.db_full_path().c_str(), dbid);
    system(mvDBtoBak);
    dbContext.erase(iterCtx);
}
FaceServer/STFaceCache.h
@@ -4,6 +4,20 @@
#include <string>
#include "face_daemon_proto.h"
#define FDP_FDR_INVALID FDP_FaceDetectResult(STFS_DBID_INVALID, 0, 0)
#define ENABLE_AUTO_CREATE_STFACEDB
#define ENABLE_DETECT_IN_NEGATIVE_DBID
//#define ENABLE_ADD_TO_TEMPDB_WHEN_NOT_DETECT
#define RESULT_CONFIDENCE 0.70
#define TEMPDB_FACE_COUNT_MAX 10
enum STFSpecialDBID
{
    STFS_DBID_INVALID = 0,
    STFS_DBID_VISITOR_1 = -1,
    STFS_DBID_TEMPDB_1 = -1000
};
struct STFaceImage;
class STFaceCache
@@ -21,6 +35,7 @@
    FDP_FaceDetectResult add(const STFaceImage& img);
    void search(const STFaceImage& img, fdr_vec_t& topResult);
    FDP_FaceDetectResult compare(const STFaceImage& img1, const STFaceImage& img2);
    void delete_db(int dbid);
    
    //#todo need a delete img, if business not linked faceid and its personid
    // they can delete it and save/find again!
@@ -33,6 +48,8 @@
    const std::string stfaceModels;
    void* _dbContext;
    void* _cacheContext;
    int tempdbFaceCount;
};
#endif
FaceServer/face_daemon_proto.h
@@ -42,8 +42,9 @@
struct FDP_FaceDetectPB
{
    int32_t db_id;
    int16_t camera_id;
    
    FDP_FaceDetectPB(int32_t _db_id) : db_id(_db_id)
    FDP_FaceDetectPB(int32_t _db_id, int16_t _camera_id) : db_id(_db_id), camera_id(_camera_id)
    {}
    
    void hton();
@@ -56,7 +57,11 @@
    int32_t st_id; // sensetime id
    int16_t confidence; // 1000 times of float confidence, less than zero means error
    
    FDP_FaceDetectResult(int32_t _db_id, int32_t _st_id, int _confidence) : db_id(_db_id), st_id(_st_id), confidence(_confidence)
    int16_t camera_id;
    int32_t st_track_id;
    FDP_FaceDetectResult(int32_t _db_id, int32_t _st_id, int _confidence) :
        db_id(_db_id), st_id(_st_id), confidence(_confidence), camera_id(0), st_track_id(0)
    {}
    
    void hton();
FaceServer/main_face_daemon.cpp
@@ -34,7 +34,11 @@
    ss << "\"result\":[";
    for(fdr_vec_t::const_iterator iter = result.begin(); iter != result.end(); ++iter)
    {
        ss << "[" << WRAPPER_TEXT(iter->db_id) << "," << WRAPPER_TEXT(iter->st_id) <<  "," << WRAPPER_TEXT(iter->confidence) << "]";
        ss << "[" << WRAPPER_TEXT(iter->db_id) << ","
            << WRAPPER_TEXT(iter->st_id) <<  ","
            << WRAPPER_TEXT(iter->confidence) <<  ","
            << WRAPPER_TEXT(iter->camera_id) <<  ","
            << WRAPPER_TEXT(iter->st_track_id) << "]";
        if (iter != std::prev(result.end()))
            ss << ",";
    }
@@ -93,7 +97,21 @@
        stimg.height = pbFaceListImage.height();
        stimg.size = img->size();
        stimg.buff = (const uint8_t*)img->data();
        result.push_back(g_STFaceCache.detect(stimg));
        FDP_FaceDetectResult res(g_STFaceCache.detect(stimg));
#ifdef ENABLE_ADD_TO_TEMPDB_WHEN_NOT_DETECT
        if (res.db_id == STFS_DBID_INVALID)
        {
            // #todo optimize extract feature once
            stimg.db_id = STFS_DBID_TEMPDB_1;
            res = g_STFaceCache.add(stimg);
        }
#endif
        res.camera_id = fdpFaceDetectPB->camera_id;
        res.st_track_id = pbFaceListImage.st_track_id();
        result.push_back(res);
    }
    //#test
FaceServer/proto_hton_ntoh.cpp
@@ -55,11 +55,13 @@
void FDP_FaceDetectPB::hton()
{
    db_id = htonl(db_id);
    camera_id = htons(camera_id);
}
void FDP_FaceDetectPB::ntoh()
{
    db_id = ntohl(db_id);
    camera_id = ntohs(camera_id);
}
void FDP_FaceDetectResult::hton()
@@ -67,6 +69,8 @@
    db_id = htonl(db_id);
    st_id = htonl(st_id);
    confidence = htons(confidence);
    camera_id = htons(camera_id);
    st_track_id = htonl(st_track_id);
}
void FDP_FaceDetectResult::ntoh()
@@ -74,4 +78,6 @@
    db_id = ntohl(db_id);
    st_id = ntohl(st_id);
    confidence = ntohs(confidence);
    camera_id = ntohs(camera_id);
    st_track_id = ntohl(st_track_id);
}