OPAL  Version 3.12.9
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  * $Revision: 24178 $
22  * $Author: rjongbloed $
23  * $Date: 2010-04-06 10:10:56 +1000 (Tue, 06 Apr 2010) $
24  */
25 
26 #ifndef OPAL_H224_H281HANDLER_H
27 #define OPAL_H224_H281HANDLER_H
28 
29 #ifdef P_USE_PRAGMA
30 #pragma interface
31 #endif
32 
33 #ifndef _PTLIB_H
34 #include <ptlib.h>
35 #endif
36 
37 #include <opal/buildopts.h>
38 
39 #include <h224/h224handler.h>
40 #include <h224/h281.h>
41 
42 class OpalH224Handler;
43 
47 class H281VideoSource : public PObject
48 {
49  PCLASSINFO(H281VideoSource, PObject);
50 
51 public:
52 
55 
56  PBoolean IsEnabled() const { return isEnabled; }
57  void SetEnabled(PBoolean flag) { isEnabled = flag; }
58 
59  BYTE GetVideoSourceNumber() const { return (firstOctet >> 4) & 0x0f; }
60  void SetVideoSourceNumber(BYTE number);
61 
62  PBoolean CanMotionVideo() const { return (firstOctet >> 2) & 0x01; }
63  void SetCanMotionVideo(PBoolean flag);
64 
65  PBoolean CanNormalResolutionStillImage() const { return (firstOctet >> 1) & 0x01; }
66  void SetCanNormalResolutionStillImage(PBoolean flag);
67 
68  PBoolean CanDoubleResolutionStillImage() const { return (firstOctet & 0x01); }
69  void SetCanDoubleResolutionStillImage(PBoolean flag);
70 
71  PBoolean CanPan() const { return (secondOctet >> 7) & 0x01; }
72  void SetCanPan(PBoolean flag);
73 
74  PBoolean CanTilt() const { return (secondOctet >> 6) & 0x01; }
75  void SetCanTilt(PBoolean flag);
76 
77  PBoolean CanZoom() const { return (secondOctet >> 5) & 0x01; }
78  void SetCanZoom(PBoolean flag);
79 
80  PBoolean CanFocus() const { return (secondOctet >> 4) & 0x01; }
81  void SetCanFocus(PBoolean flag);
82 
83  void Encode(BYTE *data) const;
84  PBoolean Decode(const BYTE *data);
85 
86 protected:
87 
88  PBoolean isEnabled;
89  BYTE firstOctet;
91 
92 };
93 
97 {
98  PCLASSINFO(OpalH281Handler, PObject);
99 
100 public:
101 
102  OpalH281Handler();
104 
105  enum VideoSource {
107  MainCamera = 0x01,
112  };
113 
115  virtual BYTE GetClientID() const { return OpalH224Client::H281ClientID; }
116  virtual PBoolean HasExtraCapabilities() const { return true; }
117 
119  virtual void OnReceivedExtraCapabilities(const BYTE *capabilities, PINDEX size);
120  virtual void OnReceivedMessage(const H224_Frame & message);
121 
123  void SetLocalNumberOfPresets(BYTE presets) { localNumberOfPresets = presets; }
124 
126 
129 
133  void StartAction(H281_Frame::PanDirection panDirection,
134  H281_Frame::TiltDirection tiltDirection,
135  H281_Frame::ZoomDirection zoomDireciton,
136  H281_Frame::FocusDirection focusDirection);
137 
140  void StopAction();
141 
146  void SelectVideoSource(BYTE videoSourceNumber, H281_Frame::VideoMode videoMode);
147 
151  void StoreAsPreset(BYTE presetNumber);
152 
155  void ActivatePreset(BYTE presetNumber);
156 
162  void SendExtraCapabilities() const;
163 
164  /*
165  * methods that subclasses can override.
166  * The default handler does not implement FECC on the local side.
167  * Thus, the default behaviour is to do nothing.
168  */
169 
172  virtual void OnRemoteCapabilitiesUpdated();
173 
176  virtual void OnStartAction(H281_Frame::PanDirection panDirection,
177  H281_Frame::TiltDirection tiltDirection,
178  H281_Frame::ZoomDirection zoomDirection,
179  H281_Frame::FocusDirection focusDirection);
180 
183  virtual void OnStopAction();
184 
187  virtual void OnSelectVideoSource(BYTE videoSourceNumber, H281_Frame::VideoMode videoMode);
188 
191  virtual void OnStoreAsPreset(BYTE presetNumber);
192 
195  virtual void OnActivatePreset(BYTE presetNumber);
196 
197 protected:
198 
199  PDECLARE_NOTIFIER(PTimer, OpalH281Handler, ContinueAction);
200  PDECLARE_NOTIFIER(PTimer, OpalH281Handler, StopActionLocally);
201 
206 
209 
214  PTimer receiveTimer;
215 };
216 
217 #endif // OPAL_H224_H281HANDLER_H
218