123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384 |
- #include <ptlib.h>
- #include <h323.h>
- #include <h245.h>
- #include "ast_h323.h"
- #include "caps_h323.h"
- #define DEFINE_G711_CAPABILITY(cls, code, capName) \
- class cls : public AST_G711Capability { \
- public: \
- cls() : AST_G711Capability(240, code) { } \
- }; \
- H323_REGISTER_CAPABILITY(cls, capName) \
- DEFINE_G711_CAPABILITY(AST_G711ALaw64Capability, H323_G711Capability::ALaw, OPAL_G711_ALAW_64K);
- DEFINE_G711_CAPABILITY(AST_G711uLaw64Capability, H323_G711Capability::muLaw, OPAL_G711_ULAW_64K);
- H323_REGISTER_CAPABILITY(AST_G7231Capability, OPAL_G7231);
- H323_REGISTER_CAPABILITY(AST_G729Capability, OPAL_G729);
- H323_REGISTER_CAPABILITY(AST_G729ACapability, OPAL_G729A);
- H323_REGISTER_CAPABILITY(AST_GSM0610Capability, OPAL_GSM0610);
- H323_REGISTER_CAPABILITY(AST_CiscoG726Capability, CISCO_G726r32);
- H323_REGISTER_CAPABILITY(AST_CiscoDtmfCapability, CISCO_DTMF_RELAY);
- OPAL_MEDIA_FORMAT_DECLARE(OpalG711ALaw64kFormat,
- OPAL_G711_ALAW_64K,
- OpalMediaFormat::DefaultAudioSessionID,
- RTP_DataFrame::PCMA,
- TRUE,
- 64000,
- 8,
- 8,
- OpalMediaFormat::AudioTimeUnits,
- 0);
- OPAL_MEDIA_FORMAT_DECLARE(OpalG711uLaw64kFormat,
- OPAL_G711_ULAW_64K,
- OpalMediaFormat::DefaultAudioSessionID,
- RTP_DataFrame::PCMU,
- TRUE,
- 64000,
- 8,
- 8,
- OpalMediaFormat::AudioTimeUnits,
- 0);
- OPAL_MEDIA_FORMAT_DECLARE(OpalG729Format,
- OPAL_G729,
- OpalMediaFormat::DefaultAudioSessionID,
- RTP_DataFrame::G729,
- TRUE,
- 8000,
- 10,
- 80,
- OpalMediaFormat::AudioTimeUnits,
- 0);
- OPAL_MEDIA_FORMAT_DECLARE(OpalG729AFormat,
- OPAL_G729 "A",
- OpalMediaFormat::DefaultAudioSessionID,
- RTP_DataFrame::G729,
- TRUE,
- 8000,
- 10,
- 80,
- OpalMediaFormat::AudioTimeUnits,
- 0);
- OPAL_MEDIA_FORMAT_DECLARE(OpalG7231_6k3Format,
- OPAL_G7231_6k3,
- OpalMediaFormat::DefaultAudioSessionID,
- RTP_DataFrame::G7231,
- TRUE,
- 6400,
- 24,
- 240,
- OpalMediaFormat::AudioTimeUnits,
- 0);
- OPAL_MEDIA_FORMAT_DECLARE(OpalG7231A_6k3Format,
- OPAL_G7231A_6k3,
- OpalMediaFormat::DefaultAudioSessionID,
- RTP_DataFrame::G7231,
- TRUE,
- 6400,
- 24,
- 240,
- OpalMediaFormat::AudioTimeUnits,
- 0);
- OPAL_MEDIA_FORMAT_DECLARE(OpalGSM0610Format,
- OPAL_GSM0610,
- OpalMediaFormat::DefaultAudioSessionID,
- RTP_DataFrame::GSM,
- TRUE,
- 13200,
- 33,
- 160,
- OpalMediaFormat::AudioTimeUnits,
- 0);
- OPAL_MEDIA_FORMAT_DECLARE(OpalCiscoG726Format,
- CISCO_G726r32,
- OpalMediaFormat::DefaultAudioSessionID,
- RTP_DataFrame::G726,
- TRUE,
- 32000,
- 4,
- 8,
- OpalMediaFormat::AudioTimeUnits,
- 0);
- #if 0
- OPAL_MEDIA_FORMAT_DECLARE(OpalCiscoDTMFRelayFormat,
- CISCO_DTMF_RELAY,
- OpalMediaFormat::DefaultAudioSessionID,
- (RTP_DataFrame::PayloadTypes)121,
- TRUE,
- 100,
- 4,
- 8*150,
- OpalMediaFormat::AudioTimeUnits,
- 0);
- #endif
- AST_G711Capability::AST_G711Capability(int rx_frames, H323_G711Capability::Mode m, H323_G711Capability::Speed s)
- : H323AudioCapability(rx_frames, 30)
- {
- mode = m;
- speed = s;
- }
- PObject * AST_G711Capability::Clone() const
- {
- return new AST_G711Capability(*this);
- }
- unsigned AST_G711Capability::GetSubType() const
- {
- static const unsigned G711SubType[2][2] = {
- { H245_AudioCapability::e_g711Alaw64k, H245_AudioCapability::e_g711Alaw56k },
- { H245_AudioCapability::e_g711Ulaw64k, H245_AudioCapability::e_g711Ulaw56k }
- };
- return G711SubType[mode][speed];
- }
- PString AST_G711Capability::GetFormatName() const
- {
- static const char * const G711Name[2][2] = {
- { OPAL_G711_ALAW_64K, OPAL_G711_ALAW_56K },
- { OPAL_G711_ULAW_64K, OPAL_G711_ULAW_56K },
- };
- return G711Name[mode][speed];
- }
- H323Codec * AST_G711Capability::CreateCodec(H323Codec::Direction direction) const
- {
- return NULL;
- }
- AST_G7231Capability::AST_G7231Capability(int rx_frames, PBoolean annexA_)
- : H323AudioCapability(rx_frames, 4)
- {
- annexA = annexA_;
- }
- PObject::Comparison AST_G7231Capability::Compare(const PObject & obj) const
- {
- Comparison result = H323AudioCapability::Compare(obj);
- if (result != EqualTo) {
- return result;
- }
- PINDEX otherAnnexA = ((const AST_G7231Capability &)obj).annexA;
- if (annexA < otherAnnexA) {
- return LessThan;
- }
- if (annexA > otherAnnexA) {
- return GreaterThan;
- }
- return EqualTo;
- }
- PObject * AST_G7231Capability::Clone() const
- {
- return new AST_G7231Capability(*this);
- }
- PString AST_G7231Capability::GetFormatName() const
- {
- return (annexA ? OPAL_G7231 "A" : OPAL_G7231);
- }
- unsigned AST_G7231Capability::GetSubType() const
- {
- return H245_AudioCapability::e_g7231;
- }
- PBoolean AST_G7231Capability::OnSendingPDU(H245_AudioCapability & cap,
- unsigned packetSize) const
- {
- cap.SetTag(H245_AudioCapability::e_g7231);
- H245_AudioCapability_g7231 & g7231 = cap;
- g7231.m_maxAl_sduAudioFrames = packetSize;
- g7231.m_silenceSuppression = annexA;
- return TRUE;
- }
- PBoolean AST_G7231Capability::OnReceivedPDU(const H245_AudioCapability & cap,
- unsigned & packetSize)
- {
- if (cap.GetTag() != H245_AudioCapability::e_g7231) {
- return FALSE;
- }
- const H245_AudioCapability_g7231 & g7231 = cap;
- packetSize = g7231.m_maxAl_sduAudioFrames;
- annexA = g7231.m_silenceSuppression;
- return TRUE;
- }
- H323Codec * AST_G7231Capability::CreateCodec(H323Codec::Direction direction) const
- {
- return NULL;
- }
- AST_G729Capability::AST_G729Capability(int rx_frames)
- : H323AudioCapability(rx_frames, 2)
- {
- }
- PObject * AST_G729Capability::Clone() const
- {
- return new AST_G729Capability(*this);
- }
- unsigned AST_G729Capability::GetSubType() const
- {
- return H245_AudioCapability::e_g729;
- }
- PString AST_G729Capability::GetFormatName() const
- {
- return OPAL_G729;
- }
- H323Codec * AST_G729Capability::CreateCodec(H323Codec::Direction direction) const
- {
- return NULL;
- }
- AST_G729ACapability::AST_G729ACapability(int rx_frames)
- : H323AudioCapability(rx_frames, 6)
- {
- }
- PObject * AST_G729ACapability::Clone() const
- {
- return new AST_G729ACapability(*this);
- }
- unsigned AST_G729ACapability::GetSubType() const
- {
- return H245_AudioCapability::e_g729AnnexA;
- }
- PString AST_G729ACapability::GetFormatName() const
- {
- return OPAL_G729A;
- }
- H323Codec * AST_G729ACapability::CreateCodec(H323Codec::Direction direction) const
- {
- return NULL;
- }
- AST_GSM0610Capability::AST_GSM0610Capability(int rx_frames, int comfortNoise_, int scrambled_)
- : H323AudioCapability(rx_frames, 2)
- {
- comfortNoise = comfortNoise_;
- scrambled = scrambled_;
- }
- PObject * AST_GSM0610Capability::Clone() const
- {
- return new AST_GSM0610Capability(*this);
- }
- unsigned AST_GSM0610Capability::GetSubType() const
- {
- return H245_AudioCapability::e_gsmFullRate;
- }
- PBoolean AST_GSM0610Capability::OnSendingPDU(H245_AudioCapability & cap,
- unsigned packetSize) const
- {
- cap.SetTag(H245_AudioCapability::e_gsmFullRate);
- H245_GSMAudioCapability & gsm = cap;
- gsm.m_audioUnitSize = packetSize * 33;
- gsm.m_comfortNoise = comfortNoise;
- gsm.m_scrambled = scrambled;
- return TRUE;
- }
- PBoolean AST_GSM0610Capability::OnReceivedPDU(const H245_AudioCapability & cap,
- unsigned & packetSize)
- {
- if (cap.GetTag() != H245_AudioCapability::e_gsmFullRate)
- return FALSE;
- const H245_GSMAudioCapability & gsm = cap;
- packetSize = (gsm.m_audioUnitSize + 32) / 33;
- comfortNoise = gsm.m_comfortNoise;
- scrambled = gsm.m_scrambled;
- return TRUE;
- }
- PString AST_GSM0610Capability::GetFormatName() const
- {
- return OPAL_GSM0610;
- }
- H323Codec * AST_GSM0610Capability::CreateCodec(H323Codec::Direction direction) const
- {
- return NULL;
- }
- AST_CiscoG726Capability::AST_CiscoG726Capability(int rx_frames)
- : H323NonStandardAudioCapability(rx_frames, 240,
- 181, 0, 18,
- (const BYTE *)"G726r32", 0)
- {
- }
- PObject *AST_CiscoG726Capability::Clone() const
- {
- return new AST_CiscoG726Capability(*this);
- }
- H323Codec *AST_CiscoG726Capability::CreateCodec(H323Codec::Direction direction) const
- {
- return NULL;
- }
- PString AST_CiscoG726Capability::GetFormatName() const
- {
- return PString(CISCO_G726r32);
- }
- AST_CiscoDtmfCapability::AST_CiscoDtmfCapability()
- : H323NonStandardDataCapability(0, 181, 0, 18, (const BYTE *)"RtpDtmfRelay", 0)
- {
- rtpPayloadType = (RTP_DataFrame::PayloadTypes)121;
- }
- PObject *AST_CiscoDtmfCapability::Clone() const
- {
- return new AST_CiscoDtmfCapability(*this);
- }
- H323Codec *AST_CiscoDtmfCapability::CreateCodec(H323Codec::Direction direction) const
- {
- return NULL;
- }
- PString AST_CiscoDtmfCapability::GetFormatName() const
- {
- return PString(CISCO_DTMF_RELAY);
- }
|