1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- #pragma once
- #include <cfloat>
- #include <cstdlib>
- #include <memory>
- #define CL_USE_DEPRECATED_OPENCL_1_2_APIS
- #ifdef __APPLE__
- #include <OpenCL/cl.h>
- #else
- #include <CL/cl.h>
- #endif
- #include "common/mat.h"
- #include "cereal/messaging/messaging.h"
- #include "selfdrive/modeld/transforms/loadyuv.h"
- #include "selfdrive/modeld/transforms/transform.h"
- const bool send_raw_pred = getenv("SEND_RAW_PRED") != NULL;
- void softmax(const float* input, float* output, size_t len);
- float sigmoid(float input);
- template<class T, size_t size>
- constexpr const kj::ArrayPtr<const T> to_kj_array_ptr(const std::array<T, size> &arr) {
- return kj::ArrayPtr(arr.data(), arr.size());
- }
- class ModelFrame {
- public:
- ModelFrame(cl_device_id device_id, cl_context context);
- ~ModelFrame();
- float* prepare(cl_mem yuv_cl, int width, int height, int frame_stride, int frame_uv_offset, const mat3& transform, cl_mem *output);
- const int MODEL_WIDTH = 512;
- const int MODEL_HEIGHT = 256;
- const int MODEL_FRAME_SIZE = MODEL_WIDTH * MODEL_HEIGHT * 3 / 2;
- const int buf_size = MODEL_FRAME_SIZE * 2;
- private:
- Transform transform;
- LoadYUVState loadyuv;
- cl_command_queue q;
- cl_mem y_cl, u_cl, v_cl, net_input_cl;
- std::unique_ptr<float[]> input_frames;
- };
|