Blame view

src/gb28181/demuxer.h 2.72 KB
3d2ab595   Hu Chunming   支持gb28181
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
  /*******************************************************}

  {                                                       }

  {       File: demuxer.h                                 }

  {       Created by Tsviatko Jongov                      }

  {       http://tsviatko.jongov.com                      }

  {       Date : 25.01.2007                               }

  {                                                       }

  {       CMpeg2Demux class.                              }

  {                                                       }

  {*******************************************************/

  #include <stdint.h>

  #include "buffer.h"

  

  //MPEG-2 start codes

  #define SYSTEM_START_CODE_MIN     0x000001B9

  #define SYSTEM_START_CODE_MAX     0x000001FF

  #define PACK_START_CODE           0x000001BA

  #define SYSTEM_START_CODE         0x000001BB

  

  //MPEG-2 stream IDs

  #define PROGRAM_STREAM_MAP        0xBC

  #define PADDING_STREAM            0xBE

  #define PRIVATE_STREAM_2          0xBF

  #define ECM_STREAM                0xF0

  #define EMM_STREAM                0xF1

  #define PROGRAM_STREAM_DIRECTORY  0xFF

  #define DSM_CC_STREAM             0xF2

  #define ITU_T_STREAM_E            0xF8

  

  #define STREAM_TYPE_VIDEO         1

  #define STREAM_TYPE_AUDIO         2

  

  

  #define	STREAM_TYPE_UNKNOWN			0x00

  #define	VIDEO_TYPE_MPEG4			0x01

  #define	VIDEO_TYPE_H264				0x1B

  #define	VIDEO_TYPE_H265				0x24

  #define	VIDEO_TYPE_SVAC				0x80

  #define	AUDIO_TYPE_G711				0x90

  #define	AUDIO_TYPE_G722_1			0x92

  #define	AUDIO_TYPE_G723_1			0x93

  #define	AUDIO_TYPE_G729				0x99

  #define	AUDIO_TYPE_SVAC				0x9B

  //#include <BaseTsd.h>

  

  //typedef long long INT64;

  //typedef unsigned long long UINT64;

  

  typedef int ReceiveFunction(unsigned char streamType, void* data, int size, uint64_t pts, uint64_t localPts, bool bKey, void* userData);//es»Øµ÷

  typedef int ReceiveFunction2(unsigned int streamtype, void * Data, int Size, uint64_t pts, bool iskeyfram, void* userdata);//ps»Øµ÷

  

  static /*_inline*/ unsigned int asm_swap32(unsigned int x); 

  static /*_inline*/ unsigned short asm_swap16(unsigned short x);

  

  class CMpeg2Demux {

  private:

  	CBuffer * fBuffer; 

  	void*     m_userdata;

  	void*     m_userdata2;

  	ReceiveFunction * fReceiveFunction;

  	ReceiveFunction2* fReceiveFunction2;

  //	CBuffer* m_frambuf;

  	CBuffer* m_psvideo;

  	CBuffer* m_esvideo;

  	CBuffer* m_psaudio;

  	CBuffer* m_esaudio;

  	uint64_t m_lastpts;

  	bool     m_lastiskeyfram;

  	unsigned char	m_streamType;

  	int m_pserror = 0;

  	int Demultiplex();

  

  	/*DWORD    m_timeStamp;*/

  public:

  	CMpeg2Demux();

  	~CMpeg2Demux();

  	int AddData(void * Data, int Size/*, DWORD pts*/);

  	void SetReceiveFunction(ReceiveFunction * func, void* userdata);

  	void SetReceiveFunction2(ReceiveFunction2 * func2, void* userdata2);

  };