Make sampling rate for telephone events configurable (#57)
This commit is contained in:
parent
b7aeedc7bb
commit
3b305e70b3
2 changed files with 24 additions and 2 deletions
|
@ -14,6 +14,7 @@ struct telev;
|
||||||
extern const char telev_rtpfmt[];
|
extern const char telev_rtpfmt[];
|
||||||
|
|
||||||
int telev_alloc(struct telev **tp, uint32_t ptime);
|
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_send(struct telev *tel, int event, bool end);
|
||||||
int telev_recv(struct telev *tel, struct mbuf *mb, 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);
|
int telev_poll(struct telev *tel, bool *marker, struct mbuf *mb);
|
||||||
|
|
|
@ -73,6 +73,7 @@ struct telev {
|
||||||
/* tx */
|
/* tx */
|
||||||
struct mbuf *mb;
|
struct mbuf *mb;
|
||||||
uint32_t ptime;
|
uint32_t ptime;
|
||||||
|
uint16_t pdur;
|
||||||
enum state state;
|
enum state state;
|
||||||
int event;
|
int event;
|
||||||
uint16_t dur;
|
uint16_t dur;
|
||||||
|
@ -164,6 +165,7 @@ int telev_alloc(struct telev **tp, uint32_t ptime)
|
||||||
|
|
||||||
t->state = IDLE;
|
t->state = IDLE;
|
||||||
t->ptime = ptime;
|
t->ptime = ptime;
|
||||||
|
t->pdur = ptime * 8;
|
||||||
t->rx_event = -1;
|
t->rx_event = -1;
|
||||||
|
|
||||||
out:
|
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
|
* Send a Telephony Event
|
||||||
*
|
*
|
||||||
|
@ -275,7 +296,7 @@ int telev_poll(struct telev *tel, bool *marker, struct mbuf *mb)
|
||||||
mrk = true;
|
mrk = true;
|
||||||
|
|
||||||
tel->event = mbuf_read_u8(tel->mb);
|
tel->event = mbuf_read_u8(tel->mb);
|
||||||
tel->dur = tel->ptime * 8;
|
tel->dur = tel->pdur;
|
||||||
tel->state = SENDING;
|
tel->state = SENDING;
|
||||||
tel->txc = 1;
|
tel->txc = 1;
|
||||||
|
|
||||||
|
@ -283,7 +304,7 @@ int telev_poll(struct telev *tel, bool *marker, struct mbuf *mb)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SENDING:
|
case SENDING:
|
||||||
tel->dur += tel->ptime * 8;
|
tel->dur += tel->pdur;
|
||||||
|
|
||||||
err = payload_encode(mb, tel->event, false, tel->dur);
|
err = payload_encode(mb, tel->event, false, tel->dur);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue