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: 21283 $
00027  * $Author: rjongbloed $
00028  * $Date: 2008-10-11 07:10:58 +0000 (Sat, 11 Oct 2008) $
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 
00149   protected:
00150     PINDEX inDataSize;
00151     PINDEX outDataSize;
00152     bool   forceIFrame;
00153 
00154 #if OPAL_STATISTICS
00155     DWORD m_totalFrames;
00156     DWORD m_keyFrames;
00157 #endif
00158 };
00159 
00160 
00162 
00163 OPAL_DEFINE_MEDIA_COMMAND(OpalVideoFreezePicture, "Freeze Picture");
00164 
00165 class OpalVideoUpdatePicture : public OpalMediaCommand
00166 {
00167   PCLASSINFO(OpalVideoUpdatePicture, OpalMediaCommand);
00168   public:
00169     OpalVideoUpdatePicture(int firstGOB = -1, int firstMB = -1, int numBlocks = 0)
00170       : m_firstGOB(firstGOB), m_firstMB(firstMB), m_numBlocks(numBlocks) { }
00171 
00172     virtual PString GetName() const;
00173 
00174     int GetFirstGOB() const { return m_firstGOB; }
00175     int GetFirstMB() const { return m_firstMB; }
00176     int GetNumBlocks() const { return m_numBlocks; }
00177 
00178   protected:
00179     int m_firstGOB;
00180     int m_firstMB;
00181     int m_numBlocks;
00182 };
00183 
00184 
00185 class OpalTemporalSpatialTradeOff : public OpalMediaCommand
00186 {
00187   PCLASSINFO(OpalTemporalSpatialTradeOff, OpalMediaCommand);
00188   public:
00189     OpalTemporalSpatialTradeOff(int quality) : m_quality(quality) { }
00190 
00191     virtual PString GetName() const;
00192 
00193     int GetQuality() const { return m_quality; }
00194 
00195   protected:
00196     int m_quality;
00197 };
00198 
00199 
00200 class OpalLostPartialPicture : public OpalMediaCommand
00201 {
00202   PCLASSINFO(OpalLostPartialPicture, OpalMediaCommand);
00203   public:
00204     OpalLostPartialPicture() { }
00205     virtual PString GetName() const;
00206 };
00207 
00208 
00209 class OpalLostPicture : public OpalMediaCommand
00210 {
00211   PCLASSINFO(OpalLostPicture, OpalMediaCommand);
00212   public:
00213     OpalLostPicture() { }
00214     virtual PString GetName() const;
00215 };
00216 
00217 
00218 #endif // OPAL_VIDEO
00219 
00220 #endif // OPAL_CODEC_VIDCODEC_H
00221 

Generated on Mon Feb 23 02:01:40 2009 for OPAL by  doxygen 1.5.1