/*
 * Copyright 2023 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_PIPELINE_H_
#define SSD_POSTPROCESS_PIPELINE_H_

#include <stdint.h>

#include "ssd_postprocess/common.h"

#ifdef __cplusplus
extern "C" {
#endif  // __cplusplus

// SSD post-processing pipeline
void ssd_postprocess_pipeline(uint8_t** model_out, Boxes* boxes,
                              const int max_faces, const float iou_threshold);

#ifdef __cplusplusS
}  // extern "C"
#endif  // __cplusplus

#endif  // SSD_POSTPROCESS_PIPELINE_H_
