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
00032
00033
00034
00035
#ifndef _OPALDYNACODEC
00036
#define _OPALDYNACODEC
00037
00038
extern "C" {
00039
#include "dllcodec.h"
00040 };
00041
00042
#include "h323caps.h"
00043
00045
00046
class OpalDLLCodecRec;
00047
00048 class OpalDynaCodecDLL :
public PDynaLink
00049 {
00050
public:
00051
PCLASSINFO(
OpalDynaCodecDLL, PDynaLink);
00052
00053
OpalDynaCodecDLL(
const PFilePath & codec);
00054 BOOL
Load();
00055
00056 OpalDLLCodecInfo *
EnumerateCodecs(
unsigned * count);
00057
00058
static BOOL
LoadCodecs();
00059
static BOOL
LoadCodecs(
const PDirectory & dir);
00060
static BOOL
LoadCodec(
const PFilePath & file);
00061
00062
static PINDEX
AddAudioCapabilities(
H323EndPoint & ep,
00063 PINDEX descriptorNum,
00064 PINDEX simultaneousNum,
00065
H323Capabilities & capabilities);
00066
00067
static PINDEX
AddVideoCapabilities(
H323EndPoint & ep,
00068 PINDEX descriptorNum,
00069 PINDEX simultaneousNum,
00070
H323Capabilities & capabilities);
00071
00072
static PINDEX
AddCapabilities(
H323EndPoint & ep,
00073 PINDEX descriptorNum,
00074 PINDEX simultaneousNum,
00075
H323Capabilities & capabilities,
00076
const PString & type);
00077
00078 static PDirectory
defaultCodecDir;
00079
00080
protected:
00081 OpalDLLCodecInfo * (*EnumerateCodecsFn)(
unsigned apiVersion,
unsigned * count);
00082 static PMutex
mutex;
00083 static BOOL
inited;
00084 int referenceCount;
00085 };
00086
00088
00089 class OpalDLLCodecRec :
public PObject {
00090 PCLASSINFO(
OpalDLLCodecRec, PObject);
00091
public:
00092
OpalDLLCodecRec(
OpalDynaCodecDLL & _encoder,
00093
const PStringToString & _attributes,
00094
const OpalDLLCodecInfo & _encoderCodeInfo,
00095
OpalMediaFormat * _mediaFormat);
00096
00097
void *
CreateContext()
const;
00098
void DestroyContext(
void * context)
const;
00099
00100
H323Capability *
CreateCapability(
H323EndPoint & ep)
const;
00101
00102
void SetParameter(
const PString & attribute,
const PString & value)
const;
00103 PString
GetParameter(
const PString & attribute,
const char * defValue = NULL)
const;
00104
00105 OpalDynaCodecDLL &
encoder;
00106 PStringToString
attributes;
00107 OpalDLLCodecInfo
info;
00108
00109 OpalMediaFormat *
mediaFormat;
00110
00111
00112 };
00113
00115
00116 class OpalDynaAudioCodec :
public H323FramedAudioCodec
00117 {
00118 PCLASSINFO(
OpalDynaAudioCodec,
H323FramedAudioCodec)
00119
00120
public:
00121
OpalDynaAudioCodec(
const OpalDLLCodecRec & _info, Direction direction);
00122
~OpalDynaAudioCodec();
00123
virtual BOOL
EncodeFrame(BYTE * buffer,
unsigned & length);
00124
virtual BOOL
DecodeFrame(
const BYTE * buffer,
unsigned length,
unsigned & written);
00125
00126
protected:
00127 const OpalDLLCodecRec &
info;
00128 void *
context;
00129 unsigned samplesPerFrame;
00130 unsigned bytesPerFrame;
00131 };
00132
00134
00135 class OpalDynaCodecRegistration :
public H323CapabilityRegistration
00136 {
00137 PCLASSINFO(
OpalDynaCodecRegistration, H323CapabilityRegistration);
00138
public:
00139
OpalDynaCodecRegistration(
const PString & name,
00140
OpalDLLCodecRec * _encoderInfo,
00141
OpalDLLCodecRec * _decoderInfo,
00142
OpalMediaFormat * _mediaFormat);
00143
00144
H323Capability *
Create(
H323EndPoint & ep)
const;
00145
00146
friend class OpalDynaCodecDLL;
00147
00148
protected:
00149 OpalDLLCodecRec *
encoderInfo;
00150 OpalDLLCodecRec *
decoderInfo;
00151 OpalMediaFormat *
mediaFormat;
00152 };
00153
00155
00156 class OpalDynaCodecNonStandardAudioCapability :
public H323NonStandardAudioCapability
00157 {
00158 PCLASSINFO(
OpalDynaCodecNonStandardAudioCapability,
H323NonStandardAudioCapability);
00159
00160
public:
00161
OpalDynaCodecNonStandardAudioCapability(
00162
const OpalDLLCodecRec & _info,
00163
H323EndPoint & _endpoint,
00164
unsigned maxPacketSize,
00165
unsigned desiredPacketSize,
00166 BYTE country,
00167 BYTE extension,
00168 WORD maufacturer,
00169
const BYTE * nonstdHeader,
00170 PINDEX nonstdHeaderLen);
00171
00172
virtual PObject *
Clone()
const;
00173
virtual H323Codec *
CreateCodec(H323Codec::Direction direction)
const;
00174
virtual PString
GetFormatName()
const;
00175
00176
protected:
00177 const OpalDLLCodecRec &
info;
00178 H323EndPoint &
endpoint;
00179 };
00180
00182
00183 class OpalDynaNonStandardAudioCodec :
public OpalDynaAudioCodec
00184 {
00185 PCLASSINFO(
OpalDynaNonStandardAudioCodec,
OpalDynaAudioCodec)
00186
00187
public:
00188
OpalDynaNonStandardAudioCodec(
const OpalDLLCodecRec & _info, Direction direction);
00189
~OpalDynaNonStandardAudioCodec();
00190 };
00191
00193
00194 class OpalDynaCodecStandardAudioCapability :
public H323AudioCapability
00195 {
00196 PCLASSINFO(
OpalDynaCodecStandardAudioCapability,
H323AudioCapability);
00197
00198
public:
00199
OpalDynaCodecStandardAudioCapability(
00200
const OpalDLLCodecRec & _info,
00201
H323EndPoint & _endpoint,
00202
unsigned maxPacketSize,
00203
unsigned desiredPacketSize,
00204
unsigned subType);
00205
00206 BOOL
OnSendingPDU(
H245_AudioCapability & cap,
unsigned packetSize)
const;
00207 BOOL
OnReceivedPDU(
const H245_AudioCapability & cap,
unsigned & packetSize);
00208
00209 PObject *
Clone()
const;
00210
H323Codec *
CreateCodec(H323Codec::Direction direction)
const;
00211 PString
GetFormatName()
const;
00212
unsigned GetSubType()
const;
00213
00214
protected:
00215 const OpalDLLCodecRec &
info;
00216 H323EndPoint &
endpoint;
00217 unsigned subType;
00218 };
00219
00221
00222 class OpalDynaCodecStandardVideoCapability :
public H323VideoCapability
00223 {
00224 PCLASSINFO(
OpalDynaCodecStandardVideoCapability,
H323VideoCapability);
00225
00226
public:
00227
OpalDynaCodecStandardVideoCapability(
00228
const OpalDLLCodecRec & _info,
00229
H323EndPoint & _endpoint,
00230
unsigned subType);
00231
00232 BOOL
OnSendingPDU(
H245_VideoCapability & pdu)
const;
00233 BOOL OnSendingPDU(
H245_VideoMode & pdu)
const;
00234 BOOL
OnReceivedPDU(
const H245_VideoCapability & pdu);
00235
00236 PObject *
Clone()
const;
00237
H323Codec *
CreateCodec(H323Codec::Direction direction)
const;
00238 PString
GetFormatName()
const;
00239
unsigned GetSubType()
const;
00240
00241
protected:
00242 const OpalDLLCodecRec &
info;
00243 H323EndPoint &
endpoint;
00244 unsigned subType;
00245 };
00246
00248
00249 class OpalDynaVideoCodec :
public H323VideoCodec
00250 {
00251 PCLASSINFO(
OpalDynaVideoCodec,
H323VideoCodec)
00252
00253
public:
00254
OpalDynaVideoCodec(
00255
const OpalDLLCodecRec & _info, Direction direction);
00256
00257
~OpalDynaVideoCodec();
00258
00259 BOOL
Read(BYTE * buffer,
unsigned & length,
RTP_DataFrame & rtpFrame);
00260 BOOL
Write(
const BYTE * buffer,
unsigned length,
const RTP_DataFrame & rtp,
unsigned & written);
00261
00262
protected:
00263 const OpalDLLCodecRec &
info;
00264 void *
context;
00265 };
00266
00267
00268
#endif