aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2008-03-05 01:52:18 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2008-03-05 01:52:18 +0000
commit8e1a7851aabb4e7f8682119cec0cafef06a50565 (patch)
tree67d320462724428a1c351d955f14181e800f4bc8 /main
parent515454767074ab49bcec99b0d78dbadeef5d0539 (diff)
Fix a bug that I just noticed in the RTP code. The calculation for setting the
len field in an ast_frame of audio was wrong when G.722 is in use. The len field represents the number of ms of audio that the frame contains. It would have set the value to be twice what it should be. git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@105932 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r--main/rtp.c2
-rw-r--r--main/translate.c14
2 files changed, 4 insertions, 12 deletions
diff --git a/main/rtp.c b/main/rtp.c
index cec29dc4a..6578c400e 100644
--- a/main/rtp.c
+++ b/main/rtp.c
@@ -1313,7 +1313,7 @@ struct ast_frame *ast_rtp_read(struct ast_rtp *rtp)
/* Add timing data to let ast_generic_bridge() put the frame into a jitterbuf */
ast_set_flag(&rtp->f, AST_FRFLAG_HAS_TIMING_INFO);
rtp->f.ts = timestamp / 8;
- rtp->f.len = rtp->f.samples / 8;
+ rtp->f.len = rtp->f.samples / ( (ast_format_rate(rtp->f.subclass) == 16000) ? 16 : 8 );
} else {
/* Video -- samples is # of samples vs. 90000 */
if (!rtp->lastividtimestamp)
diff --git a/main/translate.c b/main/translate.c
index 0aa21df12..3f5466d1f 100644
--- a/main/translate.c
+++ b/main/translate.c
@@ -306,14 +306,6 @@ struct ast_trans_pvt *ast_translator_build_path(int dest, int source)
return head;
}
-static inline int format_rate(int format)
-{
- if (format == AST_FORMAT_G722)
- return 16000;
-
- return 8000;
-}
-
/*! \brief do the actual translation */
struct ast_frame *ast_translate(struct ast_trans_pvt *path, struct ast_frame *f, int consume)
{
@@ -350,7 +342,7 @@ struct ast_frame *ast_translate(struct ast_trans_pvt *path, struct ast_frame *f,
path->nextout = f->delivery;
}
/* Predict next incoming sample */
- path->nextin = ast_tvadd(path->nextin, ast_samp2tv(f->samples, format_rate(f->subclass)));
+ path->nextin = ast_tvadd(path->nextin, ast_samp2tv(f->samples, ast_format_rate(f->subclass)));
}
delivery = f->delivery;
for ( ; out && p ; p = p->next) {
@@ -374,7 +366,7 @@ struct ast_frame *ast_translate(struct ast_trans_pvt *path, struct ast_frame *f,
/* Predict next outgoing timestamp from samples in this
frame. */
- path->nextout = ast_tvadd(path->nextout, ast_samp2tv(out->samples, format_rate(out->subclass)));
+ path->nextout = ast_tvadd(path->nextout, ast_samp2tv(out->samples, ast_format_rate(out->subclass)));
} else {
out->delivery = ast_tv(0, 0);
ast_set2_flag(out, has_timing_info, AST_FRFLAG_HAS_TIMING_INFO);
@@ -397,7 +389,7 @@ static void calc_cost(struct ast_translator *t, int seconds)
struct ast_trans_pvt *pvt;
struct timeval start;
int cost;
- int out_rate = format_rate(t->dstfmt);
+ int out_rate = ast_format_rate(t->dstfmt);
if (!seconds)
seconds = 1;