Introduce Cisco G.726-32 capability (g726aal2 form)
[asterisk/asterisk.git] / channels / h323 / caps_h323.h
1 #ifndef __AST_H323CAPS_H
2 #define __AST_H323CAPS_H
3
4 /**This class describes the G.711 codec capability.
5  */
6 class AST_G711Capability : public H323AudioCapability
7 {
8         PCLASSINFO(AST_G711Capability, H323AudioCapability);
9
10 public:
11         AST_G711Capability(int rx_frames = 125, H323_G711Capability::Mode _mode = H323_G711Capability::muLaw, H323_G711Capability::Speed _speed = H323_G711Capability::At64k);
12         virtual PObject *Clone() const;
13         virtual H323Codec * CreateCodec(H323Codec::Direction direction) const;
14         virtual unsigned GetSubType() const;
15         virtual PString GetFormatName() const;
16
17 protected:
18         H323_G711Capability::Mode mode;
19         H323_G711Capability::Speed speed;
20 };
21
22 /**This class describes the G.723.1 codec capability.
23  */
24 class AST_G7231Capability : public H323AudioCapability
25 {
26         PCLASSINFO(AST_G7231Capability, H323AudioCapability);
27
28 public:
29         AST_G7231Capability(int rx_frames = 7, BOOL annexA = TRUE);
30         Comparison Compare(const PObject & obj) const;
31         virtual PObject * Clone() const;
32         virtual H323Codec * CreateCodec(H323Codec::Direction direction) const;
33         virtual unsigned GetSubType() const;
34         virtual PString GetFormatName() const;
35         virtual BOOL OnSendingPDU(H245_AudioCapability & pdu, unsigned packetSize) const;
36         virtual BOOL OnReceivedPDU(const H245_AudioCapability & pdu, unsigned & packetSize);
37
38 protected:
39         BOOL annexA;
40 };
41
42 /**This class describes the (fake) G729 codec capability.
43  */
44 class AST_G729Capability : public H323AudioCapability
45 {
46         PCLASSINFO(AST_G729Capability, H323AudioCapability);
47
48 public:
49         AST_G729Capability(int rx_frames = 24);
50         /* Create a copy of the object. */
51         virtual PObject * Clone() const;
52
53         /* Create the codec instance, allocating resources as required. */
54         virtual H323Codec * CreateCodec(H323Codec::Direction direction) const;
55
56         /* Get the sub-type of the capability. This is a code dependent on the
57            main type of the capability.
58
59            This returns one of the four possible combinations of mode and speed
60            using the enum values of the protocol ASN H245_AudioCapability class. */
61         virtual unsigned GetSubType() const;
62
63         /* Get the name of the media data format this class represents. */
64         virtual PString GetFormatName() const;
65 };
66
67 /* This class describes the VoiceAge G729A codec capability. */
68 class AST_G729ACapability : public H323AudioCapability
69 {
70         PCLASSINFO(AST_G729ACapability, H323AudioCapability);
71
72 public:
73         /* Create a new G.729A capability. */
74         AST_G729ACapability(int rx_frames = 24);
75
76         /* Create a copy of the object. */
77         virtual PObject * Clone() const;
78         /* Create the codec instance, allocating resources as required. */
79         virtual H323Codec * CreateCodec(H323Codec::Direction direction) const;
80
81         /* Get the sub-type of the capability. This is a code dependent on the
82            main type of the capability.
83
84            This returns one of the four possible combinations of mode and speed
85            using the enum values of the protocol ASN H245_AudioCapability class. */
86         virtual unsigned GetSubType() const;
87
88         /* Get the name of the media data format this class represents. */
89         virtual PString GetFormatName() const;
90 };
91
92 /* This class describes the GSM-06.10 codec capability. */
93 class AST_GSM0610Capability : public H323AudioCapability
94 {
95         PCLASSINFO(AST_GSM0610Capability, H323AudioCapability);
96
97 public:
98         /* Create a new GSM capability. */
99         AST_GSM0610Capability(int rx_frames = 24, int comfortNoise = 0, int scrambled = 0);
100
101         /* Create a copy of the object. */
102         virtual PObject * Clone() const;
103
104         /* Create the codec instance, allocating resources as required. */
105         virtual H323Codec * CreateCodec(H323Codec::Direction direction) const;
106
107         /* Get the sub-type of the capability. This is a code dependent on the
108            main type of the capability.
109
110            This returns one of the four possible combinations of mode and speed
111            using the enum values of the protocol ASN H245_AudioCapability class. */
112         virtual unsigned GetSubType() const;
113
114         /* Get the name of the media data format this class represents. */
115         virtual PString GetFormatName() const;
116
117         BOOL OnSendingPDU(H245_AudioCapability & pdu, unsigned packetSize) const;
118         BOOL OnReceivedPDU(const H245_AudioCapability & pdu, unsigned & packetSize);
119
120 protected:
121         int comfortNoise;
122         int scrambled;
123 };
124
125 #define CISCO_G726r32 "G726r32"
126
127 class AST_CiscoG726Capability : public H323NonStandardAudioCapability {
128         PCLASSINFO(AST_CiscoG726Capability, H323NonStandardAudioCapability);
129
130 public:
131         /* Create a new Cisco G.726 capability */
132         AST_CiscoG726Capability(int rx_frames = 80);
133
134         /* Create a copy of the object. */
135         virtual PObject * Clone() const;
136
137         /* Create the codec instance, allocating resources as required. */
138         virtual H323Codec * CreateCodec(H323Codec::Direction direction) const;
139
140         /* Get the name of the media data format this class represents. */
141         virtual PString GetFormatName() const;
142 };
143 #endif /* __AST_H323CAPS_H */