codec_mapping: add all AMR variants
Change-Id: I09233c8c17fce591195b7762740f4d82a9961db6
This commit is contained in:
parent
cb0758d4ba
commit
3083b970b3
|
@ -31,7 +31,9 @@
|
||||||
#include <osmocom/msc/codec_mapping.h>
|
#include <osmocom/msc/codec_mapping.h>
|
||||||
#include <osmocom/msc/mncc.h>
|
#include <osmocom/msc/mncc.h>
|
||||||
|
|
||||||
const struct codec_mapping codec_map[] = {
|
#define S(N) (1 << (N))
|
||||||
|
|
||||||
|
static const struct codec_mapping codec_map[] = {
|
||||||
/* FIXME: sdp.fmtp handling is not done properly yet, proper mode-set and octet-align handling will follow in
|
/* FIXME: sdp.fmtp handling is not done properly yet, proper mode-set and octet-align handling will follow in
|
||||||
* separate patches. */
|
* separate patches. */
|
||||||
{
|
{
|
||||||
|
@ -112,51 +114,121 @@ const struct codec_mapping codec_map[] = {
|
||||||
.perm_speech = GSM0808_PERM_HR1,
|
.perm_speech = GSM0808_PERM_HR1,
|
||||||
.frhr = CODEC_FRHR_HR,
|
.frhr = CODEC_FRHR_HR,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
.sdp = {
|
/* payload_type = 112 is just what we use by default. The other call leg may impose a different number. */
|
||||||
/* 112 is just what we use by default. The other call leg may impose a different number. */
|
#define AMR_FR(IS_OA, FMTP, SPEECH_CODEC_CFG) \
|
||||||
.payload_type = 112,
|
{ \
|
||||||
.subtype_name = "AMR",
|
.sdp = { \
|
||||||
.rate = 8000,
|
.payload_type = 112, \
|
||||||
/* AMR is always octet-aligned in 2G and 3G RAN, so this fmtp is signalled to remote call legs.
|
.subtype_name = "AMR", \
|
||||||
* So far, fmtp is ignored in incoming SIP SDP, so an incoming SDP without 'octet-align=1' will
|
.rate = 8000, \
|
||||||
* match with this entry; we will still reply with 'octet-align=1', which often works out. */
|
.fmtp = FMTP, \
|
||||||
.fmtp = OSMO_SDP_VAL_AMR_OCTET_ALIGN_1,
|
}, \
|
||||||
},
|
.mgcp = CODEC_AMR_8000_1, \
|
||||||
.mgcp = CODEC_AMR_8000_1,
|
.speech_ver_count = 1, \
|
||||||
.speech_ver_count = 1,
|
.speech_ver = { GSM48_BCAP_SV_AMR_F }, \
|
||||||
.speech_ver = { GSM48_BCAP_SV_AMR_F },
|
.mncc_payload_msg_type = GSM_TCH_FRAME_AMR, \
|
||||||
.mncc_payload_msg_type = GSM_TCH_FRAME_AMR,
|
.has_gsm0808_speech_codec = true, \
|
||||||
.has_gsm0808_speech_codec = true,
|
.gsm0808_speech_codec = { \
|
||||||
.gsm0808_speech_codec = {
|
.fi = true, \
|
||||||
.fi = true,
|
.type = GSM0808_SCT_FR3, \
|
||||||
.type = GSM0808_SCT_FR3,
|
.cfg = SPEECH_CODEC_CFG, \
|
||||||
.cfg = GSM0808_SC_CFG_DEFAULT_FR_AMR,
|
}, \
|
||||||
},
|
.perm_speech = GSM0808_PERM_FR3, \
|
||||||
.perm_speech = GSM0808_PERM_FR3,
|
.frhr = CODEC_FRHR_FR, \
|
||||||
.frhr = CODEC_FRHR_FR,
|
}
|
||||||
},
|
|
||||||
{
|
#define AMR_HR(IS_OA, FMTP, SPEECH_CODEC_CFG) \
|
||||||
/* Another entry like the above, to map HR3 to AMR, too. */
|
{ \
|
||||||
.sdp = {
|
.sdp = { \
|
||||||
.payload_type = 112,
|
.payload_type = 112, \
|
||||||
.subtype_name = "AMR",
|
.subtype_name = "AMR", \
|
||||||
.rate = 8000,
|
.rate = 8000, \
|
||||||
.fmtp = OSMO_SDP_VAL_AMR_OCTET_ALIGN_1,
|
.fmtp = FMTP, \
|
||||||
},
|
}, \
|
||||||
.mgcp = CODEC_AMR_8000_1,
|
.mgcp = CODEC_AMR_8000_1, \
|
||||||
.speech_ver_count = 1,
|
.speech_ver_count = 1, \
|
||||||
.speech_ver = { GSM48_BCAP_SV_AMR_H },
|
.speech_ver = { GSM48_BCAP_SV_AMR_H }, \
|
||||||
.mncc_payload_msg_type = GSM_TCH_FRAME_AMR,
|
.mncc_payload_msg_type = GSM_TCH_FRAME_AMR, \
|
||||||
.has_gsm0808_speech_codec = true,
|
.has_gsm0808_speech_codec = true, \
|
||||||
.gsm0808_speech_codec = {
|
.gsm0808_speech_codec = { \
|
||||||
.fi = true,
|
.fi = true, \
|
||||||
.type = GSM0808_SCT_HR3,
|
.type = GSM0808_SCT_HR3, \
|
||||||
.cfg = GSM0808_SC_CFG_DEFAULT_HR_AMR,
|
.cfg = SPEECH_CODEC_CFG, \
|
||||||
},
|
}, \
|
||||||
.perm_speech = GSM0808_PERM_HR3,
|
.perm_speech = GSM0808_PERM_HR3, \
|
||||||
.frhr = CODEC_FRHR_HR,
|
.frhr = CODEC_FRHR_HR, \
|
||||||
},
|
}
|
||||||
|
|
||||||
|
/* AMR rates as in 3GPP TS 28.062, Table 7.11.3.1.3-2; gsm0808_speech_codec.cfg is a bitmask of Sn bits:
|
||||||
|
*
|
||||||
|
* S0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||||
|
* 12,20 (x) x x x
|
||||||
|
* 10,20 x x x
|
||||||
|
* 7,95 x x x
|
||||||
|
* 7,40 x x x x
|
||||||
|
* 6,70 x x x x x x
|
||||||
|
* 5,90 x x x x x x x x x x
|
||||||
|
* 5,15
|
||||||
|
* 4,75 x x x x x x x x x x
|
||||||
|
*
|
||||||
|
* OM F F F F F F F F F F F A F A F A
|
||||||
|
*
|
||||||
|
* HR Y Y Y Y Y Y Y Y Y
|
||||||
|
* FR Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
|
||||||
|
/* Add *all* AMR rate combinations as separate entries to the codec mapping */
|
||||||
|
#define ALL_AMR(IS_OA, FMTP_PREFIX) \
|
||||||
|
/* FR rates */ \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=0", S(0)), \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=0,2,4,7", S(1)), \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=2", S(2)), \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=3", S(3)), \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=4", S(4)), \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=5", S(5)), \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=6", S(6)), \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=7", S(7)), \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=0,2", S(8)), \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=0,2,3", S(9)), \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=0,2,3,4", S(10)), \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=0,2,3,6", S(12)), \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=0,2,5,7", S(14)), \
|
||||||
|
/* AMR FR: S1 in compatibility with AMR-HR = without 12k2 */ \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=0,2,4", S(1)), \
|
||||||
|
\
|
||||||
|
/* HR rates */ \
|
||||||
|
AMR_HR(IS_OA, FMTP_PREFIX "mode-set=0", S(0)), \
|
||||||
|
AMR_HR(IS_OA, FMTP_PREFIX "mode-set=0,2,4", S(1)), \
|
||||||
|
AMR_HR(IS_OA, FMTP_PREFIX "mode-set=2", S(2)), \
|
||||||
|
AMR_HR(IS_OA, FMTP_PREFIX "mode-set=3", S(3)), \
|
||||||
|
AMR_HR(IS_OA, FMTP_PREFIX "mode-set=4", S(4)), \
|
||||||
|
AMR_HR(IS_OA, FMTP_PREFIX "mode-set=5", S(5)), \
|
||||||
|
AMR_HR(IS_OA, FMTP_PREFIX "mode-set=0,2", S(8)), \
|
||||||
|
AMR_HR(IS_OA, FMTP_PREFIX "mode-set=0,2,3", S(9)), \
|
||||||
|
AMR_HR(IS_OA, FMTP_PREFIX "mode-set=0,2,3,4", S(10))
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* Add only AMR rates for S1 (0,2,4,7) as well as 12k2 only. */
|
||||||
|
#define ALL_AMR(IS_OA, FMTP_PREFIX) \
|
||||||
|
/* FR rates */ \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=0,2,4,7", S(1)), \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=7", S(7)), \
|
||||||
|
AMR_FR(IS_OA, FMTP_PREFIX "mode-set=0,2,4", S(1)), \
|
||||||
|
\
|
||||||
|
/* HR rates */ \
|
||||||
|
AMR_HR(IS_OA, FMTP_PREFIX "mode-set=0,2,4", S(1))
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* All AMR rates, once with and once without octet-align=1 */
|
||||||
|
ALL_AMR(true, OSMO_SDP_STR_AMR_OCTET_ALIGN_1 ";"),
|
||||||
|
ALL_AMR(false, ""),
|
||||||
|
|
||||||
|
/* AMR-WB */
|
||||||
{
|
{
|
||||||
.sdp = {
|
.sdp = {
|
||||||
.payload_type = 113,
|
.payload_type = 113,
|
||||||
|
|
|
@ -873,7 +873,12 @@ struct codec_test {
|
||||||
|
|
||||||
#define SDP_CODECS_ALL_GSM \
|
#define SDP_CODECS_ALL_GSM \
|
||||||
{ \
|
{ \
|
||||||
"AMR:octet-align=1#112", \
|
"AMR:octet-align=1;mode-set=0,2,4,7#112", \
|
||||||
|
"AMR:octet-align=1;mode-set=7#114", \
|
||||||
|
"AMR:octet-align=1;mode-set=0,2,4#115", \
|
||||||
|
"AMR:mode-set=0,2,4,7#116", \
|
||||||
|
"AMR:mode-set=7#117", \
|
||||||
|
"AMR:mode-set=0,2,4#118", \
|
||||||
"GSM-EFR#110", \
|
"GSM-EFR#110", \
|
||||||
"GSM#3", \
|
"GSM#3", \
|
||||||
"GSM-HR-08#111", \
|
"GSM-HR-08#111", \
|
||||||
|
@ -881,7 +886,12 @@ struct codec_test {
|
||||||
|
|
||||||
#define SDP_CODECS_ALL_GSM_WITH_ODD_PT_NRS \
|
#define SDP_CODECS_ALL_GSM_WITH_ODD_PT_NRS \
|
||||||
{ \
|
{ \
|
||||||
"AMR:octet-align=1#127", \
|
"AMR:octet-align=1;mode-set=0,2,4,7#127", \
|
||||||
|
"AMR:octet-align=1;mode-set=7#126", \
|
||||||
|
"AMR:octet-align=1;mode-set=0,2,4#125", \
|
||||||
|
"AMR:mode-set=0,2,4,7#124", \
|
||||||
|
"AMR:mode-set=7#123", \
|
||||||
|
"AMR:mode-set=0,2,4#122", \
|
||||||
"GSM-EFR#110", \
|
"GSM-EFR#110", \
|
||||||
"GSM#3", \
|
"GSM#3", \
|
||||||
"GSM-HR-08#111", \
|
"GSM-HR-08#111", \
|
||||||
|
|
Loading…
Reference in New Issue