2018-04-25 11:06:38 +03:00
|
|
|
#include "api/api.h"
|
|
|
|
|
|
|
|
#include <glog/logging.h>
|
|
|
|
|
2018-04-26 09:44:47 +03:00
|
|
|
#include <thread>
|
|
|
|
|
2018-04-26 04:22:29 +03:00
|
|
|
#include "mynteye/utils.h"
|
|
|
|
|
2018-04-26 05:33:37 +03:00
|
|
|
#include "api/synthetic.h"
|
2018-04-26 04:22:29 +03:00
|
|
|
#include "device/device.h"
|
|
|
|
|
2018-04-25 11:06:38 +03:00
|
|
|
MYNTEYE_BEGIN_NAMESPACE
|
|
|
|
|
2018-04-26 05:33:37 +03:00
|
|
|
API::API(std::shared_ptr<Device> device)
|
|
|
|
: device_(device), synthetic_(new Synthetic(this)) {
|
2018-04-25 11:06:38 +03:00
|
|
|
VLOG(2) << __func__;
|
|
|
|
}
|
|
|
|
|
|
|
|
API::~API() {
|
|
|
|
VLOG(2) << __func__;
|
|
|
|
}
|
|
|
|
|
2018-04-26 04:22:29 +03:00
|
|
|
std::shared_ptr<API> API::Create() {
|
|
|
|
return Create(device::select());
|
|
|
|
}
|
|
|
|
|
|
|
|
std::shared_ptr<API> API::Create(std::shared_ptr<Device> device) {
|
|
|
|
return std::make_shared<API>(device);
|
|
|
|
}
|
|
|
|
|
2018-04-26 05:33:37 +03:00
|
|
|
Model API::GetModel() const {
|
|
|
|
return device_->GetModel();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool API::Supports(const Stream &stream) const {
|
2018-04-26 09:44:47 +03:00
|
|
|
return synthetic_->Supports(stream);
|
2018-04-26 05:33:37 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
bool API::Supports(const Capabilities &capability) const {
|
|
|
|
return device_->Supports(capability);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool API::Supports(const Option &option) const {
|
|
|
|
return device_->Supports(option);
|
|
|
|
}
|
|
|
|
|
|
|
|
const std::vector<StreamRequest> &API::GetStreamRequests(
|
|
|
|
const Capabilities &capability) const {
|
|
|
|
return device_->GetStreamRequests(capability);
|
|
|
|
}
|
|
|
|
|
|
|
|
void API::ConfigStreamRequest(
|
|
|
|
const Capabilities &capability, const StreamRequest &request) {
|
|
|
|
device_->ConfigStreamRequest(capability, request);
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string API::GetInfo(const Info &info) const {
|
|
|
|
return device_->GetInfo(info);
|
|
|
|
}
|
|
|
|
|
|
|
|
Intrinsics API::GetIntrinsics(const Stream &stream) const {
|
|
|
|
return device_->GetIntrinsics(stream);
|
|
|
|
}
|
|
|
|
|
|
|
|
Extrinsics API::GetExtrinsics(const Stream &from, const Stream &to) const {
|
|
|
|
return device_->GetExtrinsics(from, to);
|
|
|
|
}
|
|
|
|
|
|
|
|
MotionIntrinsics API::GetMotionIntrinsics() const {
|
|
|
|
return device_->GetMotionIntrinsics();
|
|
|
|
}
|
|
|
|
|
|
|
|
Extrinsics API::GetMotionExtrinsics(const Stream &from) const {
|
|
|
|
return device_->GetMotionExtrinsics(from);
|
|
|
|
}
|
|
|
|
|
|
|
|
void API::LogOptionInfos() const {
|
|
|
|
device_->LogOptionInfos();
|
|
|
|
}
|
|
|
|
|
|
|
|
OptionInfo API::GetOptionInfo(const Option &option) const {
|
|
|
|
return device_->GetOptionInfo(option);
|
|
|
|
}
|
|
|
|
|
|
|
|
std::int32_t API::GetOptionValue(const Option &option) const {
|
|
|
|
return device_->GetOptionValue(option);
|
|
|
|
}
|
|
|
|
|
|
|
|
void API::SetOptionValue(const Option &option, std::int32_t value) {
|
|
|
|
device_->SetOptionValue(option, value);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool API::RunOptionAction(const Option &option) const {
|
|
|
|
return device_->RunOptionAction(option);
|
|
|
|
}
|
|
|
|
|
2018-04-26 09:44:47 +03:00
|
|
|
void API::SetStreamCallback(const Stream &stream, stream_callback_t callback) {
|
|
|
|
synthetic_->SetStreamCallback(stream, callback);
|
|
|
|
}
|
|
|
|
|
|
|
|
void API::SetMotionCallback(motion_callback_t callback) {
|
|
|
|
static auto callback_ = callback;
|
|
|
|
if (callback_) {
|
|
|
|
device_->SetMotionCallback(
|
|
|
|
[](const device::MotionData &data) { callback_({data.imu}); });
|
|
|
|
} else {
|
|
|
|
device_->SetMotionCallback(nullptr);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool API::HasStreamCallback(const Stream &stream) const {
|
|
|
|
return synthetic_->HasStreamCallback(stream);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool API::HasMotionCallback() const {
|
|
|
|
return device_->HasMotionCallback();
|
|
|
|
}
|
|
|
|
|
|
|
|
void API::Start(const Source &source) {
|
|
|
|
if (source == Source::VIDEO_STREAMING) {
|
|
|
|
synthetic_->StartVideoStreaming();
|
|
|
|
} else if (source == Source::MOTION_TRACKING) {
|
|
|
|
device_->StartMotionTracking();
|
|
|
|
} else if (source == Source::ALL) {
|
|
|
|
Start(Source::VIDEO_STREAMING);
|
|
|
|
Start(Source::MOTION_TRACKING);
|
|
|
|
} else {
|
|
|
|
LOG(FATAL) << "Unsupported source :(";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void API::Stop(const Source &source) {
|
|
|
|
if (source == Source::VIDEO_STREAMING) {
|
|
|
|
synthetic_->StopVideoStreaming();
|
|
|
|
} else if (source == Source::MOTION_TRACKING) {
|
|
|
|
device_->StopMotionTracking();
|
|
|
|
} else if (source == Source::ALL) {
|
|
|
|
Stop(Source::MOTION_TRACKING);
|
|
|
|
// Must stop motion tracking before video streaming and sleep a moment here
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(10));
|
|
|
|
Stop(Source::VIDEO_STREAMING);
|
|
|
|
} else {
|
|
|
|
LOG(FATAL) << "Unsupported source :(";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void API::WaitForStreams() {
|
|
|
|
synthetic_->WaitForStreams();
|
|
|
|
}
|
|
|
|
|
|
|
|
api::StreamData API::GetStreamData(const Stream &stream) {
|
|
|
|
return synthetic_->GetStreamData(stream);
|
|
|
|
}
|
|
|
|
|
|
|
|
std::vector<api::StreamData> API::GetStreamDatas(const Stream &stream) {
|
|
|
|
return synthetic_->GetStreamDatas(stream);
|
|
|
|
}
|
|
|
|
|
|
|
|
void API::EnableMotionDatas(std::size_t max_size) {
|
|
|
|
device_->EnableMotionDatas(max_size);
|
|
|
|
}
|
|
|
|
|
|
|
|
std::vector<api::MotionData> API::GetMotionDatas() {
|
|
|
|
std::vector<api::MotionData> datas;
|
|
|
|
for (auto &&data : device_->GetMotionDatas()) {
|
|
|
|
datas.push_back({data.imu});
|
|
|
|
}
|
|
|
|
return datas;
|
|
|
|
}
|
|
|
|
|
2018-04-26 05:33:37 +03:00
|
|
|
std::shared_ptr<Device> API::device() {
|
|
|
|
return device_;
|
|
|
|
}
|
|
|
|
|
2018-04-25 11:06:38 +03:00
|
|
|
MYNTEYE_END_NAMESPACE
|