nx_video_source_sdk  1.0
Video Source SDK
rpi_camera.h
1 // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/
2 
3 #ifndef _RPI_CAMERA_H_
4 #define _RPI_CAMERA_H_
5 
6 #include <memory>
7 #include <mutex>
8 
9 #include "rw_lock.h"
10 #include "rpi_omx.h"
11 
12 
14 namespace rpi_cam
15 {
17  typedef enum
18  {
30  } ImageFilter;
31 
34  {
35  CameraParameters(rpi_omx::VideoFromat fmt = rpi_omx::VF_1280x960, ImageFilter filt = Filter_None)
36  : vfmt(fmt),
37  filter(filt),
38  sharpness(0),
39  contrast(0),
40  saturation(0),
41  brightness(50)
42  {}
43 
45  unsigned filter;
46  int sharpness;
47  int contrast;
48  int saturation;
49  int brightness;
50  };
51 
54  {
56  : vfmt(rpi_omx::VF_1280x960),
57  bitrateKbps(0)
58  {}
59 
61  unsigned bitrateKbps;
62  };
63 
65  class RPiCamera
66  {
67  public:
69 
70  enum
71  {
72  FLAG_EOS = OMX_BUFFERFLAG_EOS,
73  FLAG_DECODEONLY = OMX_BUFFERFLAG_DECODEONLY,
74  FLAG_DATACORRUPT = OMX_BUFFERFLAG_DATACORRUPT,
75  FLAG_ENDOFFRAME = OMX_BUFFERFLAG_ENDOFFRAME,
76  FLAG_SYNCFRAME = OMX_BUFFERFLAG_SYNCFRAME,
77  FLAG_EXTRADATA = OMX_BUFFERFLAG_EXTRADATA,
78  FLAG_CODECCONFIG = OMX_BUFFERFLAG_CODECCONFIG
79  };
80 
81  static constexpr unsigned STREAMS_NUM() { return 2; }
82  static constexpr unsigned BITRATE_0() { return 6000; }
83  static constexpr unsigned BITRATE_1() { return 500; }
84  static constexpr unsigned IFRAME_PERIOD() { return 5; }
85 
86  static void init();
87  static void deinit();
88  static const rpi_omx::VideoFromat * getVideoFormats(unsigned& num, bool resized = false);
89 
90  RPiCamera(const CameraParameters& camParams);
91  ~RPiCamera();
92 
93  bool isOK() const;
94  bool read(unsigned streamNo, std::vector<uint8_t>& data, uint64_t& timeStamp, unsigned& flags);
95  void getEncoderConfig(unsigned streamNo, unsigned& width, unsigned& height, unsigned& fps, unsigned& bitrateKbps) const;
96  void configEncoder(unsigned streamNo, unsigned width, unsigned height, unsigned framerate, unsigned bitrateKbps);
97  void update(); // update if need it
98 
99  private:
100  static std::recursive_mutex m_mutex; // locks entire class, not just an object
101  std::unique_ptr<rpi_omx::Camera> m_camera;
102  std::unique_ptr<rpi_omx::VideoSplitter> m_vsplitter;
103  std::unique_ptr<rpi_omx::Resizer> m_resizer;
104  std::unique_ptr<rpi_omx::Encoder> m_encoders[2];
105  CameraParameters m_camParams;
106  EncoderParameters m_encParams[2];
107  RWLock m_rw;
108  bool m_needUpdate;
109 
110  static void updateRatio(rpi_omx::VideoFromat& fmt);
111  static const rpi_omx::VideoFromat& getResizedFormat(const rpi_omx::VideoFromat& f);
112 
113  //
114 
115  void prepare(const CameraParameters& camParams, const EncoderParameters& encParams0, const EncoderParameters& encParams1);
116  void release();
117  void resetErrors();
118 
119  void switchState(OMX_STATETYPE state);
120 
121  void configCamera(const CameraParameters& params);
122  void configEncoders(const EncoderParameters& params0, const EncoderParameters& params1);
123 
124  void setupTunnels();
125  void teardownTunnels();
126 
127  void enablePorts();
128  void disablePorts();
129 
130  void allocateBuffers();
131  void returnBuffers();
132  void flushBuffers();
133  void freeBuffers();
134 
135  void startCapture();
136  void stopCapture();
137 
138  void dumpPorts();
139  };
140 }
141 
142 #endif
unsigned filter
Image filter.
Definition: rpi_camera.h:45
Emboss.
Definition: rpi_camera.h:21
Resolutions and common camera parameters.
Definition: rpi_camera.h:33
Raspberry Pi camera unit and configuration.
Definition: camera_manager.cpp:21
Hatch.
Definition: rpi_camera.h:25
DeRing.
Definition: rpi_camera.h:28
Definition: rw_lock.h:9
No filter.
Definition: rpi_camera.h:19
Sketch.
Definition: rpi_camera.h:23
OilPaint.
Definition: rpi_camera.h:24
int contrast
-100..100
Definition: rpi_camera.h:47
int saturation
-100..100
Definition: rpi_camera.h:48
Encoder parameters.
Definition: rpi_camera.h:53
ImageFilter
Definition: rpi_camera.h:17
Definition: rpi_omx.h:75
Remove noise.
Definition: rpi_camera.h:20
Solarize.
Definition: rpi_camera.h:29
int brightness
0..100
Definition: rpi_camera.h:49
Gpen.
Definition: rpi_camera.h:26
int sharpness
-100..100
Definition: rpi_camera.h:46
Raspberry Pi camera unit.
Definition: rpi_camera.h:65
Negative.
Definition: rpi_camera.h:22
bool read(unsigned streamNo, std::vector< uint8_t > &data, uint64_t &timeStamp, unsigned &flags)
Definition: rpi_camera.cpp:267
Antialias.
Definition: rpi_camera.h:27