diff options
Diffstat (limited to 'toxav/codec.c')
-rw-r--r-- | toxav/codec.c | 25 |
1 files changed, 17 insertions, 8 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 | ||
61 | void terminate_queue(JitterBuffer *q) | 61 | static 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 | |||
69 | void 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 | ||