#pragma once #pragma clang diagnostic ignored "-Wdeprecated-declarations" #include #include #include #include #include #include #include #include #include #include "runmodel.h" #define USE_CPU_RUNTIME 0 #define USE_GPU_RUNTIME 1 #define USE_DSP_RUNTIME 2 #ifdef USE_THNEED #include "selfdrive/modeld/thneed/thneed.h" #endif class SNPEModel : public RunModel { public: SNPEModel(const char *path, float *loutput, size_t loutput_size, int runtime, bool luse_extra = false, bool use_tf8 = false, cl_context context = NULL); void addRecurrent(float *state, int state_size); void addTrafficConvention(float *state, int state_size); void addCalib(float *state, int state_size); void addDesire(float *state, int state_size); void addDrivingStyle(float *state, int state_size); void addNavFeatures(float *state, int state_size); void addImage(float *image_buf, int buf_size); void addExtra(float *image_buf, int buf_size); void execute(); #ifdef USE_THNEED std::unique_ptr thneed; bool thneed_recorded = false; #endif private: std::string model_data; #ifdef QCOM2 zdl::DlSystem::Runtime_t Runtime; #endif // snpe model stuff std::unique_ptr snpe; // snpe input stuff zdl::DlSystem::UserBufferMap inputMap; std::unique_ptr inputBuffer; float *input; size_t input_size; bool use_tf8; // snpe output stuff zdl::DlSystem::UserBufferMap outputMap; std::unique_ptr outputBuffer; float *output; size_t output_size; // extra input stuff std::unique_ptr extraBuffer; float *extra; size_t extra_size; bool use_extra; // recurrent and desire std::unique_ptr addExtra(float *state, int state_size, int idx); float *recurrent; size_t recurrent_size; std::unique_ptr recurrentBuffer; float *trafficConvention; std::unique_ptr trafficConventionBuffer; float *desire; std::unique_ptr desireBuffer; float *navFeatures; std::unique_ptr navFeaturesBuffer; float *drivingStyle; std::unique_ptr drivingStyleBuffer; float *calib; std::unique_ptr calibBuffer; };