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 SENSCameraConfigstart (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 SENSCapturePropscaptureProperties () 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 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 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: