summaryrefslogtreecommitdiffstats
path: root/kopete/protocols/jabber/jingle/libjingle/talk/third_party/ortp/rtp.h
blob: f67409d891d729f4d71a8ed0dbc7a95a5de759dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
  The oRTP library is an RTP (Realtime Transport Protocol - rfc1889) stack.
  Copyright (C) 2001  Simon MORLAT simon.morlat@linphone.org

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/


#ifndef RTP_H
#define RTP_H

#include <rtpport.h>




#define RTP_MAX_RTQ_SIZE 100 /* max number of packet allowed to be enqueued */

#define IPMAXLEN 20
#define UDP_MAX_SIZE 65536
#define RTP_FIXED_HEADER_SIZE 12
#define RTP_DEFAULT_JITTER_TIME 80	/*miliseconds*/



typedef struct rtp_header
{
#ifdef WORDS_BIGENDIAN
	guint16 version:2;
	guint16 padbit:1;
	guint16 extbit:1;
	guint16 cc:4;
	guint16 markbit:1;
	guint16 paytype:7;
#else
	guint16 cc:4;
	guint16 extbit:1;
	guint16 padbit:1;
	guint16 version:2;
	guint16 paytype:7;
	guint16 markbit:1;
#endif
	guint16 seq_number;
	guint32 timestamp;
	guint32 ssrc;
	guint32 csrc[16];
} rtp_header_t;




typedef struct rtp_stats
{
	guint64 packet_sent;
	guint64 sent;		/* bytes sent */
	guint64 recv; 		/* bytes received and delivered in time to the application */
	guint64 hw_recv;		/* bytes of udp packets received */
	guint64 packet_recv;	/* number of packets received */
	guint64 unavaillable;	/* packets not availlable when they were queried */
	guint64 outoftime;		/* number of packets that were received too late */
	guint64 skipped;		/* number of packets skipped (that the application never queried 
											or that need to be skipped in order to compensate a clock slide (see adaptive jitter control)) */
	guint64 cum_packet_loss; /* cumulative number of packet lost */
	guint64 bad;			/* packets that did not appear to be RTP */
	guint64 discarded;		/* incoming packets discarded because the queue exceeds its max size */
} rtp_stats_t;

#define RTP_TIMESTAMP_IS_NEWER_THAN(ts1,ts2) \
	((guint32)((guint32)(ts1) - (guint32)(ts2))< (guint32)(1<<31))

#define RTP_TIMESTAMP_IS_STRICTLY_NEWER_THAN(ts1,ts2) \
	( ((guint32)((guint32)(ts1) - (guint32)(ts2))< (guint32)(1<<31)) && (ts1)!=(ts2) )

#define TIME_IS_NEWER_THAN(t1,t2) RTP_TIMESTAMP_IS_NEWER_THAN(t1,t2)

#define TIME_IS_STRICTLY_NEWER_THAN(t1,t2) RTP_TIMESTAMP_IS_STRICTLY_NEWER_THAN(t1,t2)

#endif