14
14
#define __MPEGSYSTEMSTREAM_H
18
#include "../input/inputPlugin.h"
19
#include "mpegSystemHeader.h"
23
#define FLOAT_0x10000 (double)((unsigned long)1 << 16)
28
// 32 .......................................0 9.........0
29
// [PACK_START_CODE][01---1--][--------][-----1--][--------][-----1--][-------1
31
#define ui64 unsigned long
32
#define ui32 unsigned int
36
#define MPEG1_CLK_REF (i64)90000
37
#define MPEG2_CLK_REF (i64)27000000
40
#define GET_SCRBASE(buf) ( ((ui64)buf[4]&0xF8)>>3 | \
42
((ui64)buf[2]&0x03)<<13 | \
43
((ui64)buf[2]&0xF8)<<12 | \
45
((ui64)buf[0]&0x03)<<28 | \
46
(ui64)buf[0]&0x38 <<27 )
48
#define GET_SCREXT(buf) ( ((ui64)buf[5]&0xFE)>>1 | \
49
((ui64)buf[4]&0x03)<<7 )
52
// 22 ......................0 stl
53
// ... [--------][--------][------11][rrrrr---]
54
#define GET_MPEG2MUXRATE(buf) ( (ui32)buf[6]<<14 | \
56
((ui32)buf[8]&0x03)>>2) \
58
#define GET_MPEG2STUFFING(buf) ((buf[9]&0x07))
62
// 32........................................0 22......
63
//[PACK_START_CODE][0010---1][--------][-------1][--------][-------1][1-------]
64
#define GET_SCR(buf) ( ((ui64)buf[4]&0xFE) >>1 | \
65
((ui64)buf[3]) <<7 | \
66
((ui64)buf[2]&0xFE) <<14 | \
67
((ui64)buf[1]) <<22 | \
68
((ui64)buf[0]&0x0E) <<29 )
70
#define GET_MPEG1_PTS(x) (GET_SCR(x)) //they follow the same pattern
72
#define GET_MPEG1_MUXRATE(x) ( ((ui32)x[7]&0xFE) >>1 | \
74
((ui32)x[5]&0x7F) <<15 )
76
#define GET_MPEG2_PTS_FLAGS(buf) ( ((ui8)buf[3]&0xC0)>>6 )
77
// MPEG2 PES packet (optional parameters)
79
// 32........................................0
80
// [PACKET_START_CODE][001x---1][--------][-------1][--------][-------1]
81
#define GET_MPEG2_PTS(buf) GET_MPEG1_PTS(buf)
18
#include "tsSystemStream.h"
19
#include "psSystemStream.h"
20
#include "pesSystemStream.h"
88
23
class MpegSystemStream {
92
27
unsigned int syncCode;
29
TSSystemStream* tsSystemStream;
30
PSSystemStream* psSystemStream;
31
PESSystemStream* pesSystemStream;
96
34
MpegSystemStream(InputStream* input);
97
35
~MpegSystemStream();
99
// returns true if init successfull
37
// returns true if init successful
100
38
int firstInitialize(MpegSystemHeader* mpegHeader);
101
39
int nextPacket(MpegSystemHeader* mpegHeader);
102
40
inline int eof() { return input->eof(); }
106
44
int readSyncCode();
107
45
int getByteDirect();
108
int readHeader(unsigned int* startCode);
109
int processStartCode(unsigned int startCode,MpegSystemHeader* mpegHeader);
46
int demux_ts_pes_buffer(MpegSystemHeader* mpegHeader);
111
int processPackHeader(MpegSystemHeader* mpegHeader);
112
48
int processSystemHeader(MpegSystemHeader* mpegHeader);
114
int processPacket(unsigned int startCode,MpegSystemHeader* mpegHeader);
115
int processPacketHeader(MpegSystemHeader* mpegHeader);
116
int processMPEG2PacketHeader(MpegSystemHeader* mpegHeader);
117
int processPrivateHeader(MpegSystemHeader* mpegHeader);
119
int readStartCode(unsigned int startCode,MpegSystemHeader* mpegHeader);
121
void readSTD(unsigned char* inputBuffer,MpegSystemHeader* mpegHeader);
122
void readTimeStamp(unsigned char* inputBuffer,unsigned char* hiBit,
123
unsigned long* low4Bytes);
125
int makeClockTime(unsigned char hiBit, unsigned long low4Bytes,