Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cMP4File.h
Go to the documentation of this file.
1 //
4 //
5 
6 #ifndef _INC_cMP4File_H
7 #define _INC_cMP4File_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "../AV/cAVSink.h"
13 #include "../UID/cFourCC.h"
15 
16 namespace GrayLib
17 {
19  {
28  MP4_TRAK_RTP = 7
29  };
30 
32  {
35 
36  MP4_ATOM_0 = 0,
37  MP4_ATOM_ftyp = MAKEFOURCC('f', 't', 'y', 'p'), // content type defs. first. (root)
38  MP4_ATOM_moov = MAKEFOURCC('m', 'o', 'o', 'v'), // descriptors container (root)
39 
40  MP4_ATOM_mvhd = MAKEFOURCC('m', 'v', 'h', 'd'), // inside MP4_ATOM_moov
41  MP4_ATOM_meta = MAKEFOURCC('m', 'e', 't', 'a'),
42 
43  MP4_ATOM_trak = MAKEFOURCC('t', 'r', 'a', 'k'), // inside MP4_ATOM_moov
44  MP4_ATOM_tkhd = MAKEFOURCC('t', 'k', 'h', 'd'), // inside MP4_ATOM_trak
45  MP4_ATOM_edts = MAKEFOURCC('e', 'd', 't', 's'), // inside MP4_ATOM_trak
46  MP4_ATOM_elst = MAKEFOURCC('e', 'l', 's', 't'), // inside MP4_ATOM_edts
47  MP4_ATOM_mdia = MAKEFOURCC('m', 'd', 'i', 'a'), // inside
48  MP4_ATOM_mdhd = MAKEFOURCC('m', 'd', 'h', 'd'), // inside
49  MP4_ATOM_hdlr = MAKEFOURCC('h', 'd', 'l', 'r'), // inside
50  MP4_ATOM_minf = MAKEFOURCC('m', 'i', 'n', 'f'), // inside
51 
52  MP4_ATOM_smhd = MAKEFOURCC('s', 'm', 'h', 'd'), // inside MP4_ATOM_trak - audio
53  MP4_ATOM_vmhd = MAKEFOURCC('v', 'm', 'h', 'd'), // inside MP4_ATOM_trak - video
54 
55  MP4_ATOM_dinf = MAKEFOURCC('d', 'i', 'n', 'f'), // inside
56  MP4_ATOM_dref = MAKEFOURCC('d', 'r', 'e', 'f'), // inside
57  MP4_ATOM_url = MAKEFOURCC('u', 'r', 'l', ' '), // inside
58  MP4_ATOM_stbl = MAKEFOURCC('s', 't', 'b', 'l'), // inside
59  MP4_ATOM_stsd = MAKEFOURCC('s', 't', 's', 'd'), // inside
60 
61  MP4_ATOM_mp4a = MAKEFOURCC('m', 'p', '4', 'a'), // inside MP4_ATOM_moov - audio
62  MP4_ATOM_avc1 = MAKEFOURCC('a', 'v', 'c', '1'), // inside MP4_ATOM_moov - video
63 
64  MP4_ATOM_esds = MAKEFOURCC('e', 's', 'd', 's'), // inside MP4_ATOM_moov - audio
65  MP4_ATOM_avcC = MAKEFOURCC('a', 'v', 'c', 'C'), // inside MP4_ATOM_moov - video
66 
67  MP4_ATOM_stts = MAKEFOURCC('s', 't', 't', 's'), // inside MP4_ATOM_moov
68  MP4_ATOM_stss = MAKEFOURCC('s', 't', 's', 's'), // inside MP4_ATOM_moov
69  MP4_ATOM_stsc = MAKEFOURCC('s', 't', 's', 'c'), // inside MP4_ATOM_moov
70  MP4_ATOM_stsz = MAKEFOURCC('s', 't', 's', 'z'), // inside MP4_ATOM_moov
71  MP4_ATOM_stco = MAKEFOURCC('s', 't', 'c', 'o'), // inside MP4_ATOM_moov - an index ?
72 
73  MP4_ATOM_udta = MAKEFOURCC('u', 'd', 't', 'a'), // inside MP4_ATOM_moov
74  MP4_ATOM_Creq = MAKEFOURCC('©', 'r', 'e', 'q'), // inside MP4_ATOM_moov - copyright required ?
75  MP4_ATOM_Cenc = MAKEFOURCC('©', 'e', 'n', 'c'), // inside MP4_ATOM_moov - copyright encoded ?
76 
77  MP4_ATOM_wide = MAKEFOURCC('w', 'i', 'd', 'e'), // usually the data. (root)
78 
79  MP4_ATOM_mdat = MAKEFOURCC('m', 'd', 'a', 't'), // inside MP4_ATOM_wide
80 
81  MP4_ATOM_ilst = MAKEFOURCC('i', 'l', 's', 't'),
82  MP4_ATOM_gsst = MAKEFOURCC('g', 's', 's', 't'), // inside MP4_ATOM_ilst
83  MP4_ATOM_gstd = MAKEFOURCC('g', 's', 't', 'd'), // inside MP4_ATOM_ilst
84  MP4_ATOM_gssd = MAKEFOURCC('g', 's', 's', 'd'), // inside MP4_ATOM_ilst
85  MP4_ATOM_gspu = MAKEFOURCC('g', 's', 'p', 'u'), // inside MP4_ATOM_ilst
86  MP4_ATOM_gspm = MAKEFOURCC('g', 's', 'p', 'm'), // inside MP4_ATOM_ilst
87  MP4_ATOM_gshh = MAKEFOURCC('g', 's', 'h', 'h'), // inside MP4_ATOM_ilst
88 
89  MP4_ATOM_Ctoo = MAKEFOURCC('©', 't', 'o', 'o'), // inside MP4_ATOM_meta
90  MP4_ATOM_Cnam = MAKEFOURCC('©', 'n', 'a', 'm'),
91  MP4_ATOM_Calb = MAKEFOURCC('©', 'a', 'l', 'b'),
92  MP4_ATOM_Cgen = MAKEFOURCC('©', 'g', 'e', 'n'),
93  MP4_ATOM_CART = MAKEFOURCC('©', 'A', 'R', 'T'),
94 
95  MP4_ATOM_stik = MAKEFOURCC('s', 't', 'i', 'k'),
96  MP4_ATOM_tref = MAKEFOURCC('t', 'r', 'e', 'f'),
97  MP4_ATOM_trkn = MAKEFOURCC('t', 'r', 'k', 'n'),
98  MP4_ATOM_covr = MAKEFOURCC('c', 'o', 'v', 'r'), // wrap PNG
99  };
100 
102  {
105  public:
106  UINT64 m_nSize;
108  public:
109  cMP4FileAtom(UINT64 nSize = 0) noexcept
110  : m_nSize(nSize)
111  {
112  }
113  HRESULT ReadAtom(cStreamInput* pInp);
114  };
115 
117  {
122 
123  public:
124  cMP4FileReader(cStreamInput& s, cAVSink* pAVSink);
125  virtual ~cMP4FileReader();
126 
127  virtual HRESULT ReadStream() override;
128 
129  UNITTEST_FRIEND(cMP4File);
130  };
131 
133  {
137 
138  public:
140 
141  public:
143  : m_pStreamOut(pOut)
144  {
145  }
146  virtual HRESULT OnHeaderStream(const cAVHeaderStream& head, const void* pForm, size_t nSizeForm) override;
147  virtual HRESULT OnFrame(const cAVHeaderFrame& head, const void* pData, size_t nSizeData) override;
148  };
149 }
150 
151 #endif
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define MAKEFOURCC(ch0, ch1, ch2, ch3)
Definition: cFourCC.h:24
Definition: cAVSink.h:80
Definition: cAVSink.h:60
Definition: cAVSink.h:181
Definition: cAVSink.h:130
Definition: cFourCC.h:96
Definition: cMP4File.h:102
UINT64 m_nSize
can be up to 64 bits. non header inclusive data block size.
Definition: cMP4File.h:106
cFourCC m_Type
MP4_ATOM_TYPE.
Definition: cMP4File.h:107
cMP4FileAtom(UINT64 nSize=0) noexcept
Definition: cMP4File.h:109
Definition: cMP4File.h:117
Definition: cMP4File.h:133
cMP4FileWriter(cStreamOutput *pOut) noexcept
Definition: cMP4File.h:142
cStreamOutput * m_pStreamOut
File or memory stream output.
Definition: cMP4File.h:139
Definition: cStream.h:306
Definition: cStream.h:126
Definition: cMesh.h:22
MP4_ATOM_TYPE
Definition: cMP4File.h:32
@ MP4_ATOM_Ctoo
Definition: cMP4File.h:89
@ MP4_ATOM_stbl
Definition: cMP4File.h:58
@ MP4_ATOM_trkn
Definition: cMP4File.h:97
@ MP4_ATOM_gshh
Definition: cMP4File.h:87
@ MP4_ATOM_gsst
Definition: cMP4File.h:82
@ MP4_ATOM_dref
Definition: cMP4File.h:56
@ MP4_ATOM_stsz
Definition: cMP4File.h:70
@ MP4_ATOM_gssd
Definition: cMP4File.h:84
@ MP4_ATOM_avc1
Definition: cMP4File.h:62
@ MP4_ATOM_elst
Definition: cMP4File.h:46
@ MP4_ATOM_tkhd
Definition: cMP4File.h:44
@ MP4_ATOM_Calb
Definition: cMP4File.h:91
@ MP4_ATOM_mdat
Definition: cMP4File.h:79
@ MP4_ATOM_moov
Definition: cMP4File.h:38
@ MP4_ATOM_stss
Definition: cMP4File.h:68
@ MP4_ATOM_stts
Definition: cMP4File.h:67
@ MP4_ATOM_0
Definition: cMP4File.h:36
@ MP4_ATOM_Creq
Definition: cMP4File.h:74
@ MP4_ATOM_url
Definition: cMP4File.h:57
@ MP4_ATOM_esds
Definition: cMP4File.h:64
@ MP4_ATOM_smhd
Definition: cMP4File.h:52
@ MP4_ATOM_minf
Definition: cMP4File.h:50
@ MP4_ATOM_avcC
Definition: cMP4File.h:65
@ MP4_ATOM_Cgen
Definition: cMP4File.h:92
@ MP4_ATOM_wide
Definition: cMP4File.h:77
@ MP4_ATOM_CART
Definition: cMP4File.h:93
@ MP4_ATOM_meta
Definition: cMP4File.h:41
@ MP4_ATOM_stco
Definition: cMP4File.h:71
@ MP4_ATOM_udta
Definition: cMP4File.h:73
@ MP4_ATOM_edts
Definition: cMP4File.h:45
@ MP4_ATOM_mp4a
Definition: cMP4File.h:61
@ MP4_ATOM_vmhd
Definition: cMP4File.h:53
@ MP4_ATOM_Cenc
Definition: cMP4File.h:75
@ MP4_ATOM_hdlr
Definition: cMP4File.h:49
@ MP4_ATOM_ftyp
Definition: cMP4File.h:37
@ MP4_ATOM_gspu
Definition: cMP4File.h:85
@ MP4_ATOM_gspm
Definition: cMP4File.h:86
@ MP4_ATOM_stsd
Definition: cMP4File.h:59
@ MP4_ATOM_ilst
Definition: cMP4File.h:81
@ MP4_ATOM_mdia
Definition: cMP4File.h:47
@ MP4_ATOM_mdhd
Definition: cMP4File.h:48
@ MP4_ATOM_dinf
Definition: cMP4File.h:55
@ MP4_ATOM_trak
Definition: cMP4File.h:43
@ MP4_ATOM_stsc
Definition: cMP4File.h:69
@ MP4_ATOM_gstd
Definition: cMP4File.h:83
@ MP4_ATOM_tref
Definition: cMP4File.h:96
@ MP4_ATOM_mvhd
Definition: cMP4File.h:40
@ MP4_ATOM_covr
Definition: cMP4File.h:98
@ MP4_ATOM_stik
Definition: cMP4File.h:95
@ MP4_ATOM_Cnam
Definition: cMP4File.h:90
MP4_TRAK_TYPE
Definition: cMP4File.h:19
@ MP4_TRAK_JPEG
Definition: cMP4File.h:27
@ MP4_TRAK_TEXT
Definition: cMP4File.h:26
@ MP4_TRAK_HINT
Definition: cMP4File.h:25
@ MP4_TRAK_RTP
Definition: cMP4File.h:28
@ MP4_TRAK_AUDIO
Definition: cMP4File.h:22
@ MP4_TRAK_UNKNOWN
Definition: cMP4File.h:21
@ MP4_TRAK_VIDEO
Definition: cMP4File.h:23
@ MP4_TRAK_SYSTEM
Definition: cMP4File.h:24