OPAL  Version 3.18.8
vidcodec.h
Go to the documentation of this file.
1 /*
2  * vidcodec.h
3  *
4  * Uncompressed video handler
5  *
6  * Open Phone Abstraction Library
7  *
8  * Copyright (c) 2003 Equivalence Pty. Ltd.
9  *
10  * The contents of this file are subject to the Mozilla Public License
11  * Version 1.0 (the "License"); you may not use this file except in
12  * compliance with the License. You may obtain a copy of the License at
13  * http://www.mozilla.org/MPL/
14  *
15  * Software distributed under the License is distributed on an "AS IS"
16  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
17  * the License for the specific language governing rights and limitations
18  * under the License.
19  *
20  * The Original Code is Open Phone Abstraction Library.
21  *
22  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
23  *
24  * Contributor(s):
25  */
26 
27 #ifndef OPAL_CODEC_VIDCODEC_H
28 #define OPAL_CODEC_VIDCODEC_H
29 
30 #ifdef P_USE_PRAGMA
31 #pragma interface
32 #endif
33 
34 #include <opal_config.h>
35 
36 #include <opal/transcoders.h>
37 
38 #if OPAL_VIDEO
39 
40 #if OPAL_H323
41 #include <h323/h323caps.h>
42 #endif
43 
44 #include <codec/opalplugin.h>
45 #include <codec/known.h>
46 
47 
48 extern const OpalVideoFormat & GetOpalRGB24();
49 extern const OpalVideoFormat & GetOpalRGB32();
50 extern const OpalVideoFormat & GetOpalBGR24();
51 extern const OpalVideoFormat & GetOpalBGR32();
52 extern const OpalVideoFormat & GetOpalYUV420P();
53 
54 #define OpalRGB24 GetOpalRGB24()
55 #define OpalRGB32 GetOpalRGB32()
56 #define OpalBGR24 GetOpalBGR24()
57 #define OpalBGR32 GetOpalBGR32()
58 #define OpalYUV420P GetOpalYUV420P()
59 
60 #define OPAL_REGISTER_RAW_VIDEO() \
61  GetOpalRGB24(); \
62  GetOpalRGB32(); \
63  GetOpalBGR24(); \
64  GetOpalBGR32(); \
65  GetOpalYUV420P()
66 
67 
69 
74 class OpalIntraFrameControl : public PObject
75 {
76  PCLASSINFO(OpalIntraFrameControl, PObject);
77  public:
78  static PTimeInterval const DefaultMinThrottle;
79  static PTimeInterval const DefaultMaxThrottle;
80  static PTimeInterval const DefaultPeriodic;
81 
83  const PTimeInterval & minThrottle = DefaultMinThrottle,
84  const PTimeInterval & maxThrottle = DefaultMaxThrottle,
85  const PTimeInterval & periodic = DefaultPeriodic
86  );
87 
90  void IntraFrameRequest();
91 
94  bool RequireIntraFrame();
95 
98  void IntraFrameDetected();
99 
103  void SetTimes(
104  const PTimeInterval & minThrottle,
105  const PTimeInterval & maxThrottle,
106  const PTimeInterval & periodic,
107  const PTimeInterval & retry
108  );
109 
110  protected:
111  PTimeInterval m_minThrottleTime;
112  PTimeInterval m_maxThrottleTime;
113  PTimeInterval m_periodicTime;
114  PTimeInterval m_retryTime;
115  PTimeInterval m_currentThrottleTime;
116 
117  enum State
118  {
124  } m_state;
125 
126  unsigned m_stuckCount;
127 
128  PDECLARE_MUTEX(m_mutex);
131  PDECLARE_NOTIFIER(PTimer, OpalIntraFrameControl, OnTimedRequest);
132 };
133 
135 
143 {
144  PCLASSINFO(OpalVideoTranscoder, OpalTranscoder);
145  public:
147 
155  );
157 
160 #if OPAL_STATISTICS
161  virtual void GetStatistics(OpalMediaStatistics & statistics) const;
162 #endif
163 
177  virtual bool UpdateMediaFormats(
180  );
181 
188  virtual PINDEX GetOptimalDataFrameSize(
189  PBoolean input
190  ) const;
191 
201  virtual PBoolean ExecuteCommand(
202  const OpalMediaCommand & command
203  );
204 
215  virtual PBoolean Convert(
216  const RTP_DataFrame & input,
217  RTP_DataFrame & output
218  );
219 
220 
221  virtual bool HasErrorConcealment() const { return m_errorConcealment; }
222 
223  virtual bool ShouldDropFrame(RTP_Timestamp ts);
224  virtual void UpdateFrameDrop(const RTP_DataFrameList & encoded);
225 
226  bool WasLastFrameIFrame() const { return m_lastFrameWasIFrame; }
227  virtual void SendIFrameRequest(unsigned sequenceNumber, unsigned timestamp);
228  virtual bool HandleIFrameRequest();
229 
231  const PTimeInterval & minThrottle,
232  const PTimeInterval & maxThrottle,
233  const PTimeInterval & periodic,
234  const PTimeInterval & retry
235  ) { m_encodingIntraFrameControl.SetTimes(minThrottle, maxThrottle, periodic, retry); }
236 
238  const PTimeInterval & minThrottle,
239  const PTimeInterval & maxThrottle,
240  const PTimeInterval & periodic,
241  const PTimeInterval & retry
242  ) { m_decodingIntraFrameControl.SetTimes(minThrottle, maxThrottle, periodic, retry); }
244 
245  protected:
246  PINDEX m_inDataSize;
252 
253  unsigned m_frameDropRate;
256  unsigned m_framesDropped;
257 
260 };
261 
262 
264 
265 OPAL_DEFINE_MEDIA_COMMAND(OpalVideoFreezePicture, "Freeze Picture", OpalMediaType::Video());
266 
273 {
274  PCLASSINFO_WITH_CLONE(OpalVideoUpdatePicture, OpalMediaCommand);
275  public:
277  unsigned sessionID = 0,
278  unsigned ssrc = 0
279  );
280  virtual PString GetName() const;
281 };
282 
289 {
290  PCLASSINFO_WITH_CLONE(OpalVideoPictureLoss, OpalVideoUpdatePicture);
291  public:
293  unsigned sequenceNumber = 0,
294  unsigned timestamp = 0,
295  unsigned sessionID = 0,
296  unsigned ssrc = 0
297  );
298 
299  virtual PString GetName() const;
300 
301  unsigned GetSequenceNumber() const { return m_sequenceNumber; }
302  unsigned GetTimestamp() const { return m_timestamp; }
303 
304  protected:
306  unsigned m_timestamp;
307 };
308 
309 
319 {
320  PCLASSINFO_WITH_CLONE(OpalTemporalSpatialTradeOff, OpalMediaCommand);
321  public:
323  unsigned tradeoff,
324  unsigned sessionID = 0,
325  unsigned ssrc = 0
326  );
327 
328  virtual PString GetName() const;
329 
330  enum {
333  };
334 
335  unsigned GetTradeOff() const { return m_tradeOff; }
336 
337  protected:
338  unsigned m_tradeOff;
339 };
340 
341 
342 #endif // OPAL_VIDEO
343 
344 #endif // OPAL_CODEC_VIDCODEC_H
345 
const OpalVideoFormat & GetOpalYUV420P()
RTP_Timestamp m_lastTimestamp
Definition: vidcodec.h:255
virtual PBoolean ExecuteCommand(const OpalMediaCommand &command)
void SetEncodingIntraFrameControlTimes(const PTimeInterval &minThrottle, const PTimeInterval &maxThrottle, const PTimeInterval &periodic, const PTimeInterval &retry)
Definition: vidcodec.h:230
OPAL_DEFINE_MEDIA_COMMAND(OpalVideoFreezePicture,"Freeze Picture", OpalMediaType::Video())
virtual void GetStatistics(OpalMediaStatistics &statistics) const
OpalVideoUpdatePicture(unsigned sessionID=0, unsigned ssrc=0)
unsigned m_timestamp
Definition: vidcodec.h:306
Definition: mediacmd.h:43
virtual PBoolean Convert(const RTP_DataFrame &input, RTP_DataFrame &output)
virtual void SendIFrameRequest(unsigned sequenceNumber, unsigned timestamp)
PINDEX m_outDataSize
Definition: vidcodec.h:247
OpalVideoTranscoder(const OpalMediaFormat &inputMediaFormat, const OpalMediaFormat &outputMediaFormat)
const OpalVideoFormat & GetOpalRGB24()
void SetDecodingIntraFrameControlTimes(const PTimeInterval &minThrottle, const PTimeInterval &maxThrottle, const PTimeInterval &periodic, const PTimeInterval &retry)
Definition: vidcodec.h:237
static const OpalMediaType & Video()
PTime m_lastRequest
Definition: vidcodec.h:129
State
Definition: vidcodec.h:117
Definition: vidcodec.h:121
OpalIntraFrameControl m_encodingIntraFrameControl
Definition: vidcodec.h:258
static PTimeInterval const DefaultMinThrottle
Definition: vidcodec.h:78
PTimeInterval m_minThrottleTime
Definition: vidcodec.h:111
static PTimeInterval const DefaultPeriodic
Definition: vidcodec.h:80
virtual PString GetName() const
static PTimeInterval const DefaultMaxThrottle
Definition: vidcodec.h:79
unsigned GetSequenceNumber() const
Definition: vidcodec.h:301
bool WasLastFrameIFrame() const
Definition: vidcodec.h:226
Definition: opalplugin.h:946
PTimeInterval m_periodicTime
Definition: vidcodec.h:113
PINDEX m_inDataSize
Definition: vidcodec.h:246
virtual PString GetName() const
OpalTemporalSpatialTradeOff(unsigned tradeoff, unsigned sessionID=0, unsigned ssrc=0)
Definition: vidcodec.h:123
bool m_freezeTillIFrame
Definition: vidcodec.h:249
Definition: rtp.h:540
Definition: mediafmt.h:806
OpalIntraFrameControl m_decodingIntraFrameControl
Definition: vidcodec.h:259
virtual bool ShouldDropFrame(RTP_Timestamp ts)
bool m_frozenTillIFrame
Definition: vidcodec.h:250
PDECLARE_NOTIFIER(PTimer, OpalIntraFrameControl, OnTimedRequest)
PluginCodec_Video_FrameHeader FrameHeader
Definition: vidcodec.h:146
Definition: transcoders.h:134
PTimeInterval m_retryTime
Definition: vidcodec.h:114
const OpalVideoFormat & GetOpalRGB32()
int m_frameDropBits
Definition: vidcodec.h:254
bool m_errorConcealment
Definition: vidcodec.h:248
OpalMediaFormat inputMediaFormat
Definition: transcoders.h:104
virtual PString GetName() const
PTimer m_requestTimer
Definition: vidcodec.h:130
virtual bool HasErrorConcealment() const
Definition: vidcodec.h:221
Definition: vidcodec.h:120
virtual void UpdateFrameDrop(const RTP_DataFrameList &encoded)
Definition: vidcodec.h:122
bool m_lastFrameWasIFrame
Definition: vidcodec.h:251
Definition: vidcodec.h:74
uint32_t RTP_Timestamp
Definition: rtp.h:44
OpalVideoPictureLoss(unsigned sequenceNumber=0, unsigned timestamp=0, unsigned sessionID=0, unsigned ssrc=0)
virtual bool HandleIFrameRequest()
Definition: vidcodec.h:318
Definition: vidcodec.h:272
PTimeInterval m_currentThrottleTime
Definition: vidcodec.h:115
unsigned m_framesDropped
Definition: vidcodec.h:256
enum OpalIntraFrameControl::State m_state
virtual PINDEX GetOptimalDataFrameSize(PBoolean input) const
Definition: vidcodec.h:119
PTimeInterval m_maxThrottleTime
Definition: vidcodec.h:112
const OpalVideoFormat & GetOpalBGR32()
Definition: mediasession.h:210
virtual bool UpdateMediaFormats(const OpalMediaFormat &inputMediaFormat, const OpalMediaFormat &outputMediaFormat)
Definition: mediafmt.h:1481
OpalIntraFrameControl(const PTimeInterval &minThrottle=DefaultMinThrottle, const PTimeInterval &maxThrottle=DefaultMaxThrottle, const PTimeInterval &periodic=DefaultPeriodic)
void SetTimes(const PTimeInterval &minThrottle, const PTimeInterval &maxThrottle, const PTimeInterval &periodic, const PTimeInterval &retry)
OpalMediaFormat outputMediaFormat
Definition: transcoders.h:105
unsigned m_tradeOff
Definition: vidcodec.h:338
unsigned m_frameDropRate
Definition: vidcodec.h:253
unsigned GetTimestamp() const
Definition: vidcodec.h:302
Definition: vidcodec.h:288
unsigned GetTradeOff() const
Definition: vidcodec.h:335
unsigned m_sequenceNumber
Definition: vidcodec.h:305
Definition: vidcodec.h:142
const OpalVideoFormat & GetOpalBGR24()
unsigned m_stuckCount
Definition: vidcodec.h:126