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: 24807 $ 00027 * $Author: rjongbloed $ 00028 * $Date: 2010-10-19 23:33:34 -0500 (Tue, 19 Oct 2010) $ 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 00176 class OpalVideoUpdatePicture : public OpalMediaCommand 00177 { 00178 PCLASSINFO(OpalVideoUpdatePicture, OpalMediaCommand); 00179 public: 00180 virtual PString GetName() const; 00181 }; 00182 00188 class OpalVideoPictureLoss : public OpalVideoUpdatePicture 00189 { 00190 PCLASSINFO(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 00212 class OpalTemporalSpatialTradeOff : public OpalMediaCommand 00213 { 00214 PCLASSINFO(OpalTemporalSpatialTradeOff, OpalMediaCommand); 00215 public: 00216 OpalTemporalSpatialTradeOff(int tradeoff) : m_tradeOff(tradeoff) { } 00217 00218 virtual PString GetName() const; 00219 00220 int GetTradeOff() const { return m_tradeOff; } 00221 00222 protected: 00223 int m_tradeOff; 00224 }; 00225 00226 00227 #endif // OPAL_VIDEO 00228 00229 #endif // OPAL_CODEC_VIDCODEC_H 00230