98 lines
2.7 KiB
C++
98 lines
2.7 KiB
C++
#pragma once
|
|
|
|
#include <memory>
|
|
#include <mutex>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "hw/i_decoder.h"
|
|
#include "hw/i_encoder.h"
|
|
#include "hw/i_image_processor.h"
|
|
#include "hw/i_infer_backend.h"
|
|
#include "utils/simple_json.h"
|
|
#include "utils/result.h"
|
|
|
|
namespace rk3588 {
|
|
|
|
class RknnInferBackend : public IInferBackend {
|
|
public:
|
|
ModelHandle LoadModel(const std::string& model_path, std::string& err) override {
|
|
return AiScheduler::Instance().LoadModel(model_path, err);
|
|
}
|
|
|
|
void UnloadModel(ModelHandle handle) override {
|
|
AiScheduler::Instance().UnloadModel(handle);
|
|
}
|
|
|
|
bool GetModelInfo(ModelHandle handle, ModelInfo& info) const override {
|
|
return AiScheduler::Instance().GetModelInfo(handle, info);
|
|
}
|
|
|
|
InferResult Infer(ModelHandle handle, const InferInput& input) override {
|
|
return AiScheduler::Instance().Infer(handle, input);
|
|
}
|
|
|
|
AiScheduler::BorrowedInferResult InferBorrowed(ModelHandle handle, const InferInput& input) override {
|
|
{
|
|
std::lock_guard<std::mutex> lock(mu_);
|
|
last_borrowed_input_ = input;
|
|
}
|
|
return AiScheduler::Instance().InferBorrowed(handle, input);
|
|
}
|
|
|
|
InferInput GetLastBorrowedInput() const {
|
|
std::lock_guard<std::mutex> lock(mu_);
|
|
return last_borrowed_input_;
|
|
}
|
|
|
|
private:
|
|
mutable std::mutex mu_;
|
|
InferInput last_borrowed_input_;
|
|
};
|
|
|
|
using Rk3588InferBackend = RknnInferBackend;
|
|
|
|
class Rk3588ImageProcessor : public IImageProcessor {
|
|
public:
|
|
explicit Rk3588ImageProcessor(const SimpleJson& config);
|
|
|
|
Status Resize(const Frame& src, Frame& dst) override;
|
|
Status CvtColor(const Frame& src, Frame& dst, PixelFormat dst_format) override;
|
|
Status Normalize(const Frame& src, std::vector<float>& out,
|
|
const std::vector<float>& mean,
|
|
const std::vector<float>& std) override;
|
|
|
|
bool IsUsingRga() const;
|
|
int RgaMaxInflight() const;
|
|
std::string RgaGateKey() const;
|
|
|
|
private:
|
|
std::shared_ptr<IImageProcessor> impl_;
|
|
bool use_rga_ = true;
|
|
};
|
|
|
|
class Rk3588Decoder : public IDecoder {
|
|
public:
|
|
Status Open(const SimpleJson& config) override;
|
|
Status Send(const DecodePacket& packet) override;
|
|
Result<std::shared_ptr<Frame>> Receive() override;
|
|
void Close() override;
|
|
|
|
private:
|
|
std::unique_ptr<IDecoder> impl_;
|
|
};
|
|
|
|
class Rk3588Encoder : public IEncoder {
|
|
public:
|
|
Status Open(const SimpleJson& config) override;
|
|
Status Send(const std::shared_ptr<Frame>& frame) override;
|
|
Result<EncodePacket> Receive() override;
|
|
std::vector<uint8_t> ExtraData() const override;
|
|
void Close() override;
|
|
|
|
private:
|
|
std::unique_ptr<IEncoder> impl_;
|
|
};
|
|
|
|
} // namespace rk3588
|