OPAL  Version 3.18.8
h281handler.h
Go to the documentation of this file.
1 /*
2  * h281handler.h
3  *
4  * H.281 protocol handler implementation for the OpenH323 Project.
5  *
6  * Copyright (c) 2006 Network for Educational Technology, ETH Zurich.
7  * Written by Hannes Friederich.
8  *
9  * The contents of this file are subject to the Mozilla Public License
10  * Version 1.0 (the "License"); you may not use this file except in
11  * compliance with the License. You may obtain a copy of the License at
12  * http://www.mozilla.org/MPL/
13  *
14  * Software distributed under the License is distributed on an "AS IS"
15  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
16  * the License for the specific language governing rights and limitations
17  * under the License.
18  *
19  * Contributor(s): ______________________________________.
20  */
21 
22 #ifndef OPAL_H224_H281HANDLER_H
23 #define OPAL_H224_H281HANDLER_H
24 
25 #ifdef P_USE_PRAGMA
26 #pragma interface
27 #endif
28 
29 #ifndef _PTLIB_H
30 #include <ptlib.h>
31 #endif
32 
33 #include <opal_config.h>
34 
35 #if OPAL_HAS_H281
36 
37 #include <h224/h224handler.h>
38 #include <h224/h281.h>
39 
40 class OpalH224Handler;
41 
45 {
46  PCLASSINFO(OpalH281Client, OpalH224Client);
47  public:
50 
51  P_DECLARE_ENUM(VideoSourceIds,
52  CurrentVideoSource,
53  MainCameraId,
54  AuxiliaryCameraId,
55  DocumentCameraId,
56  AuxiliaryDocumentCameraId,
57  VideoPlaybackSourceId,
58  UserDefinedSourceId1,
59  UserDefinedSourceId2,
60  UserDefinedSourceId3,
61  UserDefinedSourceId4,
62  UserDefinedSourceId5,
63  UserDefinedSourceId6,
64  UserDefinedSourceId7,
65  UserDefinedSourceId8,
66  UserDefinedSourceId9,
67  UserDefinedSourceId10
68  );
69 
70  // Predefined source names
71  static const PConstString & MainCamera();
72  static const PConstString & AuxiliaryCamera();
73  static const PConstString & DocumentCamera();
74  static const PConstString & AuxiliaryDocumentCamera();
75  static const PConstString & VideoPlayback();
76 
78  virtual BYTE GetClientID() const { return OpalH224Client::H281ClientID; }
79  virtual bool HasExtraCapabilities() const { return true; }
80 
82  virtual void OnReceivedExtraCapabilities(const BYTE *capabilities, PINDEX size);
83  virtual void OnReceivedMessage(const H224_Frame & message);
84 
85  // Presets
86  unsigned GetLocalNumberOfPresets() const { return m_localNumberOfPresets; }
87  void SetLocalNumberOfPresets(unsigned presets) { m_localNumberOfPresets = presets; }
88 
90 
95  bool Action(PVideoControlInfo::Types type, int direction, const PTimeInterval & duration);
96 
101  bool SelectVideoSource(
102  const PString & source,
104  );
105 
109  void StoreAsPreset(BYTE presetNumber);
110 
113  void ActivatePreset(BYTE presetNumber);
114 
120  void SendExtraCapabilities() const;
121 
122  /*
123  * methods that subclasses can override.
124  * The default handler does not implement FECC on the local side.
125  * Thus, the default behaviour is to do nothing.
126  */
127 
130  virtual void OnRemoteCapabilitiesChanged();
131 
134  virtual void OnStartAction(int directions[PVideoControlInfo::NumTypes]) = 0;
135 
138  virtual void OnStopAction() = 0;
139 
142  virtual void OnSelectVideoSource(const PString & source, H281_Frame::VideoMode videoMode);
143 
146  virtual void OnStoreAsPreset(BYTE presetNumber);
147 
150  virtual void OnActivatePreset(BYTE presetNumber);
151 
154  void SetCapabilityChangedNotifier(const PNotifier & notifier);
155 
161  void SetOnActionNotifier(const PNotifier & notifier);
162 
163  struct Capability
164  {
165  Capability();
166  PINDEX Encode(VideoSourceIds sourceId, BYTE * capabilities, PINDEX offset) const;
167  PINDEX Decode(VideoSourceIds sourceId, const BYTE * capabilities, PINDEX offset);
168 
169  PString m_name;
171 
173  {
174  // First four are from PVideoControlInfo::Types
175  MotionVideo = PVideoControlInfo::NumTypes,
179  };
181 
182 #if PTRACING
183  friend ostream & operator<<(ostream & strm, const Capability & cap);
184 #endif
185  };
186 
190  VideoSourceIds sourceId,
191  const Capability & capability
192  ) { m_localCapability[sourceId == CurrentVideoSource ? m_localSourceId : sourceId] = capability; }
193 
197  VideoSourceIds sourceId
198  ) const { return m_remoteCapability[sourceId == CurrentVideoSource ? m_remoteSourceId : sourceId]; }
199 
200  protected:
201  PDECLARE_NOTIFIER(PTimer, OpalH281Client, ContinueAction);
202  PDECLARE_NOTIFIER(PTimer, OpalH281Client, StopAction);
203  PDECLARE_NOTIFIER(PTimer, OpalH281Client, ReceiveActionTimeout);
204  void SendStopAction();
205 
206  PDECLARE_MUTEX(m_mutex);
207 
209  PNotifier m_onAction;
210 
211  VideoSourceIds m_localSourceId;
212  Capability m_localCapability[NumVideoSourceIds];
215 
216  VideoSourceIds m_remoteSourceId;
217  Capability m_remoteCapability[NumVideoSourceIds];
219 
222  PTimer m_stopTimer;
223 };
224 
225 
229 {
231  public:
233 
235  void Attach(
236  PVideoInputDevice * device,
237  const PString & source = MainCamera()
238  );
239  void Detach(
240  PVideoInputDevice * device
241  );
242  bool SelectVideoDevice(
243  PVideoInputDevice * device,
245  );
246 
247  virtual void OnStartAction(int directions[PVideoControlInfo::NumTypes]);
248  virtual void OnStopAction();
249 
250  protected:
251  PDECLARE_NOTIFIER(PTimer, OpalFarEndCameraControl, StepCamera);
252 
253  PTimeInterval m_stepRate;
254  PVideoInputDevice * m_videoInputDevices[NumVideoSourceIds];
255  int m_step[PVideoControlInfo::NumTypes];
256  PTimer m_stepTimer;
257 };
258 
259 
260 #endif // OPAL_HAS_H281
261 
262 #endif // OPAL_H224_H281HANDLER_H
unsigned m_localNumberOfPresets
Definition: h281handler.h:213
bool SelectVideoDevice(PVideoInputDevice *device, H281_Frame::VideoMode mode=H281_Frame::MotionVideo)
void StoreAsPreset(BYTE presetNumber)
virtual void OnActivatePreset(BYTE presetNumber)
Definition: h224handler.h:130
virtual void OnStartAction(int directions[PVideoControlInfo::NumTypes])=0
virtual void OnStartAction(int directions[PVideoControlInfo::NumTypes])
Definition: h224handler.h:41
bool SelectVideoSource(const PString &source, H281_Frame::VideoMode mode=H281_Frame::MotionVideo)
PDECLARE_NOTIFIER(PTimer, OpalH281Client, ContinueAction)
const Capability & GetRemoteCapability(VideoSourceIds sourceId) const
Definition: h281handler.h:196
Definition: h281.h:53
Capability m_remoteCapability[NumVideoSourceIds]
Definition: h281handler.h:217
VideoSourceIds m_remoteSourceId
Definition: h281handler.h:216
PTimer m_receiveTimer
Definition: h281handler.h:214
void Attach(PVideoInputDevice *device, const PString &source=MainCamera())
Attach an active video input device to be controlled.
static const PConstString & VideoPlayback()
void ActivatePreset(BYTE presetNumber)
VideoMode
Definition: h281.h:52
bool m_attribute[NumAttributes]
Definition: h281handler.h:180
Definition: h224.h:69
PTimer m_continueTimer
Definition: h281handler.h:221
void SetCapabilityChangedNotifier(const PNotifier &notifier)
Definition: h281.h:35
PDECLARE_NOTIFIER(PTimer, OpalFarEndCameraControl, StepCamera)
PTimer m_stepTimer
Definition: h281handler.h:256
Capability m_localCapability[NumVideoSourceIds]
Definition: h281handler.h:212
Definition: h281handler.h:228
bool m_available
Definition: h281handler.h:170
virtual void OnStopAction()=0
unsigned m_remoteNumberOfPresets
Definition: h281handler.h:218
PNotifier m_capabilityChanged
Definition: h281handler.h:208
VideoSourceIds m_localSourceId
Definition: h281handler.h:211
PTimer m_stopTimer
Definition: h281handler.h:222
PTimeInterval m_stepRate
Definition: h281handler.h:253
Definition: h281handler.h:175
H281_Frame m_transmitFrame
Definition: h281handler.h:220
virtual bool HasExtraCapabilities() const
Definition: h281handler.h:79
void Detach(PVideoInputDevice *device)
virtual void OnRemoteCapabilitiesChanged()
void SetLocalNumberOfPresets(unsigned presets)
Definition: h281handler.h:87
void SetOnActionNotifier(const PNotifier &notifier)
PString m_name
Definition: h281handler.h:169
Definition: h281handler.h:163
static const PConstString & AuxiliaryDocumentCamera()
ostream & operator<<(ostream &strm, OpalSilenceDetector::Mode mode)
virtual void OnReceivedMessage(const H224_Frame &message)
void SetLocalCapability(VideoSourceIds sourceId, const Capability &capability)
Definition: h281handler.h:189
Definition: h224handler.h:52
Definition: h281handler.h:178
virtual void OnSelectVideoSource(const PString &source, H281_Frame::VideoMode videoMode)
Definition: h281handler.h:44
PDECLARE_MUTEX(m_mutex)
static const PConstString & MainCamera()
static const PConstString & DocumentCamera()
PNotifier m_onAction
Definition: h281handler.h:209
P_DECLARE_ENUM(VideoSourceIds, CurrentVideoSource, MainCameraId, AuxiliaryCameraId, DocumentCameraId, AuxiliaryDocumentCameraId, VideoPlaybackSourceId, UserDefinedSourceId1, UserDefinedSourceId2, UserDefinedSourceId3, UserDefinedSourceId4, UserDefinedSourceId5, UserDefinedSourceId6, UserDefinedSourceId7, UserDefinedSourceId8, UserDefinedSourceId9, UserDefinedSourceId10)
PVideoInputDevice * m_videoInputDevices[NumVideoSourceIds]
Definition: h281handler.h:254
unsigned GetRemoteNumberOfPresets() const
Definition: h281handler.h:89
virtual void OnStopAction()
bool Action(PVideoControlInfo::Types type, int direction, const PTimeInterval &duration)
PINDEX Encode(VideoSourceIds sourceId, BYTE *capabilities, PINDEX offset) const
static const PConstString & AuxiliaryCamera()
virtual void OnStoreAsPreset(BYTE presetNumber)
void SendStopAction()
int m_step[PVideoControlInfo::NumTypes]
Definition: h281handler.h:255
Attributes
Definition: h281handler.h:172
virtual void OnReceivedExtraCapabilities(const BYTE *capabilities, PINDEX size)
PINDEX Decode(VideoSourceIds sourceId, const BYTE *capabilities, PINDEX offset)
void SendExtraCapabilities() const
virtual BYTE GetClientID() const
Definition: h281handler.h:78
unsigned GetLocalNumberOfPresets() const
Definition: h281handler.h:86