| #ifdef HAVE_CONFIG_H |
| #include "config.h" |
| #endif |
| |
| #include <speex/speex_jitter.h> |
| #include <stdio.h> |
| |
| union jbpdata { |
| unsigned int idx; |
| unsigned char data[4]; |
| }; |
| |
| void synthIn(JitterBufferPacket *in, int idx, int span) { |
| union jbpdata d; |
| d.idx = idx; |
| |
| in->data = d.data; |
| in->len = sizeof(d); |
| in->timestamp = idx * 10; |
| in->span = span * 10; |
| in->sequence = idx; |
| in->user_data = 0; |
| } |
| |
| void jitterFill(JitterBuffer *jb) { |
| char buffer[65536]; |
| JitterBufferPacket in, out; |
| int i; |
| |
| out.data = buffer; |
| |
| jitter_buffer_reset(jb); |
| |
| for(i=0;i<100;++i) { |
| synthIn(&in, i, 1); |
| jitter_buffer_put(jb, &in); |
| |
| out.len = 65536; |
| if (jitter_buffer_get(jb, &out, 10, NULL) != JITTER_BUFFER_OK) { |
| printf("Fill test failed iteration %d\n", i); |
| } |
| if (out.timestamp != i * 10) { |
| printf("Fill test expected %d got %d\n", i*10, out.timestamp); |
| } |
| jitter_buffer_tick(jb); |
| } |
| } |
| |
| int main() |
| { |
| char buffer[65536]; |
| JitterBufferPacket in, out; |
| int i; |
| |
| JitterBuffer *jb = jitter_buffer_init(10); |
| |
| out.data = buffer; |
| |
| /* Frozen sender case */ |
| jitterFill(jb); |
| for(i=0;i<100;++i) { |
| out.len = 65536; |
| jitter_buffer_get(jb, &out, 10, NULL); |
| jitter_buffer_tick(jb); |
| } |
| synthIn(&in, 100, 1); |
| jitter_buffer_put(jb, &in); |
| out.len = 65536; |
| if (jitter_buffer_get(jb, &out, 10, NULL) != JITTER_BUFFER_OK) { |
| printf("Failed frozen sender resynchronize\n"); |
| } else { |
| printf("Frozen sender: Jitter %d\n", out.timestamp - 100*10); |
| } |
| return 0; |
| } |