1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright 2020 Rockchip Electronics Co. LTD 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Licensed under the Apache License, Version 2.0 (the "License"); 5*4882a593Smuzhiyun * you may not use this file except in compliance with the License. 6*4882a593Smuzhiyun * You may obtain a copy of the License at 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * http://www.apache.org/licenses/LICENSE-2.0 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * Unless required by applicable law or agreed to in writing, software 11*4882a593Smuzhiyun * distributed under the License is distributed on an "AS IS" BASIS, 12*4882a593Smuzhiyun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*4882a593Smuzhiyun * See the License for the specific language governing permissions and 14*4882a593Smuzhiyun * limitations under the License. 15*4882a593Smuzhiyun * 16*4882a593Smuzhiyun * author: hh@rock-chips.com 17*4882a593Smuzhiyun * date: 2020-5-19 18*4882a593Smuzhiyun * module: video filter with rknn/rockx/rockface 19*4882a593Smuzhiyun */ 20*4882a593Smuzhiyun #ifndef SRC_RT_MEDIA_AV_FILTER_INCLUDE_RTMEDIAROCKX_H_ 21*4882a593Smuzhiyun #define SRC_RT_MEDIA_AV_FILTER_INCLUDE_RTMEDIAROCKX_H_ 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #include "rt_type.h" // NOLINT 24*4882a593Smuzhiyun #include <string> 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #ifdef HAVE_ROCKX 27*4882a593Smuzhiyun #include <rockx/rockx.h> 28*4882a593Smuzhiyun #endif 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun #define ROCKX_FACE_DETECT "rockx_face_detect" 31*4882a593Smuzhiyun #define ROCKX_FACE_LANDMARK "rockx_face_landmark" 32*4882a593Smuzhiyun #define ROCKX_POSE_BODY "rockx_pose_body" 33*4882a593Smuzhiyun #define ROCKX_POSE_BODY_V2 "rockx_pose_body_v2" 34*4882a593Smuzhiyun #define ROCKX_POSE_FINGER "rockx_pose_finger" 35*4882a593Smuzhiyun #define ROCKX_FACE_GENDER_AGE "rockx_face_gender_age" 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun typedef struct _RTRockxCfg { 39*4882a593Smuzhiyun // path of "librockx.so" 40*4882a593Smuzhiyun char *path; 41*4882a593Smuzhiyun // model which is will be loaded by rknn 42*4882a593Smuzhiyun char *model; 43*4882a593Smuzhiyun // format of input datas 44*4882a593Smuzhiyun char *format; 45*4882a593Smuzhiyun // width of input datas 46*4882a593Smuzhiyun INT32 width; 47*4882a593Smuzhiyun // width of input datas 48*4882a593Smuzhiyun INT32 height; 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun // add more 51*4882a593Smuzhiyun } RTRockxCfg; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun typedef void (*RknnCallBack) (void* handler, int type, void *ptr, int size); 54*4882a593Smuzhiyun typedef void* RknnHandler; 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun typedef struct { 58*4882a593Smuzhiyun #ifdef HAVE_ROCKFACE 59*4882a593Smuzhiyun rockface_det_t base; 60*4882a593Smuzhiyun rockface_attribute_t attr; 61*4882a593Smuzhiyun rockface_landmark_t landmark; 62*4882a593Smuzhiyun rockface_angle_t angle; 63*4882a593Smuzhiyun rockface_feature_t feature; 64*4882a593Smuzhiyun #endif 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun #ifdef HAVE_ROCKX 67*4882a593Smuzhiyun rockx_object_t object; 68*4882a593Smuzhiyun #endif 69*4882a593Smuzhiyun } RTFaceInfo; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun typedef struct { 72*4882a593Smuzhiyun #ifdef HAVE_ROCKX 73*4882a593Smuzhiyun rockx_face_landmark_t object; 74*4882a593Smuzhiyun #endif 75*4882a593Smuzhiyun } RTLandmarkInfo; 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun typedef struct { 78*4882a593Smuzhiyun #ifdef HAVE_ROCKFACE 79*4882a593Smuzhiyun rockface_det_t base; 80*4882a593Smuzhiyun #endif 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun #ifdef HAVE_ROCKX 83*4882a593Smuzhiyun rockx_keypoints_t object; 84*4882a593Smuzhiyun #endif 85*4882a593Smuzhiyun } RTBodyInfo; 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun typedef struct { 88*4882a593Smuzhiyun #ifdef USE_ROCKX 89*4882a593Smuzhiyun rockx_keypoints_t object; 90*4882a593Smuzhiyun #endif 91*4882a593Smuzhiyun } RTFingerInfo; 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun typedef enum { 94*4882a593Smuzhiyun RT_SUCCESS = 0, 95*4882a593Smuzhiyun RT_FAILURE, 96*4882a593Smuzhiyun RT_TIMEOUT, 97*4882a593Smuzhiyun RT_UNKNOW, 98*4882a593Smuzhiyun } RTAuthorizedStatus; 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun typedef enum { 101*4882a593Smuzhiyun RT_RKNN_TYPE_NONE = -1, 102*4882a593Smuzhiyun RT_RKNN_TYPE_FACE = 0, 103*4882a593Smuzhiyun RT_RKNN_TYPE_BODY, 104*4882a593Smuzhiyun RT_RKNN_TYPE_FINGER, 105*4882a593Smuzhiyun RT_RKNN_TYPE_LANDMARK, 106*4882a593Smuzhiyun RT_RKNN_TYPE_AUTHORIZED_STATUS, 107*4882a593Smuzhiyun } RTRknnResultType; 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun typedef struct { 110*4882a593Smuzhiyun INT32 index; 111*4882a593Smuzhiyun INT32 img_w; 112*4882a593Smuzhiyun INT32 img_h; 113*4882a593Smuzhiyun INT64 timeval; 114*4882a593Smuzhiyun RTRknnResultType type; 115*4882a593Smuzhiyun RTAuthorizedStatus status; 116*4882a593Smuzhiyun union { 117*4882a593Smuzhiyun RTBodyInfo body_info; 118*4882a593Smuzhiyun RTFaceInfo face_info; 119*4882a593Smuzhiyun RTLandmarkInfo landmark_info; 120*4882a593Smuzhiyun RTFingerInfo finger_info; 121*4882a593Smuzhiyun }; 122*4882a593Smuzhiyun } RTRknnResult; 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun typedef struct { 125*4882a593Smuzhiyun // how many result in results poiont 126*4882a593Smuzhiyun INT32 counter; 127*4882a593Smuzhiyun // the results of rknn output 128*4882a593Smuzhiyun RTRknnResult* results; 129*4882a593Smuzhiyun } RTRknnAnalysisResults; 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun typedef struct { 132*4882a593Smuzhiyun INT32 dataSize; 133*4882a593Smuzhiyun INT32 width; 134*4882a593Smuzhiyun INT32 height; 135*4882a593Smuzhiyun INT32 format; 136*4882a593Smuzhiyun INT32 angle; 137*4882a593Smuzhiyun INT32 mirror; 138*4882a593Smuzhiyun INT32 faceID; 139*4882a593Smuzhiyun unsigned char *feature; 140*4882a593Smuzhiyun INT32 featureLen; 141*4882a593Smuzhiyun } RTKKMattingFaceInfo; 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun typedef struct { 144*4882a593Smuzhiyun INT32 faceCount; 145*4882a593Smuzhiyun RTKKMattingFaceInfo *faceInfo; 146*4882a593Smuzhiyun } RTKKAIMattingResult; 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun #endif // SRC_RT_MEDIA_AV_FILTER_INCLUDE_RTMEDIAROCKX_H_ 149*4882a593Smuzhiyun 150