mncc: Use the default codec from the built-in mncc mode
In case of the RTP bridge mode we need to select the codec ourselves. Rely on the same (incomplete) codec selection that can be done using the mncc-int configuration node. This might gain bearer capabilities support. In case of a SDCCH a TCH/F will be attempted to be assigned. This is an open issue for both modes and there should be a preference for full or half-rate channels somewhere.
This commit is contained in:
parent
c21dcb20e5
commit
53122b09d0
|
@ -9,4 +9,6 @@ struct mncc_int {
|
|||
|
||||
extern struct mncc_int mncc_int;
|
||||
|
||||
uint8_t mncc_codec_for_mode(int lchan_type);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -52,6 +52,7 @@
|
|||
#include <openbsc/bsc_api.h>
|
||||
#include <openbsc/osmo_msc.h>
|
||||
#include <openbsc/handover.h>
|
||||
#include <openbsc/mncc_int.h>
|
||||
#include <osmocom/abis/e1_input.h>
|
||||
#include <osmocom/core/bitvec.h>
|
||||
|
||||
|
@ -3033,13 +3034,13 @@ static int tch_rtp_create(struct gsm_network *net, uint32_t callref)
|
|||
/*
|
||||
* *sigh* we need to pick a codec now. Pick the most generic one
|
||||
* right now and hope we could fix that later on. This is very
|
||||
* similiar to the above routine.
|
||||
* TODO: Use the default codec version...
|
||||
* similiar to the routine above.
|
||||
* Fallback to the internal MNCC mode to select a route.
|
||||
*/
|
||||
if (lchan->tch_mode == GSM48_CMODE_SIGN) {
|
||||
trans->conn->mncc_rtp_create_pending = 1;
|
||||
/* TODO... transport or fix the default type... */
|
||||
return gsm0808_assign_req(trans->conn, GSM48_CMODE_SPEECH_V1,
|
||||
return gsm0808_assign_req(trans->conn,
|
||||
mncc_codec_for_mode(lchan->type),
|
||||
lchan->type != GSM_LCHAN_TCH_H);
|
||||
}
|
||||
|
||||
|
|
|
@ -65,16 +65,21 @@ static struct gsm_call *get_call_ref(uint32_t callref)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static uint8_t determine_lchan_mode(struct gsm_mncc *setup)
|
||||
uint8_t mncc_codec_for_mode(int lchan_type)
|
||||
{
|
||||
/* FIXME: check codec capabilities of the phone */
|
||||
|
||||
if (setup->lchan_type != GSM_LCHAN_TCH_H)
|
||||
if (lchan_type != GSM_LCHAN_TCH_H)
|
||||
return mncc_int.def_codec[0];
|
||||
else
|
||||
return mncc_int.def_codec[1];
|
||||
}
|
||||
|
||||
static uint8_t determine_lchan_mode(struct gsm_mncc *setup)
|
||||
{
|
||||
return mncc_codec_for_mode(setup->lchan_type);
|
||||
}
|
||||
|
||||
/* on incoming call, look up database and send setup to remote subscr. */
|
||||
static int mncc_setup_ind(struct gsm_call *call, int msg_type,
|
||||
struct gsm_mncc *setup)
|
||||
|
|
Loading…
Reference in New Issue