*/
int ast_frame_slinear_sum(struct ast_frame *f1, struct ast_frame *f2);
+/*!
+ * \brief Get the sample rate for a given format.
+ */
+static force_inline int ast_format_rate(int format)
+{
+ if (format == AST_FORMAT_G722)
+ return 16000;
+
+ return 8000;
+}
+
#if defined(__cplusplus) || defined(c_plusplus)
}
#endif
/* 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)
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)
{
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) {
/* 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);
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;