WPILibC++  unspecified
CameraServer.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) 2014-2017 FIRST. All Rights Reserved. */
3 /* Open Source Software - may be modified and shared by FRC teams. The code */
4 /* must be accompanied by the FIRST BSD license file in the root directory of */
5 /* the project. */
6 /*----------------------------------------------------------------------------*/
7 
8 #pragma once
9 
10 #include <stdint.h>
11 
12 #include <atomic>
13 #include <memory>
14 #include <mutex>
15 #include <string>
16 #include <vector>
17 
18 #include <llvm/DenseMap.h>
19 #include <llvm/StringMap.h>
20 #include <llvm/StringRef.h>
21 
22 #include "ErrorBase.h"
23 #include "cscore.h"
24 #include "networktables/NetworkTable.h"
25 
26 namespace frc {
27 
32 class CameraServer : public ErrorBase {
33  public:
34  static constexpr uint16_t kBasePort = 1181;
35  static constexpr int kSize640x480 = 0;
36  static constexpr int kSize320x240 = 1;
37  static constexpr int kSize160x120 = 2;
38 
42  static CameraServer* GetInstance();
43 
44 #ifdef __linux__
45  // USBCamera does not work on anything except linux
59 
69 
77 
85  llvm::StringRef path);
86 #endif
87 
94  void StartAutomaticCapture(const cs::VideoSource& camera);
95 
105 
114  cs::AxisCamera AddAxisCamera(const char* host);
115 
124  cs::AxisCamera AddAxisCamera(const std::string& host);
125 
135 
144  template <typename T>
145  cs::AxisCamera AddAxisCamera(std::initializer_list<T> hosts);
146 
154 
161  cs::AxisCamera AddAxisCamera(llvm::StringRef name, const char* host);
162 
169  cs::AxisCamera AddAxisCamera(llvm::StringRef name, const std::string& host);
170 
179 
186  template <typename T>
188  std::initializer_list<T> hosts);
189 
198 
205  cs::CvSink GetVideo(const cs::VideoSource& camera);
206 
214 
223  cs::CvSource PutVideo(llvm::StringRef name, int width, int height);
224 
231 
237  cs::MjpegServer AddServer(llvm::StringRef name, int port);
238 
244  void AddServer(const cs::VideoSink& server);
245 
251  void RemoveServer(llvm::StringRef name);
252 
260 
267 
273  void AddCamera(const cs::VideoSource& camera);
274 
280  void RemoveCamera(llvm::StringRef name);
281 
291  void SetSize(int size);
292 
293  private:
294  CameraServer();
295 
296  std::shared_ptr<nt::NetworkTable> GetSourceTable(CS_Source source);
297  std::vector<std::string> GetSinkStreamValues(CS_Sink sink);
298  std::vector<std::string> GetSourceStreamValues(CS_Source source);
299  void UpdateStreamValues();
300 
301  static constexpr char const* kPublishName = "/CameraPublisher";
302 
303  std::mutex m_mutex;
304  std::atomic<int> m_defaultUsbDevice;
305  std::string m_primarySourceName;
309  std::shared_ptr<nt::NetworkTable> m_publishTable;
310  cs::VideoListener m_videoListener;
311  int m_tableListener;
312  int m_nextPort;
313  std::vector<std::string> m_addresses;
314 };
315 
316 } // namespace frc
317 
318 #include "CameraServer.inc"
Definition: Timer.cpp:18
Definition: DenseMap.h:585
void SetSize(int size)
Sets the size of the image to use.
Definition: CameraServer.cpp:723
A source for video that provides a sequence of frames.
Definition: cscore_oo.h:86
A sink for video that accepts a sequence of frames.
Definition: cscore_oo.h:457
cs::AxisCamera AddAxisCamera(llvm::StringRef host)
Adds an Axis IP camera.
Definition: CameraServer.cpp:534
void StartAutomaticCapture(const cs::VideoSource &camera)
Start automatically capturing images to send to the dashboard from an existing camera.
Definition: CameraServer.cpp:582
A source that represents a USB camera.
Definition: cscore_oo.h:239
An event listener.
Definition: cscore_oo.h:616
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
Definition: ArrayRef.h:32
static CameraServer * GetInstance()
Get the CameraServer instance.
Definition: CameraServer.cpp:21
cs::CvSource PutVideo(llvm::StringRef name, int width, int height)
Create a MJPEG stream with OpenCV input.
Definition: CameraServer.cpp:652
A source for user code to provide OpenCV images as video frames.
Definition: cscore_oo.h:364
Base class for most objects.
Definition: ErrorBase.h:74
void RemoveCamera(llvm::StringRef name)
Removes a camera by name.
Definition: CameraServer.cpp:718
cs::MjpegServer AddServer(llvm::StringRef name)
Adds a MJPEG server at the next available port.
Definition: CameraServer.cpp:659
void AddCamera(const cs::VideoSource &camera)
Adds an already created camera.
Definition: CameraServer.cpp:711
Singleton class for creating and keeping camera servers.
Definition: CameraServer.h:32
void RemoveServer(llvm::StringRef name)
Removes a server by name.
Definition: CameraServer.cpp:679
A sink that acts as a MJPEG-over-HTTP network server.
Definition: cscore_oo.h:530
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:42
A source that represents an Axis IP camera.
Definition: cscore_oo.h:324
cs::CvSink GetVideo()
Get OpenCV access to the primary camera feed.
Definition: CameraServer.cpp:591
A sink for user code to accept video frames as OpenCV images.
Definition: cscore_oo.h:553
cs::VideoSink GetServer()
Get server for the primary camera feed.
Definition: CameraServer.cpp:684