#include <sys/audioio.h>
#include <unistd.h>
#include "/usr/include/stdlib.h"
#include "/usr/include/fcntl.h"
#include "/usr/include/sys/types.h"
#include "/usr/include/stdio.h"
#include <strings.h>
#include <string.h>
#include <sys/uio.h>
#include <iostream.h>

#define PACK_STARTCODE             (unsigned int)0x000001ba
#define SYSTEM_HEADER_STARTCODE    (unsigned int)0x000001bb
#define PICTURE_START_CODE	   (unsigned int)0x00000100
#define ISO_11172_ENDCODE         (unsigned int)0x000001b9
#define SEQUENCE_HEADER_CODE	(unsigned int)0x000001b3

#define MAX_RTP_PKT_LENGTH 	1024
#define HEADER_LENGTH		12
#define MPA			14 /*MPEG PAYLOAD TYPE */

typedef struct { 
       unsigned int version:2;   /* protocol version */
       unsigned int p:1;         /* padding flag */
       unsigned int x:1;         /* header extension flag */
       unsigned int cc:4;        /* CSRC count */
       unsigned int m:1;         /* GOP end present or 1st talkspurt flag */
       unsigned int pt:7;        /* payload type */
       unsigned int seq:16;      /* sequence number */ 
       unsigned int pts:32;      /* timestamp */
} RTP_FIXED_HEADER; /* 8 BYTES */

typedef struct {
	unsigned int MBZ:5;	/* unused */
	unsigned int T:1;	/* video specific head extension flag */
	unsigned int TR:10;	/* Temporal Reference */
	unsigned int AN:1;	/* Active N bit */
	unsigned int N:1;	/* N bit; used in MPEG 2 */
	unsigned int S:1;	/* sequence header present flag */
	unsigned int B:1;	/* set if start of payload is slice start code */
	unsigned int E:1;	/* set if last byte of payload is slice end code */
	unsigned int P:3;	/* picture type; 1=I,2=P,3=B,4=D */
	unsigned int FBV:1;	/* full_pel_backward_vector */
	unsigned int BFC:3;	/* backward_f_code */
	unsigned int FFV:1;	/* full_pel_forward_vector */
	unsigned int FFC:3;	/* forward_f_code */
} MPEG_VID_SPECIFIC_HDR; /* 4 BYTES */

RTP_FIXED_HEADER rtp_hdr;

MPEG_VID_SPECIFIC_HDR mpeg_hdr;

enum reading_status { 
	SLICE,
	SEQUENCE_HEADER,
	PICTURE,
	SLICE_END
		};

