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

#include <SENSCamera.h>

Public Member Functions

 SENSCameraDeviceProps ()
 
 SENSCameraDeviceProps (const std::string &deviceId, SENSCameraFacing facing)
 
int findBestMatchingConfig (cv::Size requiredSize) const
 
const std::vector< SENSCameraStreamConfig > & streamConfigs () const
 
const std::string & deviceId () const
 
const SENSCameraFacingfacing () const
 
bool contains (cv::Size toFind)
 
void add (int widthPix, int heightPix, float focalLengthPix)
 

Private Attributes

std::string _deviceId
 
SENSCameraFacing _facing = SENSCameraFacing::UNKNOWN
 
std::vector< SENSCameraStreamConfig_streamConfigs
 

Detailed Description

Definition at line 73 of file SENSCamera.h.

Constructor & Destructor Documentation

◆ SENSCameraDeviceProps() [1/2]

SENSCameraDeviceProps::SENSCameraDeviceProps ( )
inline

Definition at line 76 of file SENSCamera.h.

76 {}

◆ SENSCameraDeviceProps() [2/2]

SENSCameraDeviceProps::SENSCameraDeviceProps ( const std::string &  deviceId,
SENSCameraFacing  facing 
)
inline

Definition at line 77 of file SENSCamera.h.

80  {
81  }
const SENSCameraFacing & facing() const
Definition: SENSCamera.h:86
std::string _deviceId
Definition: SENSCamera.h:107
const std::string & deviceId() const
Definition: SENSCamera.h:85
SENSCameraFacing _facing
Definition: SENSCamera.h:108

Member Function Documentation

◆ add()

void SENSCameraDeviceProps::add ( int  widthPix,
int  heightPix,
float  focalLengthPix 
)
inline

Definition at line 97 of file SENSCamera.h.

98  {
100  config.widthPix = widthPix;
101  config.heightPix = heightPix;
102  config.focalLengthPix = focalLengthPix;
103  _streamConfigs.push_back(config);
104  }
std::vector< SENSCameraStreamConfig > _streamConfigs
Definition: SENSCamera.h:109
Config config
The configuration set in App::run.
Definition: AppAndroid.cpp:34

◆ contains()

bool SENSCameraDeviceProps::contains ( cv::Size  toFind)
inline

Definition at line 88 of file SENSCamera.h.

89  {
90  return std::find_if(
91  _streamConfigs.begin(),
92  _streamConfigs.end(),
93  [&](const SENSCameraStreamConfig& cmp) -> bool
94  { return cmp.widthPix == toFind.width && cmp.heightPix == toFind.height; }) != _streamConfigs.end();
95  }

◆ deviceId()

const std::string& SENSCameraDeviceProps::deviceId ( ) const
inline

Definition at line 85 of file SENSCamera.h.

85 { return _deviceId; }

◆ facing()

const SENSCameraFacing& SENSCameraDeviceProps::facing ( ) const
inline

Definition at line 86 of file SENSCamera.h.

86 { return _facing; }

◆ findBestMatchingConfig()

int SENSCameraDeviceProps::findBestMatchingConfig ( cv::Size  requiredSize) const

Definition at line 13 of file SENSCamera.cpp.

14 {
15  if (_streamConfigs.size() == 0)
17  "No stream configuration available!",
18  __LINE__,
19  __FILE__);
20 
21  std::vector<std::pair<float, int>> matchingSizes;
22 
23  // calculate score for
24  for (int i = 0; i < _streamConfigs.size(); ++i)
25  {
27  // stream size has to have minimum the size of the required size
28  if (config.widthPix >= requiredSize.width &&
29  config.heightPix >= requiredSize.height)
30  {
31  float crop = 0.f;
32  float scaleFactor = 1.f;
33  // calculate necessary crop to adjust stream image to required size
34  if (((float)requiredSize.width / (float)requiredSize.height) > ((float)config.widthPix / (float)config.heightPix))
35  {
36  scaleFactor = (float)requiredSize.width / (float)config.widthPix;
37  float heightScaled = config.heightPix * scaleFactor;
38  crop += heightScaled - requiredSize.height;
39  crop += (float)config.widthPix * scaleFactor - (float)requiredSize.width;
40  }
41  else
42  {
43  scaleFactor = (float)requiredSize.height / (float)config.heightPix;
44  float widthScaled = config.widthPix * scaleFactor;
45  crop += widthScaled - requiredSize.width;
46  crop += (float)config.heightPix * scaleFactor - (float)requiredSize.height;
47  }
48 
49  float cropScaleScore = crop;
50  if (!isEqualToOne(scaleFactor))
51  cropScaleScore += (config.widthPix * config.heightPix);
52  matchingSizes.push_back(std::make_pair(cropScaleScore, i));
53  }
54  }
55  // sort by crop
56  std::sort(matchingSizes.begin(), matchingSizes.end());
57 
58  return matchingSizes.front().second;
59 }
bool isEqualToOne(float value)
Definition: SENSCamera.cpp:7

◆ streamConfigs()

const std::vector<SENSCameraStreamConfig>& SENSCameraDeviceProps::streamConfigs ( ) const
inline

Definition at line 84 of file SENSCamera.h.

84 { return _streamConfigs; }

Member Data Documentation

◆ _deviceId

std::string SENSCameraDeviceProps::_deviceId
private

Definition at line 107 of file SENSCamera.h.

◆ _facing

SENSCameraFacing SENSCameraDeviceProps::_facing = SENSCameraFacing::UNKNOWN
private

Definition at line 108 of file SENSCamera.h.

◆ _streamConfigs

std::vector<SENSCameraStreamConfig> SENSCameraDeviceProps::_streamConfigs
private

Definition at line 109 of file SENSCamera.h.


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