/*
* Copyright (C) 2014,2015 Thundersoft Corporation
* All rights Reserved
*
* 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 __TS_DETECTFACE_ENGINE_H__
#define __TS_DETECTFACE_ENGINE_H__
#include "ts_makeup_data.h"
#include "ts_makeup_image.h"

    typedef void*                    TSHandle;

    /**
     * FUNCTION   : ts_detectface_create_context
     *
     * DESCRIPTION: create context.The method MUST call at first time.
     *
     *
     * RETURN    : TSHandle as the context handle
     *
     */
    TSHandle ts_detectface_create_context();


    /**
     * FUNCTION   : ts_detectface_destroy_context
     *
     * DESCRIPTION: destroy context. The method MUST call at last time.
     * Before you MUST call ts_detectface_create_context method
     * to create context and get context handle.
     *
     * PARAMETERS :
     *   @param[in] contexTSHandle : The context handle pointer.
     *
     *
     */
    void ts_detectface_destroy_context(TSHandle* contexTSHandle);


    /**
     * FUNCTION   : ts_detectface_detect
     *
     * DESCRIPTION: start detect.Before you MUST call ts_detectface_create_context method
     * to create context and get context handle.
     *
     * PARAMETERS :
     *   @param[in] contexTSHandle : The context handle.
     *   @param[in] pInData : The TSMakeupData pointer.MUST not NULL.
     *
     * RETURN    : int If less than zero failed, otherwise the number of the detected faces.
     *
     */
    int ts_detectface_detect(TSHandle contexTSHandle, TSMakeupData *pInData);


    /**
     * FUNCTION   : ts_detectface_get_face_info
     *
     * DESCRIPTION: get detected face information.Before you MUST call ts_detectface_detect method
     * to detect face.
     *
     * PARAMETERS :
     *   @param[in] contexTSHandle : The context handle.
     *   @param[in] index : The face index.MUST > 0.
     *   @param[out] pFaceRect : The face rects.MUST not NULL.
     *   @param[out] leftEye : The left eye rect.
     *   @param[out] rightEye : The right eye rect.
     *   @param[out] pMouth : The mount rect.
     *
     * RETURN    : TS_OK if success, otherwise failed.
     *
     */
    int ts_detectface_get_face_info(TSHandle contexTSHandle, int index, TSRect *pFaceRect, TSRect *leftEye, TSRect *rightEye, TSRect *pMouth);

#endif // __TS_DETECTFACE_ENGINE_H__
