00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
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 class OpalVideoUpdatePicture2 : public OpalVideoUpdatePicture
00191 {
00192 PCLASSINFO(OpalVideoUpdatePicture2, OpalVideoUpdatePicture);
00193 public:
00194 OpalVideoUpdatePicture2(WORD seq, DWORD ts, int firstGOB = -1, int firstMB = -1, int numBlocks = 0)
00195 : OpalVideoUpdatePicture(firstGOB, firstMB, numBlocks), m_seq(seq), m_ts(ts) { }
00196
00197 virtual PString GetName() const;
00198
00199 WORD GetSequenceNumber() const { return m_seq; }
00200 DWORD GetTimestamp() const { return m_ts; }
00201
00202 protected:
00203 WORD m_seq;
00204 DWORD m_ts;
00205 };
00206
00207 class OpalTemporalSpatialTradeOff : public OpalMediaCommand
00208 {
00209 PCLASSINFO(OpalTemporalSpatialTradeOff, OpalMediaCommand);
00210 public:
00211 OpalTemporalSpatialTradeOff(int quality) : m_quality(quality) { }
00212
00213 virtual PString GetName() const;
00214
00215 int GetQuality() const { return m_quality; }
00216
00217 protected:
00218 int m_quality;
00219 };
00220
00221
00222 class OpalLostPartialPicture : public OpalMediaCommand
00223 {
00224 PCLASSINFO(OpalLostPartialPicture, OpalMediaCommand);
00225 public:
00226 OpalLostPartialPicture() { }
00227 virtual PString GetName() const;
00228 };
00229
00230
00231 class OpalLostPicture : public OpalMediaCommand
00232 {
00233 PCLASSINFO(OpalLostPicture, OpalMediaCommand);
00234 public:
00235 OpalLostPicture() { }
00236 virtual PString GetName() const;
00237 };
00238
00239
00240 #endif // OPAL_VIDEO
00241
00242 #endif // OPAL_CODEC_VIDCODEC_H
00243