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

#include <SENSiOSCamera.h>

Inheritance diagram for SENSiOSCamera:
[legend]

Public Member Functions

 SENSiOSCamera ()
 
 ~SENSiOSCamera ()
 
const SENSCameraConfig & start (std::string deviceId, const SENSCameraStreamConfig &streamConfig, bool provideIntrinsics=true) override
 on ios we can ignore fovDegFallbackGuess as the api provides dynamic camera intrinsics More...
 
void stop () override
 Stop a started camera device. More...
 
const SENSCaptureProps & captureProperties () override
 Get SENSCaptureProps which contains necessary information about all available camera devices and their capabilities. More...
 
- 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 SENSCameraConfig & config () 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 processNewFrame (unsigned char *data, int imgWidth, int imgHeight, matrix_float3x3 *camMat3x3)
 
void updatePermission (bool granted)
 

Private Attributes

SENSiOSCameraDelegate * _cameraDelegate
 

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 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 9 of file SENSiOSCamera.h.

Constructor & Destructor Documentation

◆ SENSiOSCamera()

SENSiOSCamera::SENSiOSCamera ( )

Definition at line 7 of file SENSiOSCamera.mm.

8 {
9  _cameraDelegate = [[SENSiOSCameraDelegate alloc] init];
10  [_cameraDelegate setPermissionCB:std::bind(&SENSiOSCamera::updatePermission, this, std::placeholders::_1)];
11  [_cameraDelegate setUpdateCB:std::bind(&SENSiOSCamera::processNewFrame, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4)];
12  //todo: fixme
13  _permissionGranted = true;
14 }
std::atomic< bool > _permissionGranted
Definition: SENSCamera.h:219
SENSiOSCameraDelegate * _cameraDelegate
Definition: SENSiOSCamera.h:27
void processNewFrame(unsigned char *data, int imgWidth, int imgHeight, matrix_float3x3 *camMat3x3)
void updatePermission(bool granted)

◆ ~SENSiOSCamera()

SENSiOSCamera::~SENSiOSCamera ( )

Definition at line 16 of file SENSiOSCamera.mm.

17 {
18 }

Member Function Documentation

◆ captureProperties()

const SENSCaptureProps & SENSiOSCamera::captureProperties ( )
overridevirtual

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

Implements SENSCamera.

Definition at line 87 of file SENSiOSCamera.mm.

88 {
89  if (_captureProperties.size() == 0)
90  _captureProperties = [_cameraDelegate retrieveCaptureProperties];
91 
92  return _captureProperties;
93 }
SENSCaptureProps _captureProperties
Definition: SENSCamera.h:216

◆ processNewFrame()

void SENSiOSCamera::processNewFrame ( unsigned char *  data,
int  imgWidth,
int  imgHeight,
matrix_float3x3 *  camMat3x3 
)
private

Definition at line 95 of file SENSiOSCamera.mm.

96 {
97  //Utils::log("SENSiOSCamera", "processNewFrame: w %d w %d", imgWidth, imgHeight);
98  cv::Mat bgra(imgHeight, imgWidth, CV_8UC4, (void*)data);
99  cv::Mat bgrImg;
100  cvtColor(bgra, bgrImg, cv::COLOR_BGRA2BGR, 3);
101 
102  cv::Mat intrinsics;
103  bool intrinsicsChanged = false;
104  if (camMat3x3)
105  {
106  intrinsicsChanged = true;
107  intrinsics = cv::Mat_<double>(3, 3);
108  for (int i = 0; i < 3; ++i)
109  {
110  simd_float3 col = camMat3x3->columns[i];
111  intrinsics.at<double>(0, i) = (double)col[0];
112  intrinsics.at<double>(1, i) = (double)col[1];
113  intrinsics.at<double>(2, i) = (double)col[2];
114  }
115  }
116 
117  updateFrame(bgrImg, intrinsics, intrinsicsChanged, imgWidth, imgHeight);
118 }
void updateFrame(cv::Mat bgrImg, cv::Mat intrinsics, int width, int height, bool intrinsicsChanged)
Definition: SENSCamera.cpp:220

◆ start()

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

on ios we can ignore fovDegFallbackGuess as the api provides dynamic camera intrinsics

Implements SENSCamera.

Definition at line 20 of file SENSiOSCamera.mm.

23 {
24  if (_started)
25  {
26  Utils::warnMsg("SENSiOSCamera", "Call to start was ignored. Camera is currently running!", __LINE__, __FILE__);
27  return _config;
28  }
29 
30  //retrieve all camera characteristics
31  if (_captureProperties.size() == 0)
32  _captureProperties = [_cameraDelegate retrieveCaptureProperties];
33 
34  if (_captureProperties.size() == 0)
35  throw SENSException(SENSType::CAM, "Could not retrieve camera properties!", __LINE__, __FILE__);
36 
37  if (!_captureProperties.containsDeviceId(deviceId))
38  throw SENSException(SENSType::CAM, "DeviceId does not exist!", __LINE__, __FILE__);
39 
42  if (props)
43  facing = props->facing();
44 
45  NSString* devId = [NSString stringWithUTF8String:deviceId.c_str()];
46 
47  BOOL enableVideoStabilization = YES;
48  if (provideIntrinsics)
49  enableVideoStabilization = NO;
50 
51  BOOL extractedExpr = [_cameraDelegate startCamera:devId
52  withWidth:streamConfig.widthPix
53  andHeight:streamConfig.heightPix
54  autoFocusState:YES //alway on on ios because they provide dynamic intrinsics
55  videoStabilizationState:enableVideoStabilization
56  intrinsicsState:provideIntrinsics];
57  if (extractedExpr)
58  {
59  //init config here before processStart
60  _config = SENSCameraConfig(deviceId,
61  streamConfig,
62  facing,
64  processStart();
65 
66  _started = true;
67  }
68  else
69  {
70  throw SENSException(SENSType::CAM, "Could not start camera!", __LINE__, __FILE__);
71  }
72 
73  return _config;
74 }
SENSCameraFacing
Definition of camera facing.
Definition: SENSCamera.h:28
SENSCameraConfig _config
indicates what is currently running
Definition: SENSCamera.h:218
std::atomic< bool > _started
flags if camera was started
Definition: SENSCamera.h:217
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
void warnMsg(const char *tag, const char *msg, const int line, const char *file)
Platform independent warn message output.
Definition: Utils.cpp:1142

◆ stop()

void SENSiOSCamera::stop ( )
overridevirtual

Stop a started camera device.

Implements SENSCamera.

Definition at line 76 of file SENSiOSCamera.mm.

77 {
78  if (_started)
79  {
80  if ([_cameraDelegate stopCamera])
81  _started = false;
82  }
83  else
84  Utils::log("SENSiOSCamera", "Camera not started but stop called!");
85 }
void log(const char *tag, const char *format,...)
logs a formatted string platform independently
Definition: Utils.cpp:1100

◆ updatePermission()

void SENSiOSCamera::updatePermission ( bool  granted)
private

Definition at line 120 of file SENSiOSCamera.mm.

121 {
122  _permissionGranted = granted;
123 }

Member Data Documentation

◆ _cameraDelegate

SENSiOSCameraDelegate* SENSiOSCamera::_cameraDelegate
private

Definition at line 27 of file SENSiOSCamera.h.


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