55 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			55 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/* Copyright (C) 2002 Jean-Marc Valin */
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								   @file speex_jitter_buffer.h
							 | 
						||
| 
								 | 
							
								   @brief Adaptive jitter buffer for Speex packets only
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <speex/speex_jitter.h>
							 | 
						||
| 
								 | 
							
								#include <speex/speex.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @defgroup SpeexJitter SpeexJitter: Adaptive jitter buffer specifically for Speex
							 | 
						||
| 
								 | 
							
								 *  This is the jitter buffer that reorders UDP/RTP packets and adjusts the buffer size
							 | 
						||
| 
								 | 
							
								 * to maintain good quality and low latency. This is a simplified version that works only
							 | 
						||
| 
								 | 
							
								 * with Speex, but is much easier to use.
							 | 
						||
| 
								 | 
							
								 *  @{
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Speex jitter-buffer state. Never use it directly! */
							 | 
						||
| 
								 | 
							
								typedef struct SpeexJitter {
							 | 
						||
| 
								 | 
							
								   SpeexBits current_packet;         /**< Current Speex packet */
							 | 
						||
| 
								 | 
							
								   int valid_bits;                   /**< True if Speex bits are valid */
							 | 
						||
| 
								 | 
							
								   JitterBuffer *packets;            /**< Generic jitter buffer state */
							 | 
						||
| 
								 | 
							
								   void *dec;                        /**< Pointer to Speex decoder */
							 | 
						||
| 
								 | 
							
								   spx_int32_t frame_size;           /**< Frame size of Speex decoder */
							 | 
						||
| 
								 | 
							
								} SpeexJitter;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Initialise jitter buffer 
							 | 
						||
| 
								 | 
							
								 * 
							 | 
						||
| 
								 | 
							
								 * @param jitter State of the Speex jitter buffer
							 | 
						||
| 
								 | 
							
								 * @param decoder Speex decoder to call
							 | 
						||
| 
								 | 
							
								 * @param sampling_rate Sampling rate used by the decoder
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								void speex_jitter_init(SpeexJitter *jitter, void *decoder, int sampling_rate);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Destroy jitter buffer */
							 | 
						||
| 
								 | 
							
								void speex_jitter_destroy(SpeexJitter *jitter);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Put one packet into the jitter buffer */
							 | 
						||
| 
								 | 
							
								void speex_jitter_put(SpeexJitter *jitter, char *packet, int len, int timestamp);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Get one packet from the jitter buffer */
							 | 
						||
| 
								 | 
							
								void speex_jitter_get(SpeexJitter *jitter, spx_int16_t *out, int *start_offset);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Get pointer timestamp of jitter buffer */
							 | 
						||
| 
								 | 
							
								int speex_jitter_get_pointer_timestamp(SpeexJitter *jitter);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* @} */
							 |