diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-05-14 23:57:44 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-05-14 23:57:44 +0000 |
commit | 86aa2b26f880774127c5b3f7d4cb6e75432c0dfe (patch) | |
tree | 3514a96f9e23402449624204ceca0a1185d4ebba /channels/chan_iax2.c | |
parent | c38a98c3d1e0fadceadf874a59f56338fa86bed3 (diff) |
Add remainder of rtp fixes, iax2 patch (bug #3961)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5654 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_iax2.c')
-rwxr-xr-x | channels/chan_iax2.c | 48 |
1 files changed, 3 insertions, 45 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 29cf3cd05..61e6c3a45 100755 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -859,48 +859,6 @@ static struct chan_iax2_pvt *new_iax(struct sockaddr_in *sin, int lockpeer, cons return tmp; } -static int get_samples(struct ast_frame *f) -{ - int samples=0; - switch(f->subclass) { - case AST_FORMAT_SPEEX: - samples = 160; /* XXX Not necessarily true XXX */ - break; - case AST_FORMAT_G723_1: - samples = 240 /* XXX Not necessarily true XXX */; - break; - case AST_FORMAT_ILBC: - samples = 240 * (f->datalen / 50); - break; - case AST_FORMAT_GSM: - samples = 160 * (f->datalen / 33); - break; - case AST_FORMAT_G729A: - samples = 160 * (f->datalen / 20); - break; - case AST_FORMAT_SLINEAR: - samples = f->datalen / 2; - break; - case AST_FORMAT_LPC10: - samples = 22 * 8; - samples += (((char *)(f->data))[7] & 0x1) * 8; - break; - case AST_FORMAT_ULAW: - samples = f->datalen; - break; - case AST_FORMAT_ALAW: - samples = f->datalen; - break; - case AST_FORMAT_ADPCM: - case AST_FORMAT_G726: - samples = f->datalen *2; - break; - default: - ast_log(LOG_WARNING, "Don't know how to calculate samples on %d packets\n", f->subclass); - } - return samples; -} - static struct iax_frame *iaxfrdup2(struct iax_frame *fr) { /* Malloc() a copy of a frame */ @@ -2347,7 +2305,7 @@ static int schedule_delivery(struct iax_frame *fr, int reallydeliver, int update if(fr->af.frametype == AST_FRAME_VOICE) { type = JB_TYPE_VOICE; - len = get_samples(&fr->af)/8; + len = ast_codec_get_samples(&fr->af) / 8; } else if(fr->af.frametype == AST_FRAME_CNG) { type = JB_TYPE_SILENCE; } @@ -6240,7 +6198,7 @@ static int socket_read(int *id, int fd, short events, void *cbdata) f.mallocd = 0; f.offset = 0; if (f.datalen && (f.frametype == AST_FRAME_VOICE)) - f.samples = get_samples(&f); + f.samples = ast_codec_get_samples(&f); else f.samples = 0; fr.outoforder = 0; @@ -7355,7 +7313,7 @@ retryowner2: f.mallocd = 0; f.offset = 0; if (f.datalen && (f.frametype == AST_FRAME_VOICE)) { - f.samples = get_samples(&f); + f.samples = ast_codec_get_samples(&f); /* We need to byteswap incoming slinear samples from network byte order */ if (f.subclass == AST_FORMAT_SLINEAR) ast_frame_byteswap_be(&f); |