Added support for all GSM codecs to GSM and SIP interface
authorAndreas Eversberg <jolly@eversberg.eu>
Thu, 8 Mar 2012 13:44:17 +0000 (14:44 +0100)
committerAndreas Eversberg <jolly@eversberg.eu>
Thu, 8 Mar 2012 13:44:17 +0000 (14:44 +0100)
Untested!

gsm.cpp
gsm_bs.cpp
gsm_ms.cpp
mncc.h

diff --git a/gsm.cpp b/gsm.cpp
index 9e17920..31a7967 100644 (file)
--- a/gsm.cpp
+++ b/gsm.cpp
@@ -139,10 +139,10 @@ void Pgsm::send_mncc_rtp_connect(void)
                nrtp->payload_msg_type = GSM_TCHF_FRAME_EFR;
                break;
        case MEDIA_TYPE_AMR:
-               nrtp->payload_msg_type = GSM_TCHF_FRAME_AMR;
+               nrtp->payload_msg_type = GSM_TCH_FRAME_AMR;
                break;
        case MEDIA_TYPE_GSM_HR:
-               nrtp->payload_msg_type = GSM_TCHF_FRAME_HR;
+               nrtp->payload_msg_type = GSM_TCHH_FRAME;
                break;
        }
        nrtp->payload_type = p_g_payload_type;
@@ -229,7 +229,7 @@ void Pgsm::frame_receive(void *arg)
        if (!p_g_decoder)
                return;
 
-       if (frame->msg_type != GSM_TCHF_BAD_FRAME) {
+       if (frame->msg_type != GSM_BAD_FRAME) {
                if ((frame->data[0]>>4) != 0xd)
                        PERROR("received GSM frame with wrong magig 0x%x\n", frame->data[0]>>4);
        
@@ -375,12 +375,8 @@ void Pgsm::modify_lchan(int media_type)
                add_trace("speech", "version", "AMR given");
                mode->lchan_mode = 0x41; /* GSM V3 */
                break;
-       case MEDIA_TYPE_GSM_HR:
-               add_trace("speech", "version", "Half Rate given");
-               mode->lchan_mode = 0x05; /* GSM V1 HR */
-               break;
        default:
-               add_trace("speech", "version", "Full Rate given");
+               add_trace("speech", "version", "Full/Half Rate given");
                mode->lchan_mode = 0x01; /* GSM V1 */
        }
        mode->lchan_type = 0x02; /* FIXME: unused */
index 9ce9321..fc59125 100644 (file)
@@ -322,6 +322,11 @@ void Pgsm_bs::select_payload_type(struct gsm_mncc *mncc, unsigned char *payload_
                                media_type = MEDIA_TYPE_GSM_HR;
                                payload_type = dynamic_type++;
                                break;
+                       case 5:
+                               add_trace("speech", "version", "AMR Half Rate given");
+                               media_type = MEDIA_TYPE_AMR;
+                               payload_type = dynamic_type++;
+                               break;
                        default:
                                add_trace("speech", "version", "%d given", mncc->bearer_cap.speech_ver[i]);
                                media_type = 0;
@@ -583,7 +588,7 @@ int message_bsc(struct lcr_gsm *lcr_gsm, int msg_type, void *arg)
        }
 
        if (msg_type == GSM_TCHF_FRAME
-        || msg_type == GSM_TCHF_BAD_FRAME) {
+        || msg_type == GSM_BAD_FRAME) {
                if (port) {
                        /* inject DTMF, if enabled */
                        if (pgsm_bs->p_g_dtmf) {
index 0cbcca1..1726543 100644 (file)
@@ -342,7 +342,7 @@ int message_ms(struct lcr_gsm *gsm_ms, int msg_type, void *arg)
        }
 
        if (msg_type == GSM_TCHF_FRAME
-        || msg_type == GSM_TCHF_BAD_FRAME) {
+        || msg_type == GSM_BAD_FRAME) {
                if (port)
                        pgsm_ms->frame_receive(arg);
                return 0;
diff --git a/mncc.h b/mncc.h
index dcb8f04..14dd6d4 100644 (file)
--- a/mncc.h
+++ b/mncc.h
 #define MNCC_RTP_CONNECT       0x0205
 #define MNCC_RTP_FREE          0x0206
 
-#define GSM_TCHF_FRAME          0x0300
-#define GSM_TCHF_FRAME_EFR      0x0301
-#define GSM_TCHF_FRAME_HR       0x0302
-#define GSM_TCHF_FRAME_AMR      0x0303
-#define GSM_TCHF_BAD_FRAME     0x03ff
+#define GSM_TCHF_FRAME         0x0300
+#define GSM_TCHF_FRAME_EFR     0x0301
+#define GSM_TCHH_FRAME         0x0302
+#define GSM_TCH_FRAME_AMR      0x0303
+#define GSM_BAD_FRAME          0x03ff
 
 #define GSM_MAX_FACILITY       128
 #define GSM_MAX_SSVERSION      128