SLProject  4.3.020
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
SENSiOSARKit Class Reference

#include <SENSiOSARKit.h>

Inheritance diagram for SENSiOSARKit:
[legend]

Public Member Functions

 SENSiOSARKit ()
 
 ~SENSiOSARKit ()
 
bool init (unsigned int textureId=0, bool retrieveCpuImg=false, int targetWidth=-1) override
 
bool isReady () override
 
bool resume () override
 
void reset () override
 
void pause () override
 
bool update (cv::Mat &pose) override
 
bool isAvailable () override
 
bool isInstalled () override
 
bool install () override
 
const SENSCameraConfigstart (std::string deviceId, const SENSCameraStreamConfig &streamConfig, bool provideIntrinsics) override
 
void stop () override
 Stop a started camera device. More...
 
const SENSCapturePropscaptureProperties () override
 Get SENSCaptureProps which contains necessary information about all available camera devices and their capabilities. More...
 
- Public Member Functions inherited from SENSARBaseCamera
 SENSARBaseCamera ()
 
virtual ~SENSARBaseCamera ()
 
virtual void lightComponentIntensity (float *components)
 
virtual bool installRefused ()
 
virtual void installRefused (bool b)
 
bool isRunning ()
 
void fetchPointCloud (bool s)
 
cv::Mat pointCloud ()
 
cv::Size inputFrameSize ()
 
cv::Size cpuFrameSize ()
 
- Public Member Functions inherited from SENSBaseCamera
SENSFrameBasePtr latestFrame () override
 Get the latest captured frame. If no frame was captured the frame will be empty (null). More...
 
const SENSCameraConfigconfig () const override
 defines how the camera was configured during start More...
 
void registerListener (SENSCameraListener *listener) override
 
void unregisterListener (SENSCameraListener *listener) override
 
bool started () const override
 
bool permissionGranted () const override
 
void setPermissionGranted () override
 
- Public Member Functions inherited from SENSCamera
virtual ~SENSCamera ()
 

Private Member Functions

void retrieveCaptureProperties ()
 

Private Attributes

bool _available = false
 
SENSiOSARCoreDelegate_arcoreDelegate
 

Additional Inherited Members

- Protected Member Functions inherited from SENSBaseCamera
void updateFrame (cv::Mat bgrImg, cv::Mat intrinsics, int width, int height, bool intrinsicsChanged)
 
void processStart ()
 call from start function to do startup preprocessing More...
 
- Protected Attributes inherited from SENSARBaseCamera
bool _running = false
 
bool _pause = true
 
int _inputFrameW = 0
 
int _inputFrameH = 0
 
bool _retrieveCpuImg = false
 
int _cpuImgTargetWidth = -1
 
int _cpuImgTargetHeight = -1
 
bool _fetchPointCloud = false
 
cv::Mat _pointCloud
 
- Protected Attributes inherited from SENSBaseCamera
SENSCaptureProps _captureProperties
 
std::atomic< bool > _started {false}
 flags if camera was started More...
 
SENSCameraConfig _config
 indicates what is currently running More...
 
std::atomic< bool > _permissionGranted {false}
 
std::vector< SENSCameraListener * > _listeners
 
std::mutex _listenerMutex
 
SENSFrameBasePtr _frame
 current frame More...
 
std::mutex _frameMutex
 

Detailed Description

Definition at line 8 of file SENSiOSARKit.h.

Constructor & Destructor Documentation

◆ SENSiOSARKit()

SENSiOSARKit::SENSiOSARKit ( )

Definition at line 3 of file SENSiOSARKit.mm.

4 {
7 }
bool isAvailable() override
Definition: SENSiOSARKit.h:20
bool init(unsigned int textureId=0, bool retrieveCpuImg=false, int targetWidth=-1) override
Definition: SENSiOSARKit.mm:9
SENSiOSARCoreDelegate * _arcoreDelegate
Definition: SENSiOSARKit.h:35

◆ ~SENSiOSARKit()

SENSiOSARKit::~SENSiOSARKit ( )
inline

Definition at line 12 of file SENSiOSARKit.h.

12 {}

Member Function Documentation

◆ captureProperties()

const SENSCaptureProps & SENSiOSARKit::captureProperties ( )
overridevirtual

Get SENSCaptureProps which contains necessary information about all available camera devices and their capabilities.

Implements SENSCamera.

Definition at line 108 of file SENSiOSARKit.mm.

109 {
110  if (_captureProperties.size() == 0)
112 
113  return _captureProperties;
114 }
SENSCaptureProps _captureProperties
Definition: SENSCamera.h:216
void retrieveCaptureProperties()
Definition: SENSiOSARKit.mm:75

