summaryrefslogtreecommitdiff
path: root/include/asterisk
diff options
context:
space:
mode:
authorKevin Harwell <kharwell@digium.com>2017-01-12 15:58:43 -0600
committerKevin Harwell <kharwell@digium.com>2017-01-17 17:08:53 -0600
commit283c16c6b6136dfdb13b4fa6b524126e7aab1dfc (patch)
tree7d10831c547c294f629e7691295f244e8049bacf /include/asterisk
parentf4e77a5678ac8babeff853988941bf821b5d23cf (diff)
abstract/fixed/adpative jitter buffer: disallow frame re-inserts
It was possible for a frame to be re-inserted into a jitter buffer after it had been removed from it. A case when this happened was if a frame was read out of the jitterbuffer, passed to the translation core, and then multiple frames were returned from said translation core. Upon multiple frames being returned the first is passed on, but sebsequently "chained" frames are put back into the read queue. Thus it was possible for a frame to go back into the jitter buffer where this would cause problems. This patch adds a flag to frames that are inserted into the channel's read queue after translation. The abstract jitter buffer code then checks for this flag and ignores any frames marked as such. Change-Id: I276c44edc9dcff61e606242f71274265c7779587
Diffstat (limited to 'include/asterisk')
-rw-r--r--include/asterisk/abstract_jb.h3
-rw-r--r--include/asterisk/frame.h2
2 files changed, 5 insertions, 0 deletions
diff --git a/include/asterisk/abstract_jb.h b/include/asterisk/abstract_jb.h
index 8a5e3d27f..173b22a5c 100644
--- a/include/asterisk/abstract_jb.h
+++ b/include/asterisk/abstract_jb.h
@@ -109,6 +109,8 @@ typedef int (*jb_remove_impl)(void *jb, struct ast_frame **fout);
typedef void (*jb_force_resynch_impl)(void *jb);
/*! \brief Empty and reset jb */
typedef void (*jb_empty_and_reset_impl)(void *jb);
+/*! \brief Check if late */
+typedef int (*jb_is_late_impl)(void *jb, long ts);
/*!
@@ -127,6 +129,7 @@ struct ast_jb_impl
jb_remove_impl remove;
jb_force_resynch_impl force_resync;
jb_empty_and_reset_impl empty_and_reset;
+ jb_is_late_impl is_late;
};
/*!
diff --git a/include/asterisk/frame.h b/include/asterisk/frame.h
index 20f40f863..108dcafe0 100644
--- a/include/asterisk/frame.h
+++ b/include/asterisk/frame.h
@@ -133,6 +133,8 @@ enum ast_frame_type {
enum {
/*! This frame contains valid timing information */
AST_FRFLAG_HAS_TIMING_INFO = (1 << 0),
+ /*! This frame has been requeued */
+ AST_FRFLAG_REQUEUED = (1 << 1),
};
struct ast_frame_subclass {