# pragma once
# include <cstdlib>
# include "selfdrive/modeld/runners/runmodel.h"
class ONNXModel : public RunModel {
public :
ONNXModel ( const char * path , float * output , size_t output_size , int runtime , bool use_extra = false , bool _use_tf8 = false , cl_context context = NULL ) ;
~ ONNXModel ( ) ;
void addRecurrent ( float * state , int state_size ) ;
void addDesire ( float * state , int state_size ) ;
void addNavFeatures ( float * state , int state_size ) ;
void addDrivingStyle ( float * state , int state_size ) ;
void addTrafficConvention ( float * state , int state_size ) ;
void addCalib ( float * state , int state_size ) ;
void addImage ( float * image_buf , int buf_size ) ;
void addExtra ( float * image_buf , int buf_size ) ;
void execute ( ) ;
private :
int proc_pid ;
float * output ;
size_t output_size ;
float * rnn_input_buf = NULL ;
int rnn_state_size ;
float * desire_input_buf = NULL ;
int desire_state_size ;
float * nav_features_input_buf = NULL ;
int nav_features_size ;
float * driving_style_input_buf = NULL ;
int driving_style_size ;
float * traffic_convention_input_buf = NULL ;
int traffic_convention_size ;
float * calib_input_buf = NULL ;
int calib_size ;
float * image_input_buf = NULL ;
int image_buf_size ;
bool use_tf8 ;
float * extra_input_buf = NULL ;
int extra_buf_size ;
bool use_extra ;
// pipe to communicate to keras subprocess
void pread ( float * buf , int size ) ;
void pwrite ( float * buf , int size ) ;
int pipein [ 2 ] ;
int pipeout [ 2 ] ;
} ;