From 4ce1edc05cec917ad15513344d46fed1e35b6f58 Mon Sep 17 00:00:00 2001 From: kpfleming Date: Sun, 3 Apr 2005 22:57:18 +0000 Subject: handle AST_FORMAT_SLINEAR endianness properly on big-endian systems (bug #3865) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5373 f38db490-d61c-443f-a65b-d21fe96a405b --- rtp.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'rtp.c') diff --git a/rtp.c b/rtp.c index cfcfc1c3d..22840eb3c 100755 --- a/rtp.c +++ b/rtp.c @@ -596,6 +596,7 @@ struct ast_frame *ast_rtp_read(struct ast_rtp *rtp) break; case AST_FORMAT_SLINEAR: rtp->f.samples = rtp->f.datalen / 2; + ast_frame_byteswap_be(&rtp->f); break; case AST_FORMAT_GSM: rtp->f.samples = 160 * (rtp->f.datalen / 33); @@ -1320,6 +1321,19 @@ int ast_rtp_write(struct ast_rtp *rtp, struct ast_frame *_f) switch(subclass) { + case AST_FORMAT_SLINEAR: + if (!rtp->smoother) { + rtp->smoother = ast_smoother_new(320); + } + if (!rtp->smoother) { + ast_log(LOG_WARNING, "Unable to create smoother :(\n"); + return -1; + } + ast_smoother_feed_be(rtp->smoother, _f); + + while((f = ast_smoother_read(rtp->smoother))) + ast_rtp_raw_write(rtp, f, codec); + break; case AST_FORMAT_ULAW: case AST_FORMAT_ALAW: if (!rtp->smoother) { -- cgit v1.2.3