◆ init()

bool SENSiOSARKit::init ( unsigned int  textureId = 0,
bool  retrieveCpuImg = false,
int  targetWidth = -1 
)
overridevirtual

Implements SENSARBaseCamera.

Definition at line 9 of file SENSiOSARKit.mm.

10 {
11  if (!_available)
12  return false;
13 
14  [_arcoreDelegate initARKit];
15 
16  return true;
17 }

◆ install()

bool SENSiOSARKit::install ( )
inlineoverridevirtual

Reimplemented from SENSARBaseCamera.

Definition at line 22 of file SENSiOSARKit.h.

22 { return _available; };

◆ isAvailable()

bool SENSiOSARKit::isAvailable ( )
inlineoverridevirtual

Reimplemented from SENSARBaseCamera.

Definition at line 20 of file SENSiOSARKit.h.

20 { return _available; };

◆ isInstalled()

bool SENSiOSARKit::isInstalled ( )
inlineoverridevirtual

Reimplemented from SENSARBaseCamera.

Definition at line 21 of file SENSiOSARKit.h.

21 { return _available; };

◆ isReady()

bool SENSiOSARKit::isReady ( )
overridevirtual

Implements SENSARBaseCamera.

Definition at line 19 of file SENSiOSARKit.mm.

20 {
21  return _arcoreDelegate != nullptr;
22 }

◆ pause()

void SENSiOSARKit::pause ( )
overridevirtual

Implements SENSARBaseCamera.

Definition at line 45 of file SENSiOSARKit.mm.

46 {
47  if (_arcoreDelegate)
49 
50  _pause = true;
51  _started = false; //for SENSBaseCamera
52 }
std::atomic< bool > _started
flags if camera was started
Definition: SENSCamera.h:217
void pause() override
Definition: SENSiOSARKit.mm:45

◆ reset()

void SENSiOSARKit::reset ( )
overridevirtual

Implements SENSARBaseCamera.

Definition at line 39 of file SENSiOSARKit.mm.

40 {
41  if (_arcoreDelegate)
43 }
void reset() override
Definition: SENSiOSARKit.mm:39

◆ resume()

bool SENSiOSARKit::resume ( )
overridevirtual

Implements SENSARBaseCamera.

Definition at line 24 of file SENSiOSARKit.mm.

25 {
26  bool success = false;
27  if (_arcoreDelegate)
28  success = [_arcoreDelegate run];
29 
30  if (success)
31  {
32  _pause = false;
33  _started = true; //for SENSBaseCamera
34  }
35 
36  return success;
37 }
int run(Config config)
App::run implementation from App.h for the Emscripten platform.
Definition: AppAndroid.cpp:78

◆ retrieveCaptureProperties()

void SENSiOSARKit::retrieveCaptureProperties ( )
private

Definition at line 75 of file SENSiOSARKit.mm.

76 {
77  //the SENSBaseCamera needs to have a valid frame, otherwise we cannot estimate the fov correctly
78  if (!_frame)
79  {
80  resume();
81  HighResTimer t;
82  cv::Mat pose;
83  do {
84  update(pose);
85  } while (!_frame && t.elapsedTimeInSec() < 5.f);
86 
87  pause();
88  }
89 
90  if (_frame)
91  {
92  std::string deviceId = "ARKit";
94 
95  float focalLengthPix = -1.f;
96  if (!_frame->intrinsics.empty())
97  {
98  focalLengthPix = 0.5 * (_frame->intrinsics.at<double>(0, 0) + _frame->intrinsics.at<double>(1, 1));
99  }
100  SENSCameraDeviceProps devProp(deviceId, facing);
101  devProp.add(_frame->imgBGR.cols, _frame->imgBGR.rows, focalLengthPix);
102  _captureProperties.push_back(devProp);
103  }
104  else
105  Utils::warnMsg("SENSiOSARKit", "retrieveCaptureProperties: Could not retrieve a valid frame!", __LINE__, __FILE__);
106 }
SENSCameraFacing
Definition of camera facing.
Definition: SENSCamera.h:28
High Resolution Timer class using C++11.
Definition: HighResTimer.h:31
float elapsedTimeInSec()
Definition: HighResTimer.h:37
SENSFrameBasePtr _frame
current frame
Definition: SENSCamera.h:222
bool resume() override
Definition: SENSiOSARKit.mm:24
bool update(cv::Mat &pose) override
Definition: SENSiOSARKit.mm:54
void warnMsg(const char *tag, const char *msg, const int line, const char *file)
Platform independent warn message output.
Definition: Utils.cpp:1142

