mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			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
		
	
| 
								 
											12 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 = (char*)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;
							 | 
						||
| 
								 | 
							
								}
							 |