/*
 * Copyright 2022 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef SSD_POSTPROCESS_COMMON_H_
#define SSD_POSTPROCESS_COMMON_H_

typedef struct {
  float y;
  float x;
  float h;
  float w;
  float score;
} BoxCenterEncode;

typedef struct {
  float ymin;
  float xmin;
  float ymax;
  float xmax;
  float score;
} BoxCornerEncode;

typedef struct {
  int num_boxes;
  BoxCornerEncode* box;
} Boxes;

#endif  // SSD_POSTPROCESS_COMMON_H_
