# 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: 21004 $
    00027  * $Author: rjongbloed $
    00028  * $Date: 2008-09-16 07:08:56 +0000 (Tue, 16 Sep 2008) $
    00029  */
    00030
    00031 #ifndef __OPAL_VIDCODEC_H
    00032 #define __OPAL_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_VIDCODEC_H
    00221