Make sampling rate for telephone events configurable (#57)

This commit is contained in:
Jan Hoffmann 2017-05-08 13:51:21 +02:00 committed by Richard Aas
parent b7aeedc7bb
commit 3b305e70b3
2 changed files with 24 additions and 2 deletions

View file

@ -14,6 +14,7 @@ struct telev;
extern const char telev_rtpfmt[];
int telev_alloc(struct telev **tp, uint32_t ptime);
int telev_set_srate(struct telev *tel, uint32_t srate);
int telev_send(struct telev *tel, int event, bool end);
int telev_recv(struct telev *tel, struct mbuf *mb, int *event, bool *end);
int telev_poll(struct telev *tel, bool *marker, struct mbuf *mb);

View file

@ -73,6 +73,7 @@ struct telev {
/* tx */
struct mbuf *mb;
uint32_t ptime;
uint16_t pdur;
enum state state;
int event;
uint16_t dur;
@ -164,6 +165,7 @@ int telev_alloc(struct telev **tp, uint32_t ptime)
t->state = IDLE;
t->ptime = ptime;
t->pdur = ptime * 8;
t->rx_event = -1;
out:
@ -176,6 +178,25 @@ int telev_alloc(struct telev **tp, uint32_t ptime)
}
/**
* Sets the sampling rate
*
* @param tel Telephony Event state
* @param srate Sampling rate in [Hz]
*
* @return 0 if success, otherwise errorcode
*/
int telev_set_srate(struct telev *tel, uint32_t srate)
{
if (!tel || !srate)
return EINVAL;
tel->pdur = tel->ptime * srate / 1000;
return 0;
}
/**
* Send a Telephony Event
*
@ -275,7 +296,7 @@ int telev_poll(struct telev *tel, bool *marker, struct mbuf *mb)
mrk = true;
tel->event = mbuf_read_u8(tel->mb);
tel->dur = tel->ptime * 8;
tel->dur = tel->pdur;
tel->state = SENDING;
tel->txc = 1;
@ -283,7 +304,7 @@ int telev_poll(struct telev *tel, bool *marker, struct mbuf *mb)
break;
case SENDING:
tel->dur += tel->ptime * 8;
tel->dur += tel->pdur;
err = payload_encode(mb, tel->event, false, tel->dur);