nx_cloud_storage_sdk  1.0
Cloud Storage SDK
camera_plugin.h
1 // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/
2 
3 #ifndef NX_CAMERA_PLUGIN_H
4 #define NX_CAMERA_PLUGIN_H
5 
6 #include <cstring>
7 
8 #include <stdint.h>
9 
10 #include <plugins/plugin_api.h>
11 
12 #include "camera_plugin_types.h"
13 
15 
30 namespace nxcip
31 {
32  // TODO: Change to signed int64_t.
33  typedef unsigned long long int UsecUTCTimestamp;
34  static const UsecUTCTimestamp INVALID_TIMESTAMP_VALUE = (UsecUTCTimestamp)-1LL;
35 
36  static const int MAX_TEXT_LEN = 1024;
37 
38  //Error codes. Interface implementation MUST use these error codes when appropriate
39 
40  static const int NX_NO_ERROR = 0;
41  static const int NX_NOT_AUTHORIZED = -1;
42  static const int NX_INVALID_ENCODER_NUMBER = -2;
43  static const int NX_UNKNOWN_PORT_NAME = -3;
44  static const int NX_UNSUPPORTED_CODEC = -8;
45  static const int NX_UNSUPPORTED_RESOLUTION = -9;
46  static const int NX_UNDEFINED_BEHAVOUR = -20;
47  static const int NX_NOT_IMPLEMENTED = -21;
48  static const int NX_NETWORK_ERROR = -22;
49  static const int NX_MORE_DATA = -23;
50  static const int NX_NO_DATA = -24;
51  static const int NX_IO_ERROR = -25;
53  static const int NX_TRY_AGAIN = -26;
55  static const int NX_INTERRUPTED = -27;
56  static const int NX_PARAM_READ_ONLY = -40;
57  static const int NX_UNKNOWN_PARAMETER = -41;
58  static const int NX_INVALID_PARAM_VALUE = -42;
59  static const int NX_OTHER_ERROR = -100;
60 
61  class BaseCameraManager;
62 
63  // {0D06134F-16D0-41c8-9752-A33E81FE9C75}
64  static const nxpl::NX_GUID IID_CameraDiscoveryManager = { { 0x0d, 0x06, 0x13, 0x4f, 0x16, 0xd0, 0x41, 0xc8, 0x97, 0x52, 0xa3, 0x3e, 0x81, 0xfe, 0x9c, 0x75 } };
65 
66  // {0D06134F-16D0-41c8-9752-A33E81FE9C74}
67  static const nxpl::NX_GUID IID_CameraDiscoveryManager2 = { { 0x0d, 0x06, 0x13, 0x4f, 0x16, 0xd0, 0x41, 0xc8, 0x97, 0x52, 0xa3, 0x3e, 0x81, 0xfe, 0x9c, 0x74 } };
68 
69  // {FEA0452D-8493-4FF3-83E9-72D5BF75A9DE}
70  static const nxpl::NX_GUID IID_CameraDiscoveryManager3 = { { 0xFE, 0xA0, 0x45, 0x2D, 0x84, 0x93, 0x4F, 0xF3, 0x83, 0xE9, 0x72, 0xD5, 0xBF, 0x75, 0xA9, 0xDE } };
71 
73  struct CameraInfo
74  {
76  char modelName[256];
78  char firmware[256];
80  char uid[256];
82  char url[MAX_TEXT_LEN];
84  char auxiliaryData[256];
86  char defaultLogin[256];
88  char defaultPassword[256];
89 
92  {
93  memset(this, 0, sizeof(CameraInfo));
94  }
95 
96  CameraInfo(const CameraInfo& value)
97  {
98  strncpy(modelName, value.modelName, sizeof(modelName) - 1);
99  modelName[sizeof(modelName) - 1] = '\0';
100 
101  strncpy(firmware, value.firmware, sizeof(firmware) - 1);
102  firmware[sizeof(firmware) - 1] = '\0';
103 
104  strncpy(uid, value.uid, sizeof(uid) - 1);
105  uid[sizeof(uid) - 1] = '\0';
106 
107  strncpy(url, value.url, sizeof(url) - 1);
108  url[sizeof(url) - 1] = '\0';
109 
110  strncpy(auxiliaryData, value.auxiliaryData, sizeof(auxiliaryData) - 1);
111  auxiliaryData[sizeof(auxiliaryData) - 1] = '\0';
112 
113  strncpy(defaultLogin, value.defaultLogin, sizeof(defaultLogin) - 1);
114  defaultLogin[sizeof(defaultLogin) - 1] = '\0';
115 
116  strncpy(defaultPassword, value.defaultPassword, sizeof(defaultPassword) - 1);
117  defaultPassword[sizeof(defaultPassword) - 1] = '\0';
118  }
119  };
120 
121  struct CameraInfo2: public CameraInfo
122  {
124  {
125  groupId[0] = 0;
126  groupName[0] = 0;
127  }
128 
129  CameraInfo2(const CameraInfo& value):
130  CameraInfo(value)
131  {
132  groupId[0] = 0;
133  groupName[0] = 0;
134  }
135 
136  CameraInfo2(const CameraInfo2& value):
137  CameraInfo(value)
138  {
139  strncpy(groupId, value.groupId, sizeof(groupId) - 1);
140  strncpy(groupName, value.groupName, sizeof(groupName) - 1);
141  }
142 
143  char groupId[256];
144  char groupName[256];
145  };
146 
147  static const int CAMERA_INFO_ARRAY_SIZE = 256;
148  static const int MAX_MODEL_NAME_SIZE = 256;
149 
151 
165  {
166  public:
167  virtual ~CameraDiscoveryManager() {}
168 
170 
173  virtual void getVendorName( char* buf ) const = 0;
174 
176 
183  virtual int findCameras( CameraInfo* cameras, const char* serverURL ) = 0;
185 
195  virtual int checkHostAddress( CameraInfo* cameras, const char* address, const char* login, const char* password ) = 0;
197 
207  virtual int fromMDNSData(
208  const char* discoveryAddress,
209  const unsigned char* mdnsResponsePacket,
210  int mdnsResponsePacketSize,
211  CameraInfo* cameraInfo ) = 0;
213 
222  virtual int fromUpnpData( const char* upnpXMLData, int upnpXMLDataSize, CameraInfo* cameraInfo ) = 0;
223 
225 
228  virtual BaseCameraManager* createCameraManager( const CameraInfo& info ) = 0;
229 
231 
243  virtual int getReservedModelList( char** modelList, int* count ) = 0;
244  };
245 
247  {
248  public:
249  CameraDiscoveryManager2() = default;
250 
251  virtual int checkHostAddress2(nxcip::CameraInfo2* cameras, const char* address, const char* login, const char* password) = 0;
252  virtual int findCameras2(CameraInfo2* cameras, const char* serverURL) = 0;
253  };
254 
256  {
257  public:
258  enum Capability
259  {
260  noCapability = 0,
261  findLocalResources = 1 //< CameraDiscovery can find local resources without IP.
262  };
263 
264  CameraDiscoveryManager3() = default;
265  virtual int getCapabilities() const = 0;
266  };
267 
269  struct Resolution
270  {
272  int width;
274  int height;
275 
276  Resolution( int _width = 0, int _height = 0 )
277  :
278  width( _width ),
279  height( _height )
280  {
281  }
282  };
283 
286  {
290  float maxFps;
291 
293  :
294  maxFps( 0 )
295  {
296  }
297  };
298 
299  class StreamReader;
300 
301  // {528FD641-52BB-4f8b-B279-6C21FEF5A2BB}
302  static const nxpl::NX_GUID IID_CameraMediaEncoder = { { 0x52, 0x8f, 0xd6, 0x41, 0x52, 0xbb, 0x4f, 0x8b, 0xb2, 0x79, 0x6c, 0x21, 0xfe, 0xf5, 0xa2, 0xbb } };
303 
304  static const int MAX_RESOLUTION_LIST_SIZE = 64;
305 
308  :
309  public nxpl::PluginInterface
310  {
311  public:
312  virtual ~CameraMediaEncoder() {}
313 
315 
323  virtual int getMediaUrl( char* urlBuf ) const = 0;
324 
326 
332  virtual int getResolutionList( ResolutionInfo* infoList, int* infoListCount ) const = 0;
333 
335 
339  virtual int getMaxBitrate( int* maxBitrate ) const = 0;
340 
342 
346  virtual int setResolution( const Resolution& resolution ) = 0;
347 
354  virtual int setFps( const float& fps, float* selectedFps ) = 0;
355 
362  virtual int setBitrate( int bitrateKbps, int* selectedBitrateKbps ) = 0;
363  };
364 
365  struct AudioFormat
366  {
368  {
369  stNone = -1,
382  };
383 
384  enum ByteOrderType
385  {
386  boLittleEndian,
387  boBigEndian
388  };
389 
390  CompressionType compressionType;
391  int sampleRate;
393  int bitrate;
394  ByteOrderType byteOrder;
395  int channels;
396  SampleType sampleFmt;
397  int channelLayout;
398  int blockAlign;
399  int bitsPerCodedSample;
400 
401  AudioFormat()
402  :
403  compressionType(AV_CODEC_ID_NONE),
404  sampleRate(0),
405  bitrate(0),
406  byteOrder(boLittleEndian),
407  channels(0),
408  sampleFmt(stU8),
409  channelLayout(0),
410  blockAlign(0),
411  bitsPerCodedSample(0)
412  {
413  }
414  };
415 
416  // {9A1BDA18-563C-42de-8E23-B9244FD00658}
417  static const nxpl::NX_GUID IID_CameraMediaEncoder2 = { { 0x9a, 0x1b, 0xda, 0x18, 0x56, 0x3c, 0x42, 0xde, 0x8e, 0x23, 0xb9, 0x24, 0x4f, 0xd0, 0x6, 0x58 } };
418 
421  {
422  public:
423  virtual ~CameraMediaEncoder2() override {}
424 
426 
431  virtual StreamReader* getLiveStreamReader() = 0;
433  virtual int getAudioFormat( AudioFormat* audioFormat ) const = 0;
434  };
435 
436 #ifndef __GNUC__
437 #pragma pack(push, 1)
438 #define PACKED
439 #else
440 #define PACKED __attribute__((__packed__))
441 #endif
442 
444  struct PACKED LiveStreamConfig
445  {
446  enum LiveStreamFlags
447  {
448  LIVE_STREAM_FLAG_AUDIO_ENABLED = 0x1
449  };
450 
451  int32_t reserved_head;
452  int32_t flags;
453  int32_t codec;
454  int32_t width;
455  int32_t height;
456  float framerate;
457  int32_t bitrateKbps;
458  int16_t quality;
459  int16_t gopLength;
460  uint8_t reserved_tail[96];
461  };
462 #ifndef __GNUC__
463 #pragma pack(pop)
464 #endif
465 #undef PACKED
466 
467  // {D1C7F082-B6F9-45F3-82D6-3CFE3EAE0260}
468  static const nxpl::NX_GUID IID_CameraMediaEncoder3 = { { 0xd1, 0xc7, 0xf0, 0x82, 0xb6, 0xf9, 0x45, 0xf3, 0x82, 0xd6, 0x3c, 0xfe, 0x3e, 0xae, 0x2, 0x60 } };
469 
471  {
472  public:
474 
484  virtual int getConfiguredLiveStreamReader(LiveStreamConfig * config, StreamReader ** reader) = 0;
485 
487 
495  virtual int getVideoFormat(CompressionType * codec, PixelFormat * pixelFormat) const = 0;
496  };
497 
498  // {9807EA20-FA37-4EA7-BF07-9AC61511E1DF}
499  static const nxpl::NX_GUID IID_CameraMediaEncoder4 = { { 0x98, 0x07, 0xEA ,0x20, 0xFA, 0x37, 0x4E, 0xA7, 0xBF, 0x07, 0x9A, 0xC6 ,0x15 ,0x11 ,0xE1, 0xDF } };
501  {
502  public:
504  virtual int setMediaUrl(const char url[nxcip::MAX_TEXT_LEN]) = 0;
505  };
506 
507  // {95d69238-7a07-462f-9364-971dd58b315e}
508  static const nxpl::NX_GUID IID_CameraMediaEncoder5 = { { 0x95, 0xd6, 0x92 ,0x38, 0x7a, 0x07, 0x46, 0x2f, 0x93, 0x64, 0x97, 0x1d ,0xd5 ,0x8b ,0x31, 0x5e } };
510  {
511  public:
513  virtual const char* audioExtradata() const = 0;
514 
516  virtual int audioExtradataSize() const = 0;
517  };
518 
519  class CameraPtzManager;
521  class CameraRelayIOManager;
522  class DtsArchiveReader;
523 
524  // {B7AA2FE8-7592-4459-A52F-B05E8E089AFE}
525  static const nxpl::NX_GUID IID_BaseCameraManager = { { 0xb7, 0xaa, 0x2f, 0xe8, 0x75, 0x92, 0x44, 0x59, 0xa5, 0x2f, 0xb0, 0x5e, 0x8e, 0x8, 0x9a, 0xfe } };
526 
528 
537  :
538  public nxpl::PluginInterface
539  {
540  public:
541  virtual ~BaseCameraManager() {}
542 
544 
553  virtual int getEncoderCount( int* encoderCount ) const = 0;
554 
556 
565  virtual int getEncoder( int encoderIndex, CameraMediaEncoder** encoderPtr ) = 0;
566 
568 
573  virtual int getCameraInfo( CameraInfo* info ) const = 0;
574 
577  {
581  ptzCapability = 0x0008,
582  audioCapability = 0x0010,
585  shareIpCapability = 0x0080,
599  dontAutoOpenCamera = 0x200000,
600  noAnalytics = 0x400000,
601  };
602 
604 
608  virtual int getCameraCapabilities( unsigned int* capabilitiesMask ) const = 0;
609 
611  virtual void setCredentials( const char* username, const char* password ) = 0;
612 
614 
618  virtual int setAudioEnabled( int audioEnabled ) = 0;
619 
621 
625  virtual CameraPtzManager* getPtzManager() const = 0;
627 
634 
638  virtual CameraRelayIOManager* getCameraRelayIOManager() const = 0;
639 
641 
644  virtual void getLastErrorString( char* errorString ) const = 0;
645  };
646 
647  // {A2017C29-CE9E-4829-87BE-9287598A1358}
648  static const nxpl::NX_GUID IID_Picture = { { 0xa2, 0x01, 0x7c, 0x29, 0xce, 0x9e, 0x48, 0x29, 0x87, 0xbe, 0x92, 0x87, 0x59, 0x8a, 0x13, 0x58 } };
649 
651  class Picture
652  :
653  public nxpl::PluginInterface
654  {
655  public:
656  virtual ~Picture() {}
657 
659  virtual PixelFormat pixelFormat() const = 0;
661  virtual int planeCount() const = 0;
663  virtual int width() const = 0;
665  virtual int height() const = 0;
667  virtual int xStride( int planeNumber ) const = 0;
669  virtual const void* scanLine( int planeNumber, int lineNumber ) const = 0;
671  virtual void* scanLine( int planeNumber, int lineNumber ) = 0;
676  virtual void* data() = 0;
677  virtual const void* data() const = 0;
678  };
679 
680  // {8006CC9F-7BDD-4a4c-8920-AC5546D4924A}
681  static const nxpl::NX_GUID IID_TimePeriods = { { 0x80, 0x06, 0xcc, 0x9f, 0x7b, 0xdd, 0x4a, 0x4c, 0x89, 0x20, 0xac, 0x55, 0x46, 0xd4, 0x92, 0x4a } };
682 
685  :
686  public nxpl::PluginInterface
687  {
688  public:
690  virtual void goToBeginning() = 0;
694  virtual bool next() = 0;
698  virtual bool atEnd() const = 0;
704  virtual bool get( UsecUTCTimestamp* start, UsecUTCTimestamp* end ) const = 0;
705  };
706 
709  {
710  public:
722  UsecUTCTimestamp startTime;
724  UsecUTCTimestamp endTime;
732  unsigned long long periodDetailLevel;
733 
739 
743  int limit;
744 
749 
751  :
752  motionMask( 0 ),
753  startTime( INVALID_TIMESTAMP_VALUE ),
754  endTime( INVALID_TIMESTAMP_VALUE ),
756  keepSmallChunks(0),
757  limit(0),
758  descSortOrder(false)
759  {
760  }
761  };
762 
763  // {1181F23B-071C-4608-89E3-648E1A735B54}
764  static const nxpl::NX_GUID IID_BaseCameraManager2 = { { 0x11, 0x81, 0xf2, 0x3b, 0x07, 0x1c, 0x46, 0x08, 0x89, 0xe3, 0x64, 0x8e, 0x1a, 0x73, 0x5b, 0x54 } };
765 
768  :
769  public BaseCameraManager
770  {
771  public:
774  {
777  };
778 
779  virtual ~BaseCameraManager2() {}
780 
782 
787  virtual int createDtsArchiveReader( DtsArchiveReader** dtsArchiveReader ) const = 0;
789 
796  virtual int find( ArchiveSearchOptions* searchOptions, TimePeriods** timePeriods ) const = 0;
798 
808  virtual int setMotionMask( Picture* motionMask ) = 0;
809  };
810 
811  // {840DEECD-2F9B-4859-9081-9592D17177F8}
812  static const nxpl::NX_GUID IID_BaseCameraManager3 = { { 0x84, 0x0d, 0xee, 0xcd, 0x2f, 0x9b, 0x48, 0x59, 0x90, 0x81, 0x95, 0x92, 0xd1, 0x71, 0x77, 0xf8 } };
813 
815 
820  :
821  public BaseCameraManager2
822  {
823  public:
825  {
827  };
828 
830 
834  virtual const char* getParametersDescriptionXML() const = 0;
836 
844  virtual int getParamValue( const char* paramName, char* valueBuf, int* valueBufSize ) const = 0;
846 
855  virtual int setParamValue( const char* paramName, const char* value ) = 0;
856  };
857 
858  // {8BAB5BC7-BEFC-4629-921F-8390A29D8A16}
859  static const nxpl::NX_GUID IID_CameraPTZManager = { { 0x8b, 0xab, 0x5b, 0xc7, 0xbe, 0xfc, 0x46, 0x29, 0x92, 0x1f, 0x83, 0x90, 0xa2, 0x9d, 0x8a, 0x16 } };
860 
862 
881  :
882  public nxpl::PluginInterface
883  {
884  public:
885  virtual ~CameraPtzManager() {}
886 
888  {
889  ContinuousPanCapability = 0x00000001,
892 
893  AbsolutePanCapability = 0x00000010,
894  AbsoluteTiltCapability = 0x00000020,
895  AbsoluteZoomCapability = 0x00000040,
896 
897  FlipPtzCapability = 0x00000100,
898  LimitsPtzCapability = 0x00000200,
899 
902 
906  };
907 
909  {
912  };
913 
914  enum Orientation
915  {
916  Horizontal = 0x1,
917  Vertical = 0x2
918  };
919 
920  struct Limits {
921  double minPan;
922  double maxPan;
923  double minTilt;
924  double maxTilt;
925  double minFov;
926  double maxFov;
927  };
928 
930  virtual int getCapabilities() const = 0;
931 
933 
948  virtual int continuousMove( double panSpeed, double tiltSpeed, double zoomSpeed ) = 0;
949 
951 
967  virtual int absoluteMove( CoordinateSpace space, double pan, double tilt, double zoom, double speed ) = 0;
968 
970 
981  virtual int getPosition( CoordinateSpace space, double *pan, double *tilt, double *zoom ) = 0;
982 
984 
992  virtual int getLimits( CoordinateSpace space, Limits *limits ) = 0;
993 
995 
1003  virtual int getFlip( int *flip ) = 0;
1004  };
1005 
1008  {
1014 
1018  dptUnknown,
1019  dptData,
1020  };
1021 
1022  // {763C93DC-A77D-41ff-8071-B64C4D3AFCFF}
1023  static const nxpl::NX_GUID IID_MediaDataPacket = { { 0x76, 0x3c, 0x93, 0xdc, 0xa7, 0x7d, 0x41, 0xff, 0x80, 0x71, 0xb6, 0x4c, 0x4d, 0x3a, 0xfc, 0xff } };
1025  static const unsigned int MEDIA_DATA_BUFFER_ALIGNMENT = 64;
1027  static const unsigned int MEDIA_PACKET_BUFFER_PADDING_SIZE = 64;
1028 
1030 
1035  :
1036  public nxpl::PluginInterface
1037  {
1038  public:
1039  enum Flags
1040  {
1042  fKeyPacket = 0x01,
1047  DEPRECATED_fLowQuality = 0x08,
1053  };
1054 
1056  virtual UsecUTCTimestamp timestamp() const = 0;
1058  virtual DataPacketType type() const = 0;
1060 
1071  virtual const void* data() const = 0;
1073 
1077  virtual unsigned int dataSize() const = 0;
1082  virtual unsigned int channelNumber() const = 0;
1083 
1089  virtual CompressionType codecType() const = 0;
1090 
1092  virtual unsigned int flags() const = 0;
1094 
1098  virtual unsigned int cSeq() const = 0;
1099  };
1100 
1101  // {65E9548D-0BA6-48CB-A217-AE6AE270CE7D}
1102  static const nxpl::NX_GUID IID_MediaDataPacket2 = { { 0x65, 0xe9, 0x54, 0x8d, 0x0b, 0xa6, 0x48, 0xcb, 0xa2, 0x17, 0xae, 0x6a, 0xe2, 0x70, 0xce, 0x7d } };
1103 
1105  {
1106  public:
1108  virtual const char* extradata() const = 0;
1109 
1111  virtual int extradataSize() const = 0;
1112  };
1113 
1114  // {A3F5D1BA-5A74-42BD-8890-A1C6E0197C04}
1115  static const nxpl::NX_GUID IID_Encryptable = { { 0xa3, 0xf5, 0xd1, 0xba, 0x5a, 0x74, 0x42, 0xbd, 0x88, 0x90, 0xa1, 0xc6, 0xe0, 0x19, 0x7c, 0x4 } };
1116 
1123  {
1124  public:
1125  virtual const uint8_t* encryptionData() const = 0;
1126  virtual int encryptionDataSize() const = 0;
1127  };
1128 
1129  static const unsigned int DEFAULT_MOTION_DATA_PICTURE_WIDTH = 44;
1130  static const unsigned int DEFAULT_MOTION_DATA_PICTURE_HEIGHT = 32;
1131 
1132  // {A85D884B-F05E-4fff-8B5A-E36570E73067}
1133  static const nxpl::NX_GUID IID_VideoDataPacket = { { 0xa8, 0x5d, 0x88, 0x4b, 0xf0, 0x5e, 0x4f, 0xff, 0x8b, 0x5a, 0xe3, 0x65, 0x70, 0xe7, 0x30, 0x67 } };
1134 
1137  :
1138  public MediaDataPacket
1139  {
1140  public:
1142 
1152  virtual Picture* getMotionData() const = 0;
1153  };
1154 
1155  // {AFE4EEDA-3770-42c3-8381-EE3B55522551}
1156  static const nxpl::NX_GUID IID_StreamReader = { { 0xaf, 0xe4, 0xee, 0xda, 0x37, 0x70, 0x42, 0xc3, 0x83, 0x81, 0xee, 0x3b, 0x55, 0x52, 0x25, 0x51 } };
1157 
1159 
1166  :
1167  public nxpl::PluginInterface
1168  {
1169  public:
1171 
1180  virtual int getNextData( MediaDataPacket** packet ) = 0;
1181 
1183  virtual void interrupt() = 0;
1184  };
1185 
1187  {
1191 
1197  };
1198 
1199  // {CEB97832-E931-4965-9B18-A8A1557107D7}
1200  static const nxpl::NX_GUID IID_DtsArchiveReader = { { 0xce, 0xb9, 0x78, 0x32, 0xe9, 0x31, 0x49, 0x65, 0x9b, 0x18, 0xa8, 0xa1, 0x55, 0x71, 0x7, 0xd7 } };
1201 
1203 
1217  :
1218  public nxpl::PluginInterface
1219  {
1220  public:
1222  {
1224 
1266 
1272  };
1273 
1275  virtual unsigned int getCapabilities() const = 0;
1276 
1278 
1281  virtual int open() = 0;
1283 
1286  virtual StreamReader* getStreamReader() = 0;
1288 
1291  virtual UsecUTCTimestamp startTime() const = 0;
1293 
1296  virtual UsecUTCTimestamp endTime() const = 0;
1298 
1310  virtual int seek(
1311  unsigned int cSeq,
1312  UsecUTCTimestamp timestamp,
1313  bool findKeyFrame,
1314  UsecUTCTimestamp* selectedPosition ) = 0;
1316 
1327  virtual int setReverseMode(
1328  unsigned int cSeq,
1329  bool isReverse,
1330  UsecUTCTimestamp timestamp,
1331  UsecUTCTimestamp* selectedPosition ) = 0;
1333  virtual bool isReverseModeEnabled() const = 0;
1335 
1339  virtual int setMotionDataEnabled( bool motionPresent ) = 0;
1341 
1351  virtual int setQuality(
1352  MediaStreamQuality quality,
1353  bool waitForKeyFrame ) = 0;
1355 
1367  virtual int playRange(
1368  unsigned int cSeq,
1369  UsecUTCTimestamp start,
1370  UsecUTCTimestamp endTimeHint,
1371  unsigned int step ) = 0;
1372 
1374 
1377  virtual void getLastErrorString( char* errorString ) const = 0;
1378  };
1379 
1380  // {C6F06A48-8E3A-4690-8B21-CAC4A955D7ED}
1381  static const nxpl::NX_GUID IID_CameraMotionDataProvider = { { 0xc6, 0xf0, 0x6a, 0x48, 0x8e, 0x3a, 0x46, 0x90, 0x8b, 0x21, 0xca, 0xc4, 0xa9, 0x55, 0xd7, 0xed } };
1382 
1385  :
1386  public nxpl::PluginInterface
1387  {
1388  public:
1389  //TODO for future use
1390  };
1391 
1393 
1394  // {872F473F-72CF-4397-81E6-C06D42E97113}
1395  static const nxpl::NX_GUID IID_CameraRelayIOManager = { { 0x87, 0x2f, 0x47, 0x3f, 0x72, 0xcf, 0x43, 0x97, 0x81, 0xe6, 0xc0, 0x6d, 0x42, 0xe9, 0x71, 0x13 } };
1396 
1397  static const int MAX_ID_LEN = 64;
1398  static const int MAX_RELAY_PORT_COUNT = 32;
1399 
1401 
1405  :
1406  public nxpl::PluginInterface
1407  {
1408  public:
1410 
1415  virtual int getRelayOutputList( char** idList, int* idNum ) const = 0;
1416 
1418 
1423  virtual int getInputPortList( char** idList, int* idNum ) const = 0;
1424 
1426 
1432  virtual int setRelayOutputState(
1433  const char* outputID,
1434  int activate,
1435  unsigned int autoResetTimeoutMS ) = 0;
1436 
1438 
1443  virtual int startInputPortMonitoring() = 0;
1444 
1446 
1453  virtual void stopInputPortMonitoring() = 0;
1454 
1456 
1460  virtual void registerEventHandler( CameraInputEventHandler* handler ) = 0;
1461 
1463 
1472  virtual void unregisterEventHandler( CameraInputEventHandler* handler ) = 0;
1473 
1475 
1478  virtual void getLastErrorString( char* errorString ) const = 0;
1479  };
1480 
1481  // {CC1E749F-2EC6-4b73-BEC9-8F2AE9B7FCCE}
1482  static const nxpl::NX_GUID IID_CameraInputEventHandler = { { 0xcc, 0x1e, 0x74, 0x9f, 0x2e, 0xc6, 0x4b, 0x73, 0xbe, 0xc9, 0x8f, 0x2a, 0xe9, 0xb7, 0xfc, 0xce } };
1483 
1486  :
1487  public nxpl::PluginInterface
1488  {
1489  public:
1490  virtual ~CameraInputEventHandler() {}
1491 
1493 
1500  virtual void inputPortStateChanged(
1501  CameraRelayIOManager* source,
1502  const char* inputPortID,
1503  int newState,
1504  unsigned long int timestamp ) = 0;
1505  };
1506 }
1507 
1508 #endif //NX_CAMERA_PLUGIN_H
Resolution resolution
Guess what.
Definition: camera_plugin.h:288
VMS Camera Integration Plugin API (c++)
Definition: camera_plugin.h:30
virtual int getEncoderCount(int *encoderCount) const =0
Provides maximum number of available encoders.
Camera supports absolute positioning in device-specific coordinate space.
Definition: camera_plugin.h:900
virtual const void * scanLine(int planeNumber, int lineNumber) const =0
Returns pointer to horizontal line lineNumber (starting with 0) of plane planeNumber.
CameraCapability3
Definition: camera_plugin.h:824
virtual bool next()=0
Camera sends absolute timestamps in media stream.
Definition: camera_plugin.h:595
virtual int extradataSize() const =0
Returns size of extradata blob in bytes.
virtual unsigned int dataSize() const =0
Returns size (in bytes) of packet&#39;s data.
int bitrate
in bps
Definition: camera_plugin.h:393
char modelName[256]
Camera model name in any human readable format. MUST NOT be empty.
Definition: camera_plugin.h:76
signed 32 bits, planar
Definition: camera_plugin.h:377
Set of options, used to search archive.
Definition: camera_plugin.h:708
virtual unsigned int cSeq() const =0
Returns sequence number of command this packet belongs to.
virtual StreamReader * getStreamReader()=0
Returns stream reader.
int width
Width in pixels.
Definition: camera_plugin.h:272
virtual int width() const =0
Width (pixels)
Provides encoder parameter configuration and media stream access (by providing media stream url) ...
Definition: camera_plugin.h:307
virtual int getMaxBitrate(int *maxBitrate) const =0
Returns maximum bitrate in Kbps. 0 is interpreted as unlimited bitrate value.
virtual void setCredentials(const char *username, const char *password)=0
Set credentials for camera access.
char auxiliaryData[256]
Any data in implementation defined format (for internal plugin usage)
Definition: camera_plugin.h:84
Extends BaseCameraManager2 by adding editable parameters.
Definition: camera_plugin.h:819
virtual int getReservedModelList(char **modelList, int *count)=0
Get model names, reserved by the plugin.
Definition: camera_plugin.h:1122
CoordinateSpace
Definition: camera_plugin.h:908
if present, nxcip::BaseCameraManager2::find supports ArchiveSearchOptions::motionMask() ...
Definition: camera_plugin.h:775
virtual void getLastErrorString(char *errorString) const =0
Returns text description of the last error.
DataPacketType
Type of packets provided by StreamReader.
Definition: camera_plugin.h:1007
Provides access to motion detection support, implemented on camera.
Definition: camera_plugin.h:1384
bool descSortOrder
Definition: camera_plugin.h:748
virtual unsigned int channelNumber() const =0
Definition: camera_plugin.h:920
static const int NX_INTERRUPTED
Blocking call has been interrupted (e.g., by StreamReader::interrupt)
Definition: camera_plugin.h:55
virtual int audioExtradataSize() const =0
Returns size of audio extra data in bytes.
virtual int getResolutionList(ResolutionInfo *infoList, int *infoListCount) const =0
Returns supported resolution list.
provides media stream through StreamReader interface, otherwise - CameraMediaEncoder::getMediaUrl is ...
Definition: camera_plugin.h:587
allow multiple instances on a same IP address
Definition: camera_plugin.h:585
virtual int height() const =0
Height (pixels)
virtual int getConfiguredLiveStreamReader(LiveStreamConfig *config, StreamReader **reader)=0
Returns configured stream reader, providing live data stream. Required method!
virtual bool atEnd() const =0
virtual void getVendorName(char *buf) const =0
Returns utf-8 camera vendor name.
virtual CameraMotionDataProvider * getCameraMotionDataProvider() const =0
MUST return not-NULL if hardwareMotionCapability is present.
virtual int setQuality(MediaStreamQuality quality, bool waitForKeyFrame)=0
Select media stream quality (used for dynamic media stream adaptation)
float maxFps
Maximum fps, allowed for resolution.
Definition: camera_plugin.h:290
virtual const char * audioExtradata() const =0
Returns pointer to audio extra data.
CameraCapability
Enumeration of supported camera capabilities (bit flags)
Definition: camera_plugin.h:576
Definition: camera_plugin.h:255
Definition: camera_plugin.h:444
Camera supports absolute pan.
Definition: camera_plugin.h:893
if this flag is enabled, CameraRelayIOManager MUST be implemented
Definition: camera_plugin.h:580
Camera supports absolute zoom.
Definition: camera_plugin.h:895
virtual void inputPortStateChanged(CameraRelayIOManager *source, const char *inputPortID, int newState, unsigned long int timestamp)=0
Called by CameraRelayIOManager on input port event.
virtual void unregisterEventHandler(CameraInputEventHandler *handler)=0
Removes handler from event receiver list.
virtual void stopInputPortMonitoring()=0
Stops input port monitoring if internal monitoring counter has reached zero.
Contains resolution and maximum fps, supported by camera for this resolution.
Definition: camera_plugin.h:285
virtual int continuousMove(double panSpeed, double tiltSpeed, double zoomSpeed)=0
Starts or stops continuous PTZ movement.
Camera is bound to a particular server.
Definition: camera_plugin.h:598
virtual bool isReverseModeEnabled() const =0
Returns true if reverse mode is currently on.
Base class for every interface, provided by plugin.
Definition: plugin_api.h:44
virtual const char * getParametersDescriptionXML() const =0
Returns XML describing camera parameters.
virtual unsigned int flags() const =0
Returns combination of values from MediaDataPacket::Flags enumeration.
Flags
Definition: camera_plugin.h:1039
virtual int setFps(const float &fps, float *selectedFps)=0
virtual CompressionType codecType() const =0
virtual int planeCount() const =0
Returns number of planes in picture (this depends on format)
virtual UsecUTCTimestamp startTime() const =0
Returns timestamp (usec (microseconds) since 1970-01-01, UTC) of oldest data, present in the archive...
Definition: camera_plugin.h:365
virtual void interrupt()=0
Interrupt StreamReader::getNextData blocked in other thread.
camera parameters can be read/set even if camera is not accessible at the moment
Definition: camera_plugin.h:589
bool keepSmallChunks
Definition: camera_plugin.h:738
virtual int getRelayOutputList(char **idList, int *idNum) const =0
Returns list of IDs of available relay output ports.
virtual int seek(unsigned int cSeq, UsecUTCTimestamp timestamp, bool findKeyFrame, UsecUTCTimestamp *selectedPosition)=0
Seek to specified position in stream.
Used for reading media stream from camera.
Definition: camera_plugin.h:1165
e.g., h.264 IDR frame
Definition: camera_plugin.h:1042
virtual int absoluteMove(CoordinateSpace space, double pan, double tilt, double zoom, double speed)=0
Sets camera PTZ position in the given coordinate space.
virtual StreamReader * getLiveStreamReader()=0
Returns stream reader, providing live data stream.
virtual void goToBeginning()=0
Move cursor to the first position.
virtual void * data()=0
signed 16 bits, planar
Definition: camera_plugin.h:376
CameraCapability2
Enumeration of supported camera capabilities (bit flags)
Definition: camera_plugin.h:773
signed 16 bits
Definition: camera_plugin.h:371
Receives events on input port state change.
Definition: camera_plugin.h:1485
Definition: camera_plugin.h:1104
Default quality SHOULD be high quality.
Definition: camera_plugin.h:1189
Definition: camera_plugin.h:509
char url[MAX_TEXT_LEN]
Camera management url. Can contain just address. MUST NOT be empty.
Definition: camera_plugin.h:82
virtual const char * extradata() const =0
Returns pointer to extradata blob.
static const unsigned int MEDIA_DATA_BUFFER_ALIGNMENT
Required alignment of MediaDataPacket::data() buffer.
Definition: camera_plugin.h:1025
virtual int getFlip(int *flip)=0
Gets the camera streams&#39;s flipped state.
Picture * motionMask
Definition: camera_plugin.h:720
int32_t reserved_head
reserved, do not use
Definition: camera_plugin.h:451
Provides access to archive, stored on camera.
Definition: camera_plugin.h:1216
SampleType
Definition: camera_plugin.h:367
if set, camera supports audio
Definition: camera_plugin.h:582
if present, nxcip::BaseCameraManager3::setMotionMask is implemented
Definition: camera_plugin.h:776
virtual int setRelayOutputState(const char *outputID, int activate, unsigned int autoResetTimeoutMS)=0
Change state of relay output port.
virtual unsigned int getCapabilities() const =0
Returns bit mask with supported capabilities.
motion data can be provided in media stream
Definition: camera_plugin.h:1271
GUID of plugin interface.
Definition: plugin_api.h:26
virtual int getMediaUrl(char *urlBuf) const =0
Returns url of media stream as NULL-terminated utf-8 string.
virtual int setMotionDataEnabled(bool motionPresent)=0
Toggle motion data in media stream on/off.
This interface is used to find cameras and create BaseCameraManager instance.
Definition: camera_plugin.h:164
virtual int findCameras(CameraInfo *cameras, const char *serverURL)=0
Vendor-specific camera search method. Returns list of found cameras.
virtual UsecUTCTimestamp timestamp() const =0
Packet&#39;s timestamp (usec (microseconds) since 1970-01-01, UTC)
Extends BaseCameraManager by adding remote archive storage support (e.g., storage is mounted directly...
Definition: camera_plugin.h:767
Logical coordinate space — degrees for pan, tilt and fov (zoom).
Definition: camera_plugin.h:911
virtual int open()=0
Initialize connection to archive.
virtual int checkHostAddress(CameraInfo *cameras, const char *address, const char *login, const char *password)=0
Check host for camera presence.
Contains base camera information.
Definition: camera_plugin.h:73
Audio packet. Can contain multiple audio frames.
Definition: camera_plugin.h:1010
Capabilities
Definition: camera_plugin.h:1221
CameraInfo()
Initializes all values with zeros/empty strings.
Definition: camera_plugin.h:91
virtual int setBitrate(int bitrateKbps, int *selectedBitrateKbps)=0
int32_t codec
Definition: camera_plugin.h:453
Resolution of video stream picture.
Definition: camera_plugin.h:269
virtual void getLastErrorString(char *errorString) const =0
Returns text description of the last error.
if second stream is running whatever megapixel it has => first stream can get maxMegapixels - seconds...
Definition: camera_plugin.h:584
static const unsigned int MEDIA_PACKET_BUFFER_PADDING_SIZE
Required padding after media data (see MediaDataPacket::data() description)
Definition: camera_plugin.h:1027
virtual int startInputPortMonitoring()=0
Starts relay input monitoring or increments internal counter, if already started. ...
Pan-tilt-zoom management.
Definition: camera_plugin.h:880
Camera supports continuous tilt.
Definition: camera_plugin.h:890
camera&#39;s media streams are editable and can be provided directly via setProperty API call...
Definition: camera_plugin.h:594
virtual int getParamValue(const char *paramName, char *valueBuf, int *valueBufSize) const =0
Reads value of parameter paramName.
float
Definition: camera_plugin.h:373
Definition: camera_plugin.h:246
Picture.
Definition: camera_plugin.h:651
Extends CameraMediaEncoder by adding functionality for plugin to directly provide live media stream...
Definition: camera_plugin.h:420
signed 32 bits
Definition: camera_plugin.h:372
char defaultPassword[256]
Plugin can specify default credentials to use with camera.
Definition: camera_plugin.h:88
if present, nxcip::BaseCameraManager3::setMotionMask is implemented
Definition: camera_plugin.h:591
unsigned 8 bits
Definition: camera_plugin.h:370
Relay input/output management.
Definition: camera_plugin.h:1404
char firmware[256]
Firmware version in any human readable format. Optional.
Definition: camera_plugin.h:78
Definition: camera_plugin.h:121
Low quality.
Definition: camera_plugin.h:1196
double, planar
Definition: camera_plugin.h:379
Signals that reverse playback by GOP (group of picture) reordering is supported.
Definition: camera_plugin.h:1264
virtual void getLastErrorString(char *errorString) const =0
Returns text description of last error.
virtual int getCameraCapabilities(unsigned int *capabilitiesMask) const =0
Return bit set of camera capabilities (CameraCapability enumeration)
virtual int getCapabilities() const =0
Returns bitset of Capability enumeration members.
Camera supports flip state queries.
Definition: camera_plugin.h:897
set in first packet of gop block of reverse stream (see nxcip::DtsArchiveReader::setReverseMode) ...
Definition: camera_plugin.h:1046
camera supports hardware motion. Plugin, returning this flag, MUST implement BaseCameraManager::nativ...
Definition: camera_plugin.h:578
virtual int getCameraInfo(CameraInfo *info) const =0
Fills info struct with camera data.
virtual UsecUTCTimestamp endTime() const =0
Returns timestamp (usec (microseconds) since 1970-01-01, UTC) of newest data, present in the archive...
packet has been generated during playback of reverse stream. Packets of type dptEmpty MUST have this ...
Definition: camera_plugin.h:1044
if this flag is enabled, CameraRelayIOManager MUST be implemented
Definition: camera_plugin.h:579
virtual int fromUpnpData(const char *upnpXMLData, int upnpXMLDataSize, CameraInfo *cameraInfo)=0
UPNP camera search method.
virtual int getPosition(CoordinateSpace space, double *pan, double *tilt, double *zoom)=0
Gets PTZ position from camera in the given coordinate space.
virtual Picture * getMotionData() const =0
Returns motion data. Can be NULL, if no motion.
Video packet. Usually contains one frame. Video packet class MUST inherit nxcip::VideoDataPacket.
Definition: camera_plugin.h:1012
virtual CameraPtzManager * getPtzManager() const =0
MUST return not-NULL if ptzCapability is present.
Array of time periods.
Definition: camera_plugin.h:684
if present, nxcip::BaseCameraManager2::find supports ArchiveSearchOptions::motionMask() ...
Definition: camera_plugin.h:590
Definition: camera_plugin.h:500
virtual int find(ArchiveSearchOptions *searchOptions, TimePeriods **timePeriods) const =0
Find regions of archive, satisfying given conditions.
virtual int getInputPortList(char **idList, int *idNum) const =0
Returns list of IDs of available relay input ports.
virtual DataPacketType type() const =0
Packet type.
virtual void registerEventHandler(CameraInputEventHandler *handler)=0
Registers handler as event receiver.
unsigned 8 bits, planar
Definition: camera_plugin.h:375
float, pl`anar
Definition: camera_plugin.h:378
virtual CameraRelayIOManager * getCameraRelayIOManager() const =0
MUST return not-NULL if BaseCameraManager::relayInputCapability is present.
virtual int getAudioFormat(AudioFormat *audioFormat) const =0
Returns audio format, if audio is supported.
packet will be tested if it&#39;s a I-Frame. Use it if plugin can&#39;t set fKeyPacket
Definition: camera_plugin.h:592
Camera supports continuous zoom.
Definition: camera_plugin.h:891
if this flag is enabled, CameraPTZManager MUST be implemented
Definition: camera_plugin.h:581
int limit
Definition: camera_plugin.h:743
char uid[256]
Camera&#39;s unique identifier. MAC address can be used. MUST NOT be empty.
Definition: camera_plugin.h:80
virtual int setAudioEnabled(int audioEnabled)=0
Turn on/off audio on ALL encoders.
signed 64 bits, planar
Definition: camera_plugin.h:381
signed 64 bits
Definition: camera_plugin.h:380
Camera supports absolute tilt.
Definition: camera_plugin.h:894
virtual int getLimits(CoordinateSpace space, Limits *limits)=0
Gets PTZ limits of the camera.
#define LL
Definition: debug.h:142
camera provides relative timestamps. It need to align them to the current time.
Definition: camera_plugin.h:593
virtual int setParamValue(const char *paramName, const char *value)=0
Set value of parameter paramName to value.
Capability
Definition: camera_plugin.h:887
Provides base camera operations: getting/settings fps, resolution, bitrate, media stream url(s)...
Definition: camera_plugin.h:536
UsecUTCTimestamp startTime
Min data timestamp that is of interest.
Definition: camera_plugin.h:722
camera has archive storage and provides access to its archive
Definition: camera_plugin.h:586
virtual int getVideoFormat(CompressionType *codec, PixelFormat *pixelFormat) const =0
Returns video format. Optional method.
virtual const void * data() const =0
Coded media stream data.
int32_t flags
Definition: camera_plugin.h:452
virtual int fromMDNSData(const char *discoveryAddress, const unsigned char *mdnsResponsePacket, int mdnsResponsePacketSize, CameraInfo *cameraInfo)=0
MDNS camera search method.
virtual int getNextData(MediaDataPacket **packet)=0
Returns media packet or NULL in case of error.
char defaultLogin[256]
Plugin can specify default credentials to use with camera.
Definition: camera_plugin.h:86
Portion of media data.
Definition: camera_plugin.h:1034
Server should not open video from camera at its will.
Definition: camera_plugin.h:599
Camera supports coordinate space limits queries.
Definition: camera_plugin.h:898
Video packet. MUST contain complete frame (or field in case of interlaced video)
Definition: camera_plugin.h:1136
Camera supports continuous pan.
Definition: camera_plugin.h:889
virtual int xStride(int planeNumber) const =0
Length of horizontal line (in bytes) of plane planeNumber.
virtual PixelFormat pixelFormat() const =0
Returns pixel format.
virtual int setMediaUrl(const char url[nxcip::MAX_TEXT_LEN])=0
virtual int setResolution(const Resolution &resolution)=0
Change resolution on specified encoder.
PixelFormat
Definition: camera_plugin_types.h:39
int height
Height in pixels.
Definition: camera_plugin.h:274
virtual int playRange(unsigned int cSeq, UsecUTCTimestamp start, UsecUTCTimestamp endTimeHint, unsigned int step)=0
Play time range [start; end) skipping frames.
UsecUTCTimestamp endTime
Max data timestamp that is of interest.
Definition: camera_plugin.h:724
Analytics Engine mustn&#39;t bind to the Device.
Definition: camera_plugin.h:600
Definition: camera_plugin.h:1052
virtual int setMotionMask(Picture *motionMask)=0
If camera plugin implements this method, it MUST report motion only on for region specified (motionMa...
virtual int setReverseMode(unsigned int cSeq, bool isReverse, UsecUTCTimestamp timestamp, UsecUTCTimestamp *selectedPosition)=0
Set playback direction (forward/reverse)
unsigned long long periodDetailLevel
Definition: camera_plugin.h:732
MediaStreamQuality
Definition: camera_plugin.h:1186
Camera parameters can be read/set even if camera is not accessible at the moment. ...
Definition: camera_plugin.h:826
Camera supports multicast streaming.
Definition: camera_plugin.h:597
virtual BaseCameraManager * createCameraManager(const CameraInfo &info)=0
Instantiates camera manager instance based on info.
Definition: camera_plugin.h:470
Packet containing no data (e.g., signals end of stream)
Definition: camera_plugin.h:1017
Device-specific coordinate space.
Definition: camera_plugin.h:910
High quality.
Definition: camera_plugin.h:1194
virtual int getEncoder(int encoderIndex, CameraMediaEncoder **encoderPtr)=0
Returns encoder by index.
static const int NX_TRY_AGAIN
Operation could not be completed now, but it may still be available later.
Definition: camera_plugin.h:53
virtual int createDtsArchiveReader(DtsArchiveReader **dtsArchiveReader) const =0
Returns not NULL if BaseCameraManager::dtsArchiveCapability is supported.
Camera does not allow to change stream quality/fps.
Definition: camera_plugin.h:596
it is allowed to detect motion by primary stream (if no dual streaming on camera) ...
Definition: camera_plugin.h:588
double
Definition: camera_plugin.h:374
frame skipping with DtsArchiveReader::setSkipFrames method is supported
Definition: camera_plugin.h:1269
if second stream is running whatever fps it has => first stream can get maximumFps - secondstreamFps ...
Definition: camera_plugin.h:583