summaryrefslogtreecommitdiff
path: root/pjmedia/src
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2008-01-19 09:39:52 +0000
committerBenny Prijono <bennylp@teluu.com>2008-01-19 09:39:52 +0000
commit288b15dcff2f25d22582a8523e09d916a25d6596 (patch)
tree1fa440f21b12f6dffb005ff19230583e152c3c5b /pjmedia/src
parentd820bcd653fecf06bae3e835d805c8f560b00961 (diff)
More work on ticket #438: Workaround for frame bursts from audio devices. See the ticket for more information
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1715 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src')
-rw-r--r--pjmedia/src/pjmedia/conference.c8
-rw-r--r--pjmedia/src/pjmedia/delaybuf.c25
-rw-r--r--pjmedia/src/pjmedia/echo_speex.c2
-rw-r--r--pjmedia/src/pjmedia/sound_port.c3
-rw-r--r--pjmedia/src/pjmedia/splitcomb.c8
5 files changed, 38 insertions, 8 deletions
diff --git a/pjmedia/src/pjmedia/conference.c b/pjmedia/src/pjmedia/conference.c
index a0a0d16f..4999b7fe 100644
--- a/pjmedia/src/pjmedia/conference.c
+++ b/pjmedia/src/pjmedia/conference.c
@@ -55,7 +55,13 @@ static FILE *fhnd_rec;
#define THIS_FILE "conference.c"
-#define RX_BUF_COUNT PJMEDIA_SOUND_BUFFER_COUNT
+
+/* When delay buffer is used, we only need 1 frame buffering */
+#if defined(PJMEDIA_SOUND_USE_DELAYBUF) && PJMEDIA_SOUND_USE_DELAYBUF!=0
+# define RX_BUF_COUNT 1
+#else
+# define RX_BUF_COUNT PJMEDIA_SOUND_BUFFER_COUNT
+#endif
#define BYTES_PER_SAMPLE 2
diff --git a/pjmedia/src/pjmedia/delaybuf.c b/pjmedia/src/pjmedia/delaybuf.c
index 6af8ce59..1495e070 100644
--- a/pjmedia/src/pjmedia/delaybuf.c
+++ b/pjmedia/src/pjmedia/delaybuf.c
@@ -40,8 +40,25 @@ enum OP
/* The following macros represent cycles of test. */
/* Since there are two operations performed (get & put), */
/* these macros value must be minimum 2 and should be even number */
-#define WAITING_COUNT 8
-#define LEARN_COUNT 8
+#define WAITING_COUNT 4
+#define LEARN_COUNT 16
+
+/* Number of buffers to add to learnt level for additional stability */
+#define SAFE_MARGIN 2
+
+/*
+ * Some experimental data (with SAFE_MARGIN=1):
+ *
+ * System 1:
+ * - XP, WMME, 10ms ptime,
+ * - Sennheiser Headset+USB sound card
+ * - Stable delaybuf level: 6, on WAITING_COUNT=4 and LEARNING_COUNT=48
+ *
+ * System 2:
+ * - XP, WMME, 10ms ptime
+ * - Onboard SoundMAX Digital Audio
+ * - Stable delaybuf level: 6, on WAITING_COUNT=4 and LEARNING_COUNT=48
+ */
struct pjmedia_delay_buf
{
@@ -133,8 +150,8 @@ static void update(pjmedia_delay_buf *b, enum OP op)
b->op[other].level = 0;
b->state_count++;
if (b->state_count == LEARN_COUNT) {
- /* give ONE frame compensation */
- b->max_level += 1;
+ /* give SAFE_MARGIN compensation for added stability */
+ b->max_level += SAFE_MARGIN;
PJ_LOG(5,(b->obj_name,"Delay buffer start running, level=%u",
b->max_level));
diff --git a/pjmedia/src/pjmedia/echo_speex.c b/pjmedia/src/pjmedia/echo_speex.c
index 3e0d4812..13f5e2fc 100644
--- a/pjmedia/src/pjmedia/echo_speex.c
+++ b/pjmedia/src/pjmedia/echo_speex.c
@@ -31,7 +31,7 @@
#include "echo_internal.h"
#define THIS_FILE "echo_speex.c"
-#define BUF_COUNT 16
+#define BUF_COUNT PJMEDIA_SOUND_BUFFER_COUNT
#define MIN_PREFETCH 2
#define MAX_PREFETCH (BUF_COUNT*2/3)
diff --git a/pjmedia/src/pjmedia/sound_port.c b/pjmedia/src/pjmedia/sound_port.c
index bfe1c564..760d79f0 100644
--- a/pjmedia/src/pjmedia/sound_port.c
+++ b/pjmedia/src/pjmedia/sound_port.c
@@ -363,7 +363,8 @@ PJ_DEF(pj_status_t) pjmedia_snd_port_create( pj_pool_t *pool,
#if PJMEDIA_SOUND_USE_DELAYBUF
status = pjmedia_delay_buf_create(pool, "snd_buff", samples_per_frame,
- 16, -1, &snd_port->delay_buf);
+ PJMEDIA_SOUND_BUFFER_COUNT, -1,
+ &snd_port->delay_buf);
PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
#else
PJ_UNUSED_ARG(status);
diff --git a/pjmedia/src/pjmedia/splitcomb.c b/pjmedia/src/pjmedia/splitcomb.c
index cf729d01..3beef551 100644
--- a/pjmedia/src/pjmedia/splitcomb.c
+++ b/pjmedia/src/pjmedia/splitcomb.c
@@ -27,7 +27,13 @@
#define SIGNATURE_PORT PJMEDIA_PORT_SIGNATURE('S', 'p', 'C', 'P')
#define THIS_FILE "splitcomb.c"
#define TMP_SAMP_TYPE pj_int16_t
-#define MAX_BUF_CNT PJMEDIA_SOUND_BUFFER_COUNT
+
+/* When delay buffer is used, we only need 1 frame buffering */
+#if defined(PJMEDIA_SOUND_USE_DELAYBUF) && PJMEDIA_SOUND_USE_DELAYBUF!=0
+# define MAX_BUF_CNT 1
+#else
+# define MAX_BUF_CNT PJMEDIA_SOUND_BUFFER_COUNT
+#endif
#if 0
# define TRACE_UP_(x) PJ_LOG(5,x)