aboutsummaryrefslogtreecommitdiffstats
path: root/src/libjitter/jitter.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjitter/jitter.h')
-rw-r--r--src/libjitter/jitter.h62
1 files changed, 53 insertions, 9 deletions
diff --git a/src/libjitter/jitter.h b/src/libjitter/jitter.h
index e344d8a..b4cb15f 100644
--- a/src/libjitter/jitter.h
+++ b/src/libjitter/jitter.h
@@ -1,14 +1,58 @@
+#define JITTER_FLAG_NONE 0 // no flags at all
+#define JITTER_FLAG_LATENCY (1 << 0) // keep latency close to target_window_duration
+#define JITTER_FLAG_REPEAT (1 << 1) // repeat audio to extrapolate gaps
+
+/* window settings for low latency audio and extrapolation of gaps */
+#define JITTER_AUDIO 0.050, 1.000, JITTER_FLAG_LATENCY | JITTER_FLAG_REPEAT
+/* window settings for analog data (fax/modem) or digial data (HDLC) */
+#define JITTER_DATA 0.100, 0.200, JITTER_FLAG_NONE
+
+typedef struct jitter_frame {
+ struct jitter_frame *next;
+ uint16_t sequence;
+ uint32_t timestamp;
+ int length;
+ uint8_t samples[0];
+} jitter_frame_t;
+
typedef struct jitter {
- sample_t *spl; /* pointer to sample buffer */
- int len; /* buffer size: number of samples */
- int inptr, outptr; /* write pointer and read pointer */
+ char name[64];
+
+ /* sample properties */
+ int sample_size;
+ double sample_duration;
+
+ /* automatic sequence generation */
+ uint16_t next_sequence;
+ uint32_t next_timestamp;
+
+ /* window properties */
+ int unlocked;
+ uint32_t window_flags;
+ int target_window_size;
+ int max_window_size;
+ int window_valid;
+ uint32_t window_ssrc;
+ uint32_t window_timestamp;
+
+ /* reduction of delay */
+ double delay_interval;
+ double delay_counter;
+ int32_t min_delay_value;
+
+ /* extrapolation */
+ int extra_size;
+ int extra_index;
+ void *extra_samples;
+
+ /* list of frames */
+ jitter_frame_t *frame_list;
} jitter_t;
-int jitter_create(jitter_t *jitter, int length);
-void jitter_reset(jitter_t *jitter);
-void jitter_destroy(jitter_t *jitter);
-void jitter_save(jitter_t *jb, sample_t *samples, int length);
-void jitter_load(jitter_t *jb, sample_t *samples, int length);
-void jitter_clear(jitter_t *jb);
+int jitter_create(jitter_t *jb, const char *name, double samplerate, int sample_size, double target_window_duration, double max_window_duration, uint32_t window_flags);
+void jitter_reset(jitter_t *jb);
+void jitter_destroy(jitter_t *jb);
+void jitter_save(jitter_t *jb, void *samples, int length, int has_sequence, uint16_t sequence, uint32_t timestamp, uint32_t ssrc);
+void jitter_load(jitter_t *jb, void *samples, int length);