summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorirungentoo <irungentoo@gmail.com>2014-07-24 20:56:07 -0400
committerirungentoo <irungentoo@gmail.com>2014-07-24 20:56:07 -0400
commitda03feaaced60e251006992e790abc8c00911826 (patch)
treea41ccdc8b2797b375cbb7025da05124a1caeb9c7
parent450c503eba6a61da1d1c21809ac304df26cf3134 (diff)
Fixed some issues with queue.
disconnecting then reconnecting right away should no longer kill audio transmission.
-rw-r--r--toxav/codec.c25
-rw-r--r--toxav/toxav.c2
2 files changed, 18 insertions, 9 deletions
diff --git a/toxav/codec.c b/toxav/codec.c
index 8b1855a0..448edd4c 100644
--- a/toxav/codec.c
+++ b/toxav/codec.c
@@ -40,7 +40,7 @@ JitterBuffer *create_queue(unsigned int capacity)
40{ 40{
41 unsigned int size = 1; 41 unsigned int size = 1;
42 42
43 while (size <= (capacity + 1) * 2) { 43 while (size <= (capacity + 4) * 2) {
44 size *= 2; 44 size *= 2;
45 } 45 }
46 46
@@ -58,15 +58,19 @@ JitterBuffer *create_queue(unsigned int capacity)
58 return q; 58 return q;
59} 59}
60 60
61void terminate_queue(JitterBuffer *q) 61static void clear_queue(JitterBuffer *q)
62{ 62{
63 if (!q) return;
64
65 for (; q->bottom != q->top; ++q->bottom) { 63 for (; q->bottom != q->top; ++q->bottom) {
66 if (!q->queue[q->bottom % q->size]) 64 if (q->queue[q->bottom % q->size])
67 rtp_free_msg(NULL, q->queue[q->bottom % q->size]); 65 rtp_free_msg(NULL, q->queue[q->bottom % q->size]);
68 } 66 }
67}
68
69void terminate_queue(JitterBuffer *q)
70{
71 if (!q) return;
69 72
73 clear_queue(q);
70 free(q->queue); 74 free(q->queue);
71 free(q); 75 free(q);
72} 76}
@@ -75,11 +79,16 @@ void queue(JitterBuffer *q, RTPMessage *pk)
75{ 79{
76 uint16_t sequnum = pk->header->sequnum; 80 uint16_t sequnum = pk->header->sequnum;
77 81
78 if (sequnum - q->bottom > q->size)
79 return;
80
81 unsigned int num = sequnum % q->size; 82 unsigned int num = sequnum % q->size;
82 83
84 if (sequnum - q->bottom > q->size) {
85 clear_queue(q);
86 q->bottom = sequnum;
87 q->queue[num] = pk;
88 q->top = sequnum + 1;
89 return;
90 }
91
83 if (q->queue[num]) 92 if (q->queue[num])
84 return; 93 return;
85 94
diff --git a/toxav/toxav.c b/toxav/toxav.c
index 06127ef4..e15c409d 100644
--- a/toxav/toxav.c
+++ b/toxav/toxav.c
@@ -95,7 +95,7 @@ const ToxAvCodecSettings av_DefaultSettings = {
95 1, 95 1,
96 600, 96 600,
97 97
98 2 98 3
99}; 99};
100 100
101 101