You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			76 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
		
		
			
		
	
	
			76 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
| 
											10 years ago
										 | #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; | ||
|  | } |