annotate Plugins/Input/aac/libmp4v2/rtphint.h @ 790:8f437afc4f4a trunk

[svn] - more sanity checking
author nenolod
date Fri, 03 Mar 2006 20:09:52 -0800
parents fa848bd484d8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
2 * The contents of this file are subject to the Mozilla Public
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
3 * License Version 1.1 (the "License"); you may not use this file
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
4 * except in compliance with the License. You may obtain a copy of
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
5 * the License at http://www.mozilla.org/MPL/
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
6 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
7 * Software distributed under the License is distributed on an "AS
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
9 * implied. See the License for the specific language governing
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
10 * rights and limitations under the License.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
11 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
12 * The Original Code is MPEG4IP.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
13 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
14 * The Initial Developer of the Original Code is Cisco Systems Inc.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
15 * Portions created by Cisco Systems Inc. are
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
16 * Copyright (C) Cisco Systems Inc. 2001. All Rights Reserved.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
17 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
18 * Contributor(s):
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
19 * Dave Mackie dmackie@cisco.com
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
20 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
21
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
22 #ifndef __RTPHINT_INCLUDED__
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
23 #define __RTPHINT_INCLUDED__
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
24
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
25 // forward declarations
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
26 class MP4RtpHintTrack;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
27 class MP4RtpHint;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
28 class MP4RtpPacket;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
29
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
30 class MP4RtpData : public MP4Container {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
31 public:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
32 MP4RtpData(MP4RtpPacket* pPacket);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
33
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
34 MP4RtpPacket* GetPacket() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
35 return m_pPacket;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
36 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
37
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
38 virtual u_int16_t GetDataSize() = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
39 virtual void GetData(u_int8_t* pDest) = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
40
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
41 MP4Track* FindTrackFromRefIndex(u_int8_t refIndex);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
42
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
43 virtual void WriteEmbeddedData(MP4File* pFile, u_int64_t startPos) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
44 // default is no-op
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
45 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
46
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
47 protected:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
48 MP4RtpPacket* m_pPacket;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
49 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
50
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
51 MP4ARRAY_DECL(MP4RtpData, MP4RtpData*)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
52
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
53 class MP4RtpNullData : public MP4RtpData {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
54 public:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
55 MP4RtpNullData(MP4RtpPacket* pPacket);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
56
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
57 u_int16_t GetDataSize() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
58 return 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
59 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
60
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
61 void GetData(u_int8_t* pDest) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
62 // no-op
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
63 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
64 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
65
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
66 class MP4RtpImmediateData : public MP4RtpData {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
67 public:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
68 MP4RtpImmediateData(MP4RtpPacket* pPacket);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
69
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
70 void Set(const u_int8_t* pBytes, u_int8_t numBytes);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
71
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
72 u_int16_t GetDataSize();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
73
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
74 void GetData(u_int8_t* pDest);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
75 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
76
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
77 class MP4RtpSampleData : public MP4RtpData {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
78 public:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
79 MP4RtpSampleData(MP4RtpPacket* pPacket);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
80
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
81 ~MP4RtpSampleData(void) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
82 CHECK_AND_FREE(m_pRefData);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
83 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
84
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
85 void SetEmbeddedImmediate(
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
86 MP4SampleId sampleId,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
87 u_int8_t* pData, u_int16_t dataLength);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
88
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
89 void SetReferenceSample(
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
90 MP4SampleId refSampleId, u_int32_t refSampleOffset,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
91 u_int16_t sampleLength);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
92
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
93 void SetEmbeddedSample(
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
94 MP4SampleId sampleId, MP4Track* pRefTrack,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
95 MP4SampleId refSampleId, u_int32_t refSampleOffset,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
96 u_int16_t sampleLength);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
97
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
98 u_int16_t GetDataSize();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
99
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
100 void GetData(u_int8_t* pDest);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
101
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
102 void WriteEmbeddedData(MP4File* pFile, u_int64_t startPos);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
103
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
104 protected:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
105 u_int8_t* m_pRefData;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
106
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
107 MP4Track* m_pRefTrack;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
108 MP4SampleId m_refSampleId;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
109 u_int32_t m_refSampleOffset;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
110 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
111
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
112 class MP4RtpSampleDescriptionData : public MP4RtpData {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
113 public:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
114 MP4RtpSampleDescriptionData(MP4RtpPacket* pPacket);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
115
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
116 void Set(u_int32_t sampleDescrIndex,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
117 u_int32_t offset, u_int16_t length);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
118
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
119 u_int16_t GetDataSize();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
120
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
121 void GetData(u_int8_t* pDest);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
122 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
123
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
124 class MP4RtpPacket : public MP4Container {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
125 public:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
126 MP4RtpPacket(MP4RtpHint* pHint);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
127
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
128 ~MP4RtpPacket();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
129
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
130 void AddExtraProperties();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
131
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
132 MP4RtpHint* GetHint() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
133 return m_pHint;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
134 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
135
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
136 void Set(u_int8_t payloadNumber, u_int32_t packetId, bool setMbit);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
137
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
138 int32_t GetTransmitOffset();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
139
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
140 bool GetPBit();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
141
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
142 bool GetXBit();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
143
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
144 bool GetMBit();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
145
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
146 u_int8_t GetPayload();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
147
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
148 u_int16_t GetSequenceNumber();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
149
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
150 void SetTransmitOffset(int32_t transmitOffset);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
151
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
152 bool IsBFrame();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
153
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
154 void SetBFrame(bool isBFrame);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
155
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
156 void SetTimestampOffset(u_int32_t timestampOffset);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
157
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
158 void AddData(MP4RtpData* pData);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
159
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
160 u_int32_t GetDataSize();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
161
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
162 void GetData(u_int8_t* pDest);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
163
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
164 void Read(MP4File* pFile);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
165
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
166 void ReadExtra(MP4File* pFile);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
167
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
168 void Write(MP4File* pFile);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
169
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
170 void WriteEmbeddedData(MP4File* pFile, u_int64_t startPos);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
171
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
172 void Dump(FILE* pFile, u_int8_t indent, bool dumpImplicits);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
173
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
174 protected:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
175 MP4RtpHint* m_pHint;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
176 MP4RtpDataArray m_rtpData;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
177 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
178
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
179 MP4ARRAY_DECL(MP4RtpPacket, MP4RtpPacket*)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
180
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
181 class MP4RtpHint : public MP4Container {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
182 public:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
183 MP4RtpHint(MP4RtpHintTrack* pTrack);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
184
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
185 ~MP4RtpHint();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
186
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
187 MP4RtpHintTrack* GetTrack() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
188 return m_pTrack;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
189 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
190
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
191 u_int16_t GetNumberOfPackets() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
192 return m_rtpPackets.Size();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
193 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
194
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
195 bool IsBFrame() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
196 return m_isBFrame;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
197 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
198 void SetBFrame(bool isBFrame) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
199 m_isBFrame = isBFrame;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
200 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
201
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
202 u_int32_t GetTimestampOffset() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
203 return m_timestampOffset;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
204 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
205 void SetTimestampOffset(u_int32_t timestampOffset) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
206 m_timestampOffset = timestampOffset;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
207 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
208
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
209 MP4RtpPacket* AddPacket();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
210
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
211 MP4RtpPacket* GetPacket(u_int16_t index) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
212 return m_rtpPackets[index];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
213 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
214
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
215 MP4RtpPacket* GetCurrentPacket() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
216 if (m_rtpPackets.Size() == 0) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
217 return NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
218 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
219 return m_rtpPackets[m_rtpPackets.Size() - 1];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
220 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
221
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
222 void Read(MP4File* pFile);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
223
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
224 void Write(MP4File* pFile);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
225
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
226 void Dump(FILE* pFile, u_int8_t indent, bool dumpImplicits);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
227
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
228 protected:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
229 MP4RtpHintTrack* m_pTrack;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
230 MP4RtpPacketArray m_rtpPackets;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
231
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
232 // values when adding packets to a hint (write mode)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
233 bool m_isBFrame;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
234 u_int32_t m_timestampOffset;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
235 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
236
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
237 class MP4RtpHintTrack : public MP4Track {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
238 public:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
239 MP4RtpHintTrack(MP4File* pFile, MP4Atom* pTrakAtom);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
240
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
241 ~MP4RtpHintTrack();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
242
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
243 void InitRefTrack();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
244
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
245 void InitPayload();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
246
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
247 void InitRtpStart();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
248
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
249 void InitStats();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
250
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
251 MP4Track* GetRefTrack() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
252 InitRefTrack();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
253 return m_pRefTrack;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
254 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
255
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
256 void GetPayload(
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
257 char** ppPayloadName = NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
258 u_int8_t* pPayloadNumber = NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
259 u_int16_t* pMaxPayloadSize = NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
260 char **ppEncodingParams = NULL);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
261
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
262 void SetPayload(
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
263 const char* payloadName,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
264 u_int8_t payloadNumber,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
265 u_int16_t maxPayloadSize,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
266 const char *encoding_parms,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
267 bool add_rtpmap,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
268 bool add_mpeg4_esid);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
269
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
270 void ReadHint(
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
271 MP4SampleId hintSampleId,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
272 u_int16_t* pNumPackets = NULL);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
273
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
274 u_int16_t GetHintNumberOfPackets();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
275
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
276 bool GetPacketBFrame(u_int16_t packetIndex);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
277
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
278 u_int16_t GetPacketTransmitOffset(u_int16_t packetIndex);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
279
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
280 void ReadPacket(
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
281 u_int16_t packetIndex,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
282 u_int8_t** ppBytes,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
283 u_int32_t* pNumBytes,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
284 u_int32_t ssrc,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
285 bool includeHeader = true,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
286 bool includePayload = true);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
287
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
288 MP4Timestamp GetRtpTimestampStart();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
289
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
290 void SetRtpTimestampStart(MP4Timestamp start);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
291
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
292 void AddHint(bool isBFrame, u_int32_t timestampOffset);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
293
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
294 void AddPacket(bool setMbit, int32_t transmitOffset = 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
295
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
296 void AddImmediateData(const u_int8_t* pBytes, u_int32_t numBytes);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
297
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
298 void AddSampleData(MP4SampleId sampleId,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
299 u_int32_t dataOffset, u_int32_t dataLength);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
300
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
301 void AddESConfigurationPacket();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
302
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
303 void WriteHint(MP4Duration duration, bool isSyncSample);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
304
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
305 void FinishWrite();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
306
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
307 protected:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
308 MP4Track* m_pRefTrack;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
309
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
310 MP4StringProperty* m_pRtpMapProperty;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
311 MP4Integer32Property* m_pPayloadNumberProperty;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
312 MP4Integer32Property* m_pMaxPacketSizeProperty;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
313 MP4Integer32Property* m_pSnroProperty;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
314 MP4Integer32Property* m_pTsroProperty;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
315 u_int32_t m_rtpSequenceStart;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
316 u_int32_t m_rtpTimestampStart;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
317
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
318 // reading
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
319 MP4RtpHint* m_pReadHint;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
320 u_int8_t* m_pReadHintSample;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
321 u_int32_t m_readHintSampleSize;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
322 MP4Timestamp m_readHintTimestamp;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
323
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
324 // writing
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
325 MP4RtpHint* m_pWriteHint;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
326 MP4SampleId m_writeHintId;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
327 u_int32_t m_writePacketId;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
328
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
329 // statistics
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
330 // in trak.udta.hinf
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
331 MP4Integer64Property* m_pTrpy;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
332 MP4Integer64Property* m_pNump;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
333 MP4Integer64Property* m_pTpyl;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
334 MP4Integer32Property* m_pMaxr;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
335 MP4Integer64Property* m_pDmed;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
336 MP4Integer64Property* m_pDimm;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
337 MP4Integer32Property* m_pPmax;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
338 MP4Integer32Property* m_pDmax;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
339
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
340 // in trak.mdia.minf.hmhd
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
341 MP4Integer16Property* m_pMaxPdu;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
342 MP4Integer16Property* m_pAvgPdu;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
343 MP4Integer32Property* m_pMaxBitRate;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
344 MP4Integer32Property* m_pAvgBitRate;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
345
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
346 MP4Timestamp m_thisSec;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
347 u_int32_t m_bytesThisSec;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
348 u_int32_t m_bytesThisHint;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
349 u_int32_t m_bytesThisPacket;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
350 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
351
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
352 #endif /* __RTPHINT_INCLUDED__ */