comparison mgw/pstn2gsm.c @ 174:c985c33baeac

mgw: support EFR by way of libgsmefr
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 10 Jan 2023 17:56:22 -0800
parents f062c32a5116
children cf1ba5d65188
comparison
equal deleted inserted replaced
173:36cce9b0bbe2 174:c985c33baeac
13 #include <string.h> 13 #include <string.h>
14 #include <strings.h> 14 #include <strings.h>
15 #include <syslog.h> 15 #include <syslog.h>
16 #include <unistd.h> 16 #include <unistd.h>
17 #include <gsm.h> /* libgsm dependency */ 17 #include <gsm.h> /* libgsm dependency */
18 #include <gsm_efr.h>
18 #include "../include/tmgw_ctrl.h" 19 #include "../include/tmgw_ctrl.h"
19 #include "../include/tmgw_const.h" 20 #include "../include/tmgw_const.h"
20 #include "struct.h" 21 #include "struct.h"
21 #include "select.h" 22 #include "select.h"
22 #include "int_defs.h" 23 #include "int_defs.h"
126 pkt.seq = htons(++ep->p2g_out_seq); 127 pkt.seq = htons(++ep->p2g_out_seq);
127 switch (ep->gsm_payload_msg_type) { 128 switch (ep->gsm_payload_msg_type) {
128 case GSM_TCHF_FRAME: 129 case GSM_TCHF_FRAME:
129 gsm_encode(ep->gsm_encoder_state, pcm_samples, pkt.payload); 130 gsm_encode(ep->gsm_encoder_state, pcm_samples, pkt.payload);
130 break; 131 break;
132 case GSM_TCHF_FRAME_EFR:
133 EFR_encode_frame(ep->gsm_encoder_state, pcm_samples,
134 pkt.payload, (int *) 0, (int *) 0);
135 break;
131 } 136 }
132 addrlen = sizeof(struct sockaddr_in); 137 addrlen = sizeof(struct sockaddr_in);
133 sendto(ep->rtp_gsm.rtp_fd, &pkt, ep->gsm_rtp_pkt_size, 0, 138 sendto(ep->rtp_gsm.rtp_fd, &pkt, ep->gsm_rtp_pkt_size, 0,
134 (struct sockaddr *) &ep->rtp_gsm.remote_addr, addrlen); 139 (struct sockaddr *) &ep->rtp_gsm.remote_addr, addrlen);
135 } 140 }
143 case GSM_TCHF_FRAME: 148 case GSM_TCHF_FRAME:
144 ep->gsm_encoder_state = gsm_create(); 149 ep->gsm_encoder_state = gsm_create();
145 if (!ep->gsm_encoder_state) 150 if (!ep->gsm_encoder_state)
146 return TMGW_RESP_ERR_RSRC; 151 return TMGW_RESP_ERR_RSRC;
147 break; 152 break;
153 case GSM_TCHF_FRAME_EFR:
154 ep->gsm_encoder_state = EFR_encoder_create(0);
155 if (!ep->gsm_encoder_state)
156 return TMGW_RESP_ERR_RSRC;
157 break;
148 } 158 }
149 select_handlers[ep->rtp_pstn.rtp_fd] = pstn2gsm_rtp_in; 159 select_handlers[ep->rtp_pstn.rtp_fd] = pstn2gsm_rtp_in;
150 return TMGW_RESP_OK; 160 return TMGW_RESP_OK;
151 } 161 }