◆ start()

const SENSCameraConfig & SENSiOSARKit::start ( std::string  deviceId,
const SENSCameraStreamConfig streamConfig,
bool  provideIntrinsics 
)
overridevirtual

Call this function to configure the camera if you exactly know, what device you want to open and with which stream configuration. You can find out these properties by using SENSCaptureProps object (see getCaptureProperties())

Parameters
deviceIdcamera device id to start
streamConfigSENSCameraStreamConfig from camera device. This defines the size of the image. The image is converted to BGR and assigned to SENSFrame::imgBGR.
provideIntrinsicsspecifies if intrinsics estimation should be enabled. The estimated intrinsics are transferred with every SENSFrame as they may be different for every frame (e.g. on iOS). This value has different effects on different architectures.
Returns
the found configuration that is adjusted and used when SENSCamera::start() is called.

Implements SENSCamera.

Definition at line 118 of file SENSiOSARKit.mm.

121 {
122  //define capture properties
123  if (_captureProperties.size() == 0)
125 
126  if (_captureProperties.size() == 0)
127  throw SENSException(SENSType::CAM, "Could not retrieve camera properties!", __LINE__, __FILE__);
128 
129  if (!_captureProperties.containsDeviceId(deviceId))
130  throw SENSException(SENSType::CAM, "DeviceId does not exist!", __LINE__, __FILE__);
131 
134  if (props)
135  facing = props->facing();
136 
137  //init config here before processStart
138  _config = SENSCameraConfig(deviceId,
139  streamConfig,
140  facing,
142  //inform camera listeners
143  processStart();
144 
145  _started = true;
146  return _config;
147 }
SENSCameraConfig _config
indicates what is currently running
Definition: SENSCamera.h:218
void processStart()
call from start function to do startup preprocessing
Definition: SENSCamera.cpp:294
const SENSCameraFacing & facing() const
Definition: SENSCamera.h:86
bool containsDeviceId(const std::string &deviceId) const
Definition: SENSCamera.cpp:61
const SENSCameraDeviceProps * camPropsForDeviceId(const std::string &deviceId) const
Definition: SENSCamera.cpp:73

◆ stop()

void SENSiOSARKit::stop ( )
inlineoverridevirtual

Stop a started camera device.

Implements SENSCamera.

Definition at line 28 of file SENSiOSARKit.h.

28 { _started = false; };

◆ update()

bool SENSiOSARKit::update ( cv::Mat &  view)
overridevirtual

Returns true if in tracking state. If correctly initialized, it will update the camera frame that may be retrieved with latestFrame()

Reimplemented from SENSARBaseCamera.

Definition at line 54 of file SENSiOSARKit.mm.

55 {
56  //retrieve the latest frame from arkit delegate
57  cv::Mat intrinsic;
58  cv::Mat imgBGR;
59  bool isTracking;
60 
61  if (_fetchPointCloud)
62  [_arcoreDelegate latestFrame:&pose withImg:&imgBGR AndIntrinsic:&intrinsic AndImgWidth:&_inputFrameW AndImgHeight:&_inputFrameH IsTracking:&isTracking WithPointClout:&_pointCloud];
63  else
64  [_arcoreDelegate latestFrame:&pose withImg:&imgBGR AndIntrinsic:&intrinsic AndImgWidth:&_inputFrameW AndImgHeight:&_inputFrameH IsTracking:&isTracking WithPointClout:nullptr];
65 
66  if (!imgBGR.empty())
67  {
68  updateFrame(imgBGR, intrinsic, true, imgBGR.cols, imgBGR.rows);
69  }
70  else
71  Utils::log("SENSiOSARKit", "frame is empty!");
72  return isTracking;
73 }
SENSFrameBasePtr latestFrame() override
Get the latest captured frame. If no frame was captured the frame will be empty (null).
Definition: SENSCamera.cpp:276
void updateFrame(cv::Mat bgrImg, cv::Mat intrinsics, int width, int height, bool intrinsicsChanged)
Definition: SENSCamera.cpp:220
void log(const char *tag, const char *format,...)
logs a formatted string platform independently
Definition: Utils.cpp:1100

Member Data Documentation

◆ _arcoreDelegate

SENSiOSARCoreDelegate* SENSiOSARKit::_arcoreDelegate
private

Definition at line 35 of file SENSiOSARKit.h.

◆ _available

bool SENSiOSARKit::_available = false
private

Definition at line 34 of file SENSiOSARKit.h.


The documentation for this class was generated from the following files: