Commit 86343ef2 authored by Alexandre Bourget's avatar Alexandre Bourget
Browse files

Fix comments on libiax2

parent a1f6c4ac
......@@ -158,57 +158,57 @@
/* Full frames are always delivered reliably */
struct ast_iax2_full_hdr {
unsigned short scallno; /** Source call number -- high bit must be 1 */
unsigned short dcallno; /** Destination call number -- high bit is 1 if retransmission */
unsigned int ts; /** 32-bit timestamp in milliseconds (from 1st transmission) */
unsigned char oseqno; /** Packet number (outgoing) */
unsigned char iseqno; /** Packet number (next incoming expected) */
char type; /** Frame type */
unsigned char csub; /** Compressed subclass */
unsigned short scallno; /**< Source call number -- high bit must be 1 */
unsigned short dcallno; /**< Destination call number -- high bit is 1 if retransmission */
unsigned int ts; /**< 32-bit timestamp in milliseconds (from 1st transmission) */
unsigned char oseqno; /**< Packet number (outgoing) */
unsigned char iseqno; /**< Packet number (next incoming expected) */
char type; /**< Frame type */
unsigned char csub; /**< Compressed subclass */
unsigned char iedata[0];
} __PACKED;
/* Mini header is used only for voice frames -- delivered unreliably */
struct ast_iax2_mini_hdr {
unsigned short callno; /** Source call number -- high bit must be 0, rest must be non-zero */
unsigned short ts; /** 16-bit Timestamp (high 16 bits from last ast_iax2_full_hdr) */
/** Frametype implicitly VOICE_FRAME */
/** subclass implicit from last ast_iax2_full_hdr */
unsigned short callno; /**< Source call number -- high bit must be 0, rest must be non-zero */
unsigned short ts; /**< 16-bit Timestamp (high 16 bits from last ast_iax2_full_hdr) */
/**< Frametype implicitly VOICE_FRAME */
/**< subclass implicit from last ast_iax2_full_hdr */
unsigned char data[0];
} __PACKED;
struct ast_iax2_meta_hdr {
unsigned short zeros; /** Zeros field -- must be zero */
unsigned char metacmd; /** Meta command */
unsigned char cmddata; /** Command Data */
unsigned short zeros; /**< Zeros field -- must be zero */
unsigned char metacmd; /**< Meta command */
unsigned char cmddata; /**< Command Data */
unsigned char data[0];
} __PACKED;
struct ast_iax2_video_hdr {
unsigned short zeros; /** Zeros field -- must be zero */
unsigned short callno; /** Video call number */
unsigned short ts; /** Timestamp and mark if present */
unsigned short zeros; /**< Zeros field -- must be zero */
unsigned short callno; /**< Video call number */
unsigned short ts; /**< Timestamp and mark if present */
unsigned char data[0];
} __PACKED;
struct ast_iax2_meta_trunk_hdr {
unsigned int ts; /** 32-bit timestamp for all messages */
unsigned int ts; /**< 32-bit timestamp for all messages */
unsigned char data[0];
} __PACKED;
struct ast_iax2_meta_trunk_entry {
unsigned short callno; /** Call number */
unsigned short len; /** Length of data for this callno */
unsigned short callno; /**< Call number */
unsigned short len; /**< Length of data for this callno */
} __PACKED;
#define IAX_FIRMWARE_MAGIC 0x69617879
struct ast_iax2_firmware_header {
unsigned int magic; /** Magic number */
unsigned short version; /** Software version */
unsigned char devname[16]; /** Device */
unsigned int datalen; /** Data length of file beyond header */
unsigned char chksum[16]; /** Checksum of all data */
unsigned int magic; /**< Magic number */
unsigned short version; /**< Software version */
unsigned char devname[16]; /**< Device */
unsigned int datalen; /**< Data length of file beyond header */
unsigned char chksum[16]; /**< Checksum of all data */
unsigned char data[0];
} __PACKED;
......
......@@ -55,43 +55,43 @@ enum jb_frame_type {
typedef struct jb_conf {
/* settings */
long max_jitterbuf; /* defines a hard clamp to use in setting the jitter buffer delay */
long resync_threshold; /* the jb will resync when delay increases to (2 * jitter) + this param */
long max_contig_interp; /* the max interp frames to return in a row */
long target_extra; /* amount of additional jitterbuffer adjustment, overrides JB_TARGET_EXTRA */
long max_jitterbuf; /**< defines a hard clamp to use in setting the jitter buffer delay */
long resync_threshold; /**< the jb will resync when delay increases to (2 * jitter) + this param */
long max_contig_interp; /**< the max interp frames to return in a row */
long target_extra; /**< amount of additional jitterbuffer adjustment, overrides JB_TARGET_EXTRA */
} jb_conf;
typedef struct jb_info {
jb_conf conf;
/* statistics */
long frames_in; /* number of frames input to the jitterbuffer.*/
long frames_out; /* number of frames output from the jitterbuffer.*/
long frames_late; /* number of frames which were too late, and dropped.*/
long frames_lost; /* number of missing frames.*/
long frames_dropped; /* number of frames dropped (shrinkage) */
long frames_ooo; /* number of frames received out-of-order */
long frames_cur; /* number of frames presently in jb, awaiting delivery.*/
long jitter; /* jitter measured within current history interval*/
long min; /* minimum lateness within current history interval */
long current; /* the present jitterbuffer adjustment */
long target; /* the target jitterbuffer adjustment */
long losspct; /* recent lost frame percentage (* 1000) */
long next_voice_ts; /* the ts of the next frame to be read from the jb - in receiver's time */
long last_voice_ms; /* the duration of the last voice frame */
long silence_begin_ts; /* the time of the last CNG frame, when in silence */
long last_adjustment; /* the time of the last adjustment */
long last_delay; /* the last now added to history */
long cnt_delay_discont; /* the count of discontinuous delays */
long resync_offset; /* the amount to offset ts to support resyncs */
long cnt_contig_interp; /* the number of contiguous interp frames returned */
long frames_in; /**< number of frames input to the jitterbuffer.*/
long frames_out; /**< number of frames output from the jitterbuffer.*/
long frames_late; /**< number of frames which were too late, and dropped.*/
long frames_lost; /**< number of missing frames.*/
long frames_dropped; /**< number of frames dropped (shrinkage) */
long frames_ooo; /**< number of frames received out-of-order */
long frames_cur; /**< number of frames presently in jb, awaiting delivery.*/
long jitter; /**< jitter measured within current history interval*/
long min; /**< minimum lateness within current history interval */
long current; /**< the present jitterbuffer adjustment */
long target; /**< the target jitterbuffer adjustment */
long losspct; /**< recent lost frame percentage (* 1000) */
long next_voice_ts; /**< the ts of the next frame to be read from the jb - in receiver's time */
long last_voice_ms; /**< the duration of the last voice frame */
long silence_begin_ts; /**< the time of the last CNG frame, when in silence */
long last_adjustment; /**< the time of the last adjustment */
long last_delay; /**< the last now added to history */
long cnt_delay_discont; /**< the count of discontinuous delays */
long resync_offset; /**< the amount to offset ts to support resyncs */
long cnt_contig_interp; /**< the number of contiguous interp frames returned */
} jb_info;
typedef struct jb_frame {
void *data; /* the frame data */
long ts; /* the relative delivery time expected */
long ms; /* the time covered by this frame, in sec/8000 */
enum jb_frame_type type; /* the type of frame */
void *data; /**< the frame data */
long ts; /**< the relative delivery time expected */
long ms; /**< the time covered by this frame, in sec/8000 */
enum jb_frame_type type; /**< the type of frame */
struct jb_frame *next, *prev;
} jb_frame;
......@@ -99,29 +99,30 @@ typedef struct jitterbuf {
jb_info info;
/* history */
long history[JB_HISTORY_SZ]; /* history */
int hist_ptr; /* points to index in history for next entry */
long hist_maxbuf[JB_HISTORY_MAXBUF_SZ]; /* a sorted buffer of the max delays (highest first) */
long hist_minbuf[JB_HISTORY_MAXBUF_SZ]; /* a sorted buffer of the min delays (lowest first) */
int hist_maxbuf_valid; /* are the "maxbuf"/minbuf valid? */
jb_frame *frames; /* queued frames */
jb_frame *free; /* free frames (avoid malloc?) */
long history[JB_HISTORY_SZ]; /**< history */
int hist_ptr; /**< points to index in history for next entry */
long hist_maxbuf[JB_HISTORY_MAXBUF_SZ]; /**< a sorted buffer of the max delays (highest first) */
long hist_minbuf[JB_HISTORY_MAXBUF_SZ]; /**< a sorted buffer of the min delays (lowest first) */
int hist_maxbuf_valid; /**< are the "maxbuf"/minbuf valid? */
jb_frame *frames; /**< queued frames */
jb_frame *free; /**< free frames (avoid malloc?) */
} jitterbuf;
/* new jitterbuf */
/** new jitterbuf */
jitterbuf * jb_new(void);
/* destroy jitterbuf */
/** destroy jitterbuf */
void jb_destroy(jitterbuf *jb);
/* reset jitterbuf */
/** reset jitterbuf */
/* NOTE: The jitterbuffer should be empty before you call this, otherwise
* you will leak queued frames, and some internal structures */
void jb_reset(jitterbuf *jb);
/* queue a frame data=frame data, timings (in ms): ms=length of frame (for voice), ts=ts (sender's time)
/** queue a frame data=frame data, timings (in ms): ms=length of frame (for voice), ts=ts (sender's time)
*
* now=now (in receiver's time) return value is one of
* JB_OK: Frame added. Last call to jb_next() still valid
* JB_DROP: Drop this frame immediately
......@@ -129,7 +130,8 @@ void jb_reset(jitterbuf *jb);
*/
enum jb_return_code jb_put(jitterbuf *jb, void *data, const enum jb_frame_type type, long ms, long ts, long now);
/* get a frame for time now (receiver's time) return value is one of
/** get a frame for time now (receiver's time) return value is one of
*
* JB_OK: You've got frame!
* JB_DROP: Here's an audio frame you should just drop. Ask me again for this time..
* JB_NOFRAME: There's no frame scheduled for this time.
......@@ -138,7 +140,7 @@ enum jb_return_code jb_put(jitterbuf *jb, void *data, const enum jb_frame_type t
*/
enum jb_return_code jb_get(jitterbuf *jb, jb_frame *frame, long now, long interpl);
/* unconditionally get frames from jitterbuf until empty */
/** unconditionally get frames from jitterbuf until empty */
enum jb_return_code jb_getall(jitterbuf *jb, jb_frame *frameout);
/* when is the next frame due out, in receiver's time (0=EMPTY)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment