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: 29334 $
00027  * $Author: rjongbloed $
00028  * $Date: 2013-03-26 22:08:07 -0500 (Tue, 26 Mar 2013) $
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     virtual bool HasErrorConcealment() const  { return m_errorConcealment; }
00151     bool WasLastFrameIFrame() const { return lastFrameWasIFrame; }
00152     void ForceIFrame()              { forceIFrame = true; }
00154 
00155   protected:
00156     bool   m_errorConcealment;
00157     PINDEX inDataSize;
00158     PINDEX outDataSize;
00159     bool   forceIFrame;
00160     bool   lastFrameWasIFrame;
00161 
00162     DWORD m_totalFrames;
00163     DWORD m_keyFrames;
00164 };
00165 
00166 
00168 
00169 OPAL_DEFINE_MEDIA_COMMAND(OpalVideoFreezePicture, "Freeze Picture");
00170 
00176 class OpalVideoUpdatePicture : public OpalMediaCommand
00177 {
00178     PCLASSINFO_WITH_CLONE(OpalVideoUpdatePicture, OpalMediaCommand);
00179   public:
00180     virtual PString GetName() const;
00181 };
00182 
00188 class OpalVideoPictureLoss : public OpalVideoUpdatePicture
00189 {
00190     PCLASSINFO_WITH_CLONE(OpalVideoPictureLoss, OpalVideoUpdatePicture);
00191   public:
00192     OpalVideoPictureLoss(unsigned sequenceNumber = 0, unsigned timestamp = 0);
00193 
00194     virtual PString GetName() const;
00195 
00196     unsigned GetSequenceNumber() const { return m_sequenceNumber; }
00197     unsigned GetTimestamp() const { return m_timestamp; }
00198 
00199   protected:
00200     unsigned m_sequenceNumber;
00201     unsigned m_timestamp;
00202 };
00203 
00204 
00213 class OpalTemporalSpatialTradeOff : public OpalMediaCommand
00214 {
00215     PCLASSINFO_WITH_CLONE(OpalTemporalSpatialTradeOff, OpalMediaCommand);
00216   public:
00217     OpalTemporalSpatialTradeOff(int tradeoff) : m_tradeOff(tradeoff) { }
00218 
00219     virtual PString GetName() const;
00220 
00221     enum {
00222       MaximiseSpatial = 0,
00223       MaximiseTemporal = 31
00224     };
00225 
00226     unsigned GetTradeOff() const { return m_tradeOff; }
00227 
00228   protected:
00229     unsigned m_tradeOff;
00230 };
00231 
00232 
00233 #endif // OPAL_VIDEO
00234 
00235 #endif // OPAL_CODEC_VIDCODEC_H
00236 

Generated on 21 Jun 2013 for OPAL by  doxygen 1.4.7