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: 23165 $
00027  * $Author: rjongbloed $
00028  * $Date: 2009-07-29 04:57:29 +0000 (Wed, 29 Jul 2009) $
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 
00125     virtual PBoolean ExecuteCommand(
00126       const OpalMediaCommand & command    
00127     );
00128 
00139     virtual PBoolean Convert(
00140       const RTP_DataFrame & input,  
00141       RTP_DataFrame & output        
00142     );
00143 
00144 #if OPAL_STATISTICS
00145     virtual void GetStatistics(OpalMediaStatistics & statistics) const;
00146 #endif
00147 
00148     bool WasLastFrameIFrame() const { return lastFrameWasIFrame; }
00149     void ForceIFrame()              { forceIFrame = true; }
00150 
00151     PINDEX GetMaxEncoderOutputSize() const { return videoEncoderMaxOutputSize; }
00152 
00154 
00155   protected:
00156     PINDEX inDataSize;
00157     PINDEX outDataSize;
00158     PINDEX videoEncoderMaxOutputSize;
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 
00171 class OpalVideoUpdatePicture : public OpalMediaCommand
00172 {
00173   PCLASSINFO(OpalVideoUpdatePicture, OpalMediaCommand);
00174   public:
00175     OpalVideoUpdatePicture(int firstGOB = -1, int firstMB = -1, int numBlocks = 0)
00176       : m_firstGOB(firstGOB), m_firstMB(firstMB), m_numBlocks(numBlocks) { }
00177 
00178     virtual PString GetName() const;
00179 
00180     int GetFirstGOB() const { return m_firstGOB; }
00181     int GetFirstMB() const { return m_firstMB; }
00182     int GetNumBlocks() const { return m_numBlocks; }
00183 
00184   protected:
00185     int m_firstGOB;
00186     int m_firstMB;
00187     int m_numBlocks;
00188 };
00189 
00190 
00191 class OpalTemporalSpatialTradeOff : public OpalMediaCommand
00192 {
00193   PCLASSINFO(OpalTemporalSpatialTradeOff, OpalMediaCommand);
00194   public:
00195     OpalTemporalSpatialTradeOff(int quality) : m_quality(quality) { }
00196 
00197     virtual PString GetName() const;
00198 
00199     int GetQuality() const { return m_quality; }
00200 
00201   protected:
00202     int m_quality;
00203 };
00204 
00205 
00206 class OpalLostPartialPicture : public OpalMediaCommand
00207 {
00208   PCLASSINFO(OpalLostPartialPicture, OpalMediaCommand);
00209   public:
00210     OpalLostPartialPicture() { }
00211     virtual PString GetName() const;
00212 };
00213 
00214 
00215 class OpalLostPicture : public OpalMediaCommand
00216 {
00217   PCLASSINFO(OpalLostPicture, OpalMediaCommand);
00218   public:
00219     OpalLostPicture() { }
00220     virtual PString GetName() const;
00221 };
00222 
00223 
00224 #endif // OPAL_VIDEO
00225 
00226 #endif // OPAL_CODEC_VIDCODEC_H
00227 

Generated on Mon Feb 1 00:25:54 2010 for OPAL by  doxygen 1.5.1