vidcodec.h

Go to the documentation of this file.
00001 /*
00002  * vidcodec.h
00003  *
00004  * Uncompressed video handler
00005  *
00006  * Open Phone Abstraction Library
00007  *
00008  * Copyright (c) 2003 Equivalence Pty. Ltd.
00009  *
00010  * The contents of this file are subject to the Mozilla Public License
00011  * Version 1.0 (the "License"); you may not use this file except in
00012  * compliance with the License. You may obtain a copy of the License at
00013  * http://www.mozilla.org/MPL/
00014  *
00015  * Software distributed under the License is distributed on an "AS IS"
00016  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
00017  * the License for the specific language governing rights and limitations
00018  * under the License.
00019  *
00020  * The Original Code is Open Phone Abstraction Library.
00021  *
00022  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
00023  *
00024  * Contributor(s): 
00025  *
00026  * $Revision: 27792 $
00027  * $Author: rjongbloed $
00028  * $Date: 2012-06-07 21:14:33 -0500 (Thu, 07 Jun 2012) $
00029  */
00030 
00031 #ifndef OPAL_CODEC_VIDCODEC_H
00032 #define OPAL_CODEC_VIDCODEC_H
00033 
00034 #ifdef P_USE_PRAGMA
00035 #pragma interface
00036 #endif
00037 
00038 #include <opal/buildopts.h>
00039 
00040 #include <opal/transcoders.h>
00041 
00042 #if OPAL_VIDEO
00043 
00044 #if OPAL_H323
00045 #include <h323/h323caps.h>
00046 #endif
00047 
00048 #include <codec/opalplugin.h>
00049 
00050 
00051 #define OPAL_RGB24   "RGB24"
00052 #define OPAL_RGB32   "RGB32"
00053 #define OPAL_YUV420P "YUV420P"
00054 
00055 extern const OpalVideoFormat & GetOpalRGB24();
00056 extern const OpalVideoFormat & GetOpalRGB32();
00057 extern const OpalVideoFormat & GetOpalYUV420P();
00058 
00059 #define OpalRGB24   GetOpalRGB24()
00060 #define OpalRGB32   GetOpalRGB32()
00061 #define OpalYUV420P GetOpalYUV420P()
00062 
00063 
00065 
00072 class OpalVideoTranscoder : public OpalTranscoder
00073 {
00074     PCLASSINFO(OpalVideoTranscoder, OpalTranscoder);
00075   public:
00076     typedef PluginCodec_Video_FrameHeader FrameHeader;
00077 
00082     OpalVideoTranscoder(
00083       const OpalMediaFormat & inputMediaFormat,  
00084       const OpalMediaFormat & outputMediaFormat  
00085     );
00087 
00103     virtual bool UpdateMediaFormats(
00104       const OpalMediaFormat & inputMediaFormat,  
00105       const OpalMediaFormat & outputMediaFormat  
00106     );
00107 
00114     virtual PINDEX GetOptimalDataFrameSize(
00115       PBoolean input      
00116     ) const;
00117 
00127     virtual PBoolean ExecuteCommand(
00128       const OpalMediaCommand & command    
00129     );
00130 
00141     virtual PBoolean Convert(
00142       const RTP_DataFrame & input,  
00143       RTP_DataFrame & output        
00144     );
00145 
00146 #if OPAL_STATISTICS
00147     virtual void GetStatistics(OpalMediaStatistics & statistics) const;
00148 #endif
00149 
00150     bool WasLastFrameIFrame() const { return lastFrameWasIFrame; }
00151     void ForceIFrame()              { forceIFrame = true; }
00153 
00154   protected:
00155     PINDEX inDataSize;
00156     PINDEX outDataSize;
00157     bool   forceIFrame;
00158     bool   lastFrameWasIFrame;
00159 
00160     DWORD m_totalFrames;
00161     DWORD m_keyFrames;
00162 };
00163 
00164 
00166 
00167 OPAL_DEFINE_MEDIA_COMMAND(OpalVideoFreezePicture, "Freeze Picture");
00168 
00174 class OpalVideoUpdatePicture : public OpalMediaCommand
00175 {
00176   PCLASSINFO(OpalVideoUpdatePicture, OpalMediaCommand);
00177   public:
00178     virtual PString GetName() const;
00179 };
00180 
00186 class OpalVideoPictureLoss : public OpalVideoUpdatePicture
00187 {
00188   PCLASSINFO(OpalVideoPictureLoss, OpalVideoUpdatePicture);
00189   public:
00190     OpalVideoPictureLoss(unsigned sequenceNumber = 0, unsigned timestamp = 0);
00191 
00192     virtual PString GetName() const;
00193 
00194     unsigned GetSequenceNumber() const { return m_sequenceNumber; }
00195     unsigned GetTimestamp() const { return m_timestamp; }
00196 
00197   protected:
00198     unsigned m_sequenceNumber;
00199     unsigned m_timestamp;
00200 };
00201 
00202 
00211 class OpalTemporalSpatialTradeOff : public OpalMediaCommand
00212 {
00213   PCLASSINFO(OpalTemporalSpatialTradeOff, OpalMediaCommand);
00214   public:
00215     OpalTemporalSpatialTradeOff(int tradeoff) : m_tradeOff(tradeoff) { }
00216 
00217     virtual PString GetName() const;
00218 
00219     enum {
00220       MaximiseSpatial = 0,
00221       MaximiseTemporal = 31
00222     };
00223 
00224     unsigned GetTradeOff() const { return m_tradeOff; }
00225 
00226   protected:
00227     unsigned m_tradeOff;
00228 };
00229 
00230 
00231 #endif // OPAL_VIDEO
00232 
00233 #endif // OPAL_CODEC_VIDCODEC_H
00234 

Generated on 14 Aug 2013 for OPAL by  doxygen 1.4.7