diff --git a/docs/annotated.html b/docs/annotated.html index 86fb2d1c61..20f25096d5 100644 --- a/docs/annotated.html +++ b/docs/annotated.html @@ -329,7 +329,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/classes.html b/docs/classes.html index 8a36b4e96a..214d1e1c81 100644 --- a/docs/classes.html +++ b/docs/classes.html @@ -170,7 +170,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/d0/d03/classedash__packager_1_1media_1_1webm_1_1SingleSegmentSegmenter.html b/docs/d0/d03/classedash__packager_1_1media_1_1webm_1_1SingleSegmentSegmenter.html index bf55fbcd54..291893d369 100644 --- a/docs/d0/d03/classedash__packager_1_1media_1_1webm_1_1SingleSegmentSegmenter.html +++ b/docs/d0/d03/classedash__packager_1_1media_1_1webm_1_1SingleSegmentSegmenter.html @@ -290,7 +290,7 @@ double cluster_length_sec< diff --git a/docs/d0/d06/mpd__flags_8cc_source.html b/docs/d0/d06/mpd__flags_8cc_source.html index a9b741ab04..4e33d82cf5 100644 --- a/docs/d0/d06/mpd__flags_8cc_source.html +++ b/docs/d0/d06/mpd__flags_8cc_source.html @@ -148,7 +148,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d08/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord-members.html b/docs/d0/d08/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord-members.html index 657f7a2573..8f879ba5e1 100644 --- a/docs/d0/d08/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord-members.html +++ b/docs/d0/d08/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d0e/muxer__options_8h_source.html b/docs/d0/d0e/muxer__options_8h_source.html index b603f4eea3..4756d538d4 100644 --- a/docs/d0/d0e/muxer__options_8h_source.html +++ b/docs/d0/d0e/muxer__options_8h_source.html @@ -146,7 +146,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d0e/structedash__packager_1_1media_1_1StreamDescriptor-members.html b/docs/d0/d0e/structedash__packager_1_1media_1_1StreamDescriptor-members.html index 7092f3a02a..d3c0d57372 100644 --- a/docs/d0/d0e/structedash__packager_1_1media_1_1StreamDescriptor-members.html +++ b/docs/d0/d0e/structedash__packager_1_1media_1_1StreamDescriptor-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d1a/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset-members.html b/docs/d0/d1a/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset-members.html index 71eea5362c..54e362e0c6 100644 --- a/docs/d0/d1a/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset-members.html +++ b/docs/d0/d1a/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d24/structedash__packager_1_1media_1_1H264DecRefPicMarking-members.html b/docs/d0/d24/structedash__packager_1_1media_1_1H264DecRefPicMarking-members.html index 20dec4d9d4..02d3cd4828 100644 --- a/docs/d0/d24/structedash__packager_1_1media_1_1H264DecRefPicMarking-members.html +++ b/docs/d0/d24/structedash__packager_1_1media_1_1H264DecRefPicMarking-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d28/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html b/docs/d0/d28/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html index 6e18bced85..587644452e 100644 --- a/docs/d0/d28/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html +++ b/docs/d0/d28/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d30/mock__mpd__notifier_8h_source.html b/docs/d0/d30/mock__mpd__notifier_8h_source.html index 1b3feb5aab..522da3cafc 100644 --- a/docs/d0/d30/mock__mpd__notifier_8h_source.html +++ b/docs/d0/d30/mock__mpd__notifier_8h_source.html @@ -148,7 +148,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d32/mp2t__common_8h_source.html b/docs/d0/d32/mp2t__common_8h_source.html index 39db14cd42..8291044adc 100644 --- a/docs/d0/d32/mp2t__common_8h_source.html +++ b/docs/d0/d32/mp2t__common_8h_source.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d35/es__descriptor_8cc_source.html b/docs/d0/d35/es__descriptor_8cc_source.html index 028c5feffe..2a37a2febf 100644 --- a/docs/d0/d35/es__descriptor_8cc_source.html +++ b/docs/d0/d35/es__descriptor_8cc_source.html @@ -147,142 +147,146 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
58 // multi-bytes size for now).
59 const size_t kHeaderSize = 2;
60 const size_t kMaxDecoderSpecificInfoSize = 64;
-
61 
-
62 } // namespace
-
63 
-
64 namespace mp4 {
-
65 
-
66 ESDescriptor::ESDescriptor() : esid_(0), object_type_(kForbidden) {}
-
67 
-
68 ESDescriptor::~ESDescriptor() {}
-
69 
-
70 bool ESDescriptor::Parse(const std::vector<uint8_t>& data) {
-
71  BitReader reader(&data[0], data.size());
-
72  uint8_t tag;
-
73  uint32_t size;
-
74  uint8_t stream_dependency_flag;
-
75  uint8_t url_flag;
-
76  uint8_t ocr_stream_flag;
-
77  uint16_t dummy;
-
78 
-
79  RCHECK(reader.ReadBits(8, &tag));
-
80  RCHECK(tag == kESDescrTag);
-
81  RCHECK(ReadESSize(&reader, &size));
-
82 
-
83  RCHECK(reader.ReadBits(16, &esid_)); // ES_ID
-
84  RCHECK(reader.ReadBits(1, &stream_dependency_flag));
-
85  RCHECK(reader.ReadBits(1, &url_flag));
-
86  RCHECK(!url_flag); // We don't support url flag
-
87  RCHECK(reader.ReadBits(1, &ocr_stream_flag));
-
88  RCHECK(reader.ReadBits(5, &dummy)); // streamPriority
-
89 
-
90  if (stream_dependency_flag)
-
91  RCHECK(reader.ReadBits(16, &dummy)); // dependsOn_ES_ID
-
92  if (ocr_stream_flag)
-
93  RCHECK(reader.ReadBits(16, &dummy)); // OCR_ES_Id
+
61 const uint32_t kUnknownBitrate = 0;
+
62 
+
63 } // namespace
+
64 
+
65 namespace mp4 {
+
66 
+
67 ESDescriptor::ESDescriptor()
+
68  : esid_(0),
+
69  object_type_(kForbidden),
+
70  max_bitrate_(kUnknownBitrate),
+
71  avg_bitrate_(kUnknownBitrate) {}
+
72 
+
73 ESDescriptor::~ESDescriptor() {}
+
74 
+
75 bool ESDescriptor::Parse(const std::vector<uint8_t>& data) {
+
76  BitReader reader(&data[0], data.size());
+
77  uint8_t tag;
+
78  uint32_t size;
+
79  uint8_t stream_dependency_flag;
+
80  uint8_t url_flag;
+
81  uint8_t ocr_stream_flag;
+
82  uint16_t dummy;
+
83 
+
84  RCHECK(reader.ReadBits(8, &tag));
+
85  RCHECK(tag == kESDescrTag);
+
86  RCHECK(ReadESSize(&reader, &size));
+
87 
+
88  RCHECK(reader.ReadBits(16, &esid_)); // ES_ID
+
89  RCHECK(reader.ReadBits(1, &stream_dependency_flag));
+
90  RCHECK(reader.ReadBits(1, &url_flag));
+
91  RCHECK(!url_flag); // We don't support url flag
+
92  RCHECK(reader.ReadBits(1, &ocr_stream_flag));
+
93  RCHECK(reader.ReadBits(5, &dummy)); // streamPriority
94 
-
95  RCHECK(ParseDecoderConfigDescriptor(&reader));
-
96 
-
97  return true;
-
98 }
+
95  if (stream_dependency_flag)
+
96  RCHECK(reader.ReadBits(16, &dummy)); // dependsOn_ES_ID
+
97  if (ocr_stream_flag)
+
98  RCHECK(reader.ReadBits(16, &dummy)); // OCR_ES_Id
99 
-
100 bool ESDescriptor::ParseDecoderConfigDescriptor(BitReader* reader) {
-
101  uint8_t tag;
-
102  uint32_t size;
-
103  uint64_t dummy;
+
100  RCHECK(ParseDecoderConfigDescriptor(&reader));
+
101 
+
102  return true;
+
103 }
104 
-
105  RCHECK(reader->ReadBits(8, &tag));
-
106  RCHECK(tag == kDecoderConfigDescrTag);
-
107  RCHECK(ReadESSize(reader, &size));
-
108 
-
109  RCHECK(reader->ReadBits(8, &object_type_));
-
110  RCHECK(reader->ReadBits(64, &dummy));
-
111  RCHECK(reader->ReadBits(32, &dummy));
-
112  RCHECK(ParseDecoderSpecificInfo(reader));
+
105 bool ESDescriptor::ParseDecoderConfigDescriptor(BitReader* reader) {
+
106  uint8_t tag;
+
107  uint32_t size;
+
108  uint32_t dummy;
+
109 
+
110  RCHECK(reader->ReadBits(8, &tag));
+
111  RCHECK(tag == kDecoderConfigDescrTag);
+
112  RCHECK(ReadESSize(reader, &size));
113 
-
114  return true;
-
115 }
-
116 
-
117 bool ESDescriptor::ParseDecoderSpecificInfo(BitReader* reader) {
-
118  DCHECK(reader);
-
119  uint8_t tag;
-
120  uint32_t size;
-
121 
-
122  RCHECK(reader->ReadBits(8, &tag));
-
123  RCHECK(tag == kDecoderSpecificInfoTag);
-
124  RCHECK(ReadESSize(reader, &size));
-
125 
-
126  decoder_specific_info_.resize(size);
-
127  for (uint32_t i = 0; i < size; ++i)
-
128  RCHECK(reader->ReadBits(8, &decoder_specific_info_[i]));
-
129 
-
130  return true;
-
131 }
-
132 
-
133 void ESDescriptor::Write(BufferWriter* writer) const {
-
134  DCHECK(writer);
-
135  CHECK_LT(decoder_specific_info_.size(), kMaxDecoderSpecificInfoSize);
-
136 
-
137  const std::vector<uint8_t> kEmptyDecodingBufferSize(3, 0);
-
138  const uint32_t kUnknownBitrate = 0;
-
139  const uint8_t kNoEsFlags = 0;
-
140 
-
141  const uint8_t decoder_specific_info_size = decoder_specific_info_.size();
-
142 
-
143  // 6 bit stream type. The last bit is reserved with 1.
-
144  const uint8_t stream_type = (kAudioStreamType << 2) | 1;
-
145  const uint8_t decoder_config_size = decoder_specific_info_size + kHeaderSize +
-
146  sizeof(uint8_t) + // object_type_.
-
147  sizeof(stream_type) +
-
148  kEmptyDecodingBufferSize.size() +
-
149  sizeof(kUnknownBitrate) * 2;
-
150 
-
151  const uint8_t sl_config_size = sizeof(uint8_t); // predefined.
-
152  const uint8_t es_size = decoder_config_size + kHeaderSize + sl_config_size +
-
153  kHeaderSize + sizeof(esid_) + sizeof(kNoEsFlags);
+
114  RCHECK(reader->ReadBits(8, &object_type_));
+
115  RCHECK(reader->ReadBits(32, &dummy));
+
116  RCHECK(reader->ReadBits(32, &max_bitrate_));
+
117  RCHECK(reader->ReadBits(32, &avg_bitrate_));
+
118  RCHECK(ParseDecoderSpecificInfo(reader));
+
119 
+
120  return true;
+
121 }
+
122 
+
123 bool ESDescriptor::ParseDecoderSpecificInfo(BitReader* reader) {
+
124  DCHECK(reader);
+
125  uint8_t tag;
+
126  uint32_t size;
+
127 
+
128  RCHECK(reader->ReadBits(8, &tag));
+
129  RCHECK(tag == kDecoderSpecificInfoTag);
+
130  RCHECK(ReadESSize(reader, &size));
+
131 
+
132  decoder_specific_info_.resize(size);
+
133  for (uint32_t i = 0; i < size; ++i)
+
134  RCHECK(reader->ReadBits(8, &decoder_specific_info_[i]));
+
135  return true;
+
136 }
+
137 
+
138 void ESDescriptor::Write(BufferWriter* writer) const {
+
139  DCHECK(writer);
+
140  CHECK_LT(decoder_specific_info_.size(), kMaxDecoderSpecificInfoSize);
+
141 
+
142  const std::vector<uint8_t> kEmptyDecodingBufferSize(3, 0);
+
143  const uint8_t kNoEsFlags = 0;
+
144 
+
145  const uint8_t decoder_specific_info_size = decoder_specific_info_.size();
+
146 
+
147  // 6 bit stream type. The last bit is reserved with 1.
+
148  const uint8_t stream_type = (kAudioStreamType << 2) | 1;
+
149  const uint8_t decoder_config_size = decoder_specific_info_size + kHeaderSize +
+
150  sizeof(uint8_t) + // object_type_.
+
151  sizeof(stream_type) +
+
152  kEmptyDecodingBufferSize.size() +
+
153  sizeof(kUnknownBitrate) * 2;
154 
-
155  writer->AppendInt(static_cast<uint8_t>(kESDescrTag));
-
156  writer->AppendInt(es_size);
-
157  writer->AppendInt(esid_);
-
158  writer->AppendInt(kNoEsFlags);
-
159 
-
160  writer->AppendInt(static_cast<uint8_t>(kDecoderConfigDescrTag));
-
161  writer->AppendInt(decoder_config_size);
-
162  writer->AppendInt(static_cast<uint8_t>(object_type_));
-
163  writer->AppendInt(stream_type);
-
164  writer->AppendVector(kEmptyDecodingBufferSize);
-
165  writer->AppendInt(kUnknownBitrate); // max_bitrate.
-
166  writer->AppendInt(kUnknownBitrate); // avg_bitrate.
-
167 
-
168  writer->AppendInt(static_cast<uint8_t>(kDecoderSpecificInfoTag));
-
169  writer->AppendInt(decoder_specific_info_size);
-
170  writer->AppendVector(decoder_specific_info_);
+
155  const uint8_t sl_config_size = sizeof(uint8_t); // predefined.
+
156  const uint8_t es_size = decoder_config_size + kHeaderSize + sl_config_size +
+
157  kHeaderSize + sizeof(esid_) + sizeof(kNoEsFlags);
+
158 
+
159  writer->AppendInt(static_cast<uint8_t>(kESDescrTag));
+
160  writer->AppendInt(es_size);
+
161  writer->AppendInt(esid_);
+
162  writer->AppendInt(kNoEsFlags);
+
163 
+
164  writer->AppendInt(static_cast<uint8_t>(kDecoderConfigDescrTag));
+
165  writer->AppendInt(decoder_config_size);
+
166  writer->AppendInt(static_cast<uint8_t>(object_type_));
+
167  writer->AppendInt(stream_type);
+
168  writer->AppendVector(kEmptyDecodingBufferSize);
+
169  writer->AppendInt(max_bitrate_);
+
170  writer->AppendInt(avg_bitrate_);
171 
-
172  writer->AppendInt(static_cast<uint8_t>(kSLConfigTag));
-
173  writer->AppendInt(sl_config_size);
-
174  writer->AppendInt(static_cast<uint8_t>(kSLPredefinedMP4));
-
175 }
-
176 
-
177 size_t ESDescriptor::ComputeSize() const {
-
178  // A bit magical. Refer to ESDescriptor::Write for details.
-
179  const uint8_t decoder_specific_info_size = decoder_specific_info_.size();
-
180  const uint8_t decoder_config_size = decoder_specific_info_size + kHeaderSize +
-
181  sizeof(uint8_t) * 5 +
-
182  sizeof(uint32_t) * 2;
-
183  const uint8_t sl_config_size = sizeof(uint8_t);
-
184  const uint8_t es_size = decoder_config_size + kHeaderSize + sl_config_size +
-
185  kHeaderSize + sizeof(esid_) + sizeof(uint8_t);
-
186  return es_size + kHeaderSize;
-
187 }
-
188 
-
189 } // namespace mp4
-
190 
-
191 } // namespace media
-
192 } // namespace edash_packager
+
172  writer->AppendInt(static_cast<uint8_t>(kDecoderSpecificInfoTag));
+
173  writer->AppendInt(decoder_specific_info_size);
+
174  writer->AppendVector(decoder_specific_info_);
+
175 
+
176  writer->AppendInt(static_cast<uint8_t>(kSLConfigTag));
+
177  writer->AppendInt(sl_config_size);
+
178  writer->AppendInt(static_cast<uint8_t>(kSLPredefinedMP4));
+
179 }
+
180 
+
181 size_t ESDescriptor::ComputeSize() const {
+
182  // A bit magical. Refer to ESDescriptor::Write for details.
+
183  const uint8_t decoder_specific_info_size = decoder_specific_info_.size();
+
184  const uint8_t decoder_config_size = decoder_specific_info_size + kHeaderSize +
+
185  sizeof(uint8_t) * 5 +
+
186  sizeof(uint32_t) * 2;
+
187  const uint8_t sl_config_size = sizeof(uint8_t);
+
188  const uint8_t es_size = decoder_config_size + kHeaderSize + sl_config_size +
+
189  kHeaderSize + sizeof(esid_) + sizeof(uint8_t);
+
190  return es_size + kHeaderSize;
+
191 }
+
192 
+
193 } // namespace mp4
+
194 
+
195 } // namespace media
+
196 } // namespace edash_packager
diff --git a/docs/d0/d3a/classedash__packager_1_1media_1_1SeekHead-members.html b/docs/d0/d3a/classedash__packager_1_1media_1_1SeekHead-members.html index f8cfd93587..a993657528 100644 --- a/docs/d0/d3a/classedash__packager_1_1media_1_1SeekHead-members.html +++ b/docs/d0/d3a/classedash__packager_1_1media_1_1SeekHead-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d3a/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode-members.html b/docs/d0/d3a/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode-members.html index 124648a074..8910d486c9 100644 --- a/docs/d0/d3a/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode-members.html +++ b/docs/d0/d3a/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d3a/webm__constants_8h_source.html b/docs/d0/d3a/webm__constants_8h_source.html index 20cd8c3cb6..112ce5bafc 100644 --- a/docs/d0/d3a/webm__constants_8h_source.html +++ b/docs/d0/d3a/webm__constants_8h_source.html @@ -313,7 +313,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d42/widevine__encryption__flags_8cc_source.html b/docs/d0/d42/widevine__encryption__flags_8cc_source.html index 3a3048a59e..1060a28ef9 100644 --- a/docs/d0/d42/widevine__encryption__flags_8cc_source.html +++ b/docs/d0/d42/widevine__encryption__flags_8cc_source.html @@ -243,7 +243,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d43/structedash__packager_1_1media_1_1H264SPS-members.html b/docs/d0/d43/structedash__packager_1_1media_1_1H264SPS-members.html index a65dc26346..add28a3270 100644 --- a/docs/d0/d43/structedash__packager_1_1media_1_1H264SPS-members.html +++ b/docs/d0/d43/structedash__packager_1_1media_1_1H264SPS-members.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d46/fourccs_8h_source.html b/docs/d0/d46/fourccs_8h_source.html index 4af19f4376..d60d435aee 100644 --- a/docs/d0/d46/fourccs_8h_source.html +++ b/docs/d0/d46/fourccs_8h_source.html @@ -232,7 +232,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d49/vod__media__info__dump__muxer__listener_8cc_source.html b/docs/d0/d49/vod__media__info__dump__muxer__listener_8cc_source.html index 01e0ae898b..66af511abc 100644 --- a/docs/d0/d49/vod__media__info__dump__muxer__listener_8cc_source.html +++ b/docs/d0/d49/vod__media__info__dump__muxer__listener_8cc_source.html @@ -234,7 +234,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d4a/structedash__packager_1_1media_1_1mp4_1_1SampleSize-members.html b/docs/d0/d4a/structedash__packager_1_1media_1_1mp4_1_1SampleSize-members.html index cd1f440438..c25e72c443 100644 --- a/docs/d0/d4a/structedash__packager_1_1media_1_1mp4_1_1SampleSize-members.html +++ b/docs/d0/d4a/structedash__packager_1_1media_1_1mp4_1_1SampleSize-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d4c/structedash__packager_1_1media_1_1mp4_1_1CueTimeBox-members.html b/docs/d0/d4c/structedash__packager_1_1media_1_1mp4_1_1CueTimeBox-members.html index e677f62e15..6c05e0e7f1 100644 --- a/docs/d0/d4c/structedash__packager_1_1media_1_1mp4_1_1CueTimeBox-members.html +++ b/docs/d0/d4c/structedash__packager_1_1media_1_1mp4_1_1CueTimeBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d4e/libcrypto__threading_8cc_source.html b/docs/d0/d4e/libcrypto__threading_8cc_source.html index b25ff8662b..90590ab501 100644 --- a/docs/d0/d4e/libcrypto__threading_8cc_source.html +++ b/docs/d0/d4e/libcrypto__threading_8cc_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d5b/structedash__packager_1_1media_1_1mp4_1_1VTTAdditionalTextBox-members.html b/docs/d0/d5b/structedash__packager_1_1media_1_1mp4_1_1VTTAdditionalTextBox-members.html index cafdc1e61e..1bfc5a4aab 100644 --- a/docs/d0/d5b/structedash__packager_1_1media_1_1mp4_1_1VTTAdditionalTextBox-members.html +++ b/docs/d0/d5b/structedash__packager_1_1media_1_1mp4_1_1VTTAdditionalTextBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d7d/classedash__packager_1_1media_1_1H264Parser-members.html b/docs/d0/d7d/classedash__packager_1_1media_1_1H264Parser-members.html index 580f3a83ec..54eca157ec 100644 --- a/docs/d0/d7d/classedash__packager_1_1media_1_1H264Parser-members.html +++ b/docs/d0/d7d/classedash__packager_1_1media_1_1H264Parser-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d7d/decryptor__source_8h_source.html b/docs/d0/d7d/decryptor__source_8h_source.html index 017e7dc16f..30bb29e13c 100644 --- a/docs/d0/d7d/decryptor__source_8h_source.html +++ b/docs/d0/d7d/decryptor__source_8h_source.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d86/structedash__packager_1_1media_1_1EncryptionKey.html b/docs/d0/d86/structedash__packager_1_1media_1_1EncryptionKey.html index 7bbc5e967d..00b4bccac4 100644 --- a/docs/d0/d86/structedash__packager_1_1media_1_1EncryptionKey.html +++ b/docs/d0/d86/structedash__packager_1_1media_1_1EncryptionKey.html @@ -119,7 +119,7 @@ std::vector< uint8_t >  diff --git a/docs/d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html b/docs/d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html index c941e6909a..c0c7aad3f6 100644 --- a/docs/d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html +++ b/docs/d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html @@ -145,7 +145,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 523 of file box_definitions.h.

+

Definition at line 527 of file box_definitions.h.

Member Function Documentation

@@ -171,7 +171,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 1704 of file box_definitions.cc.

+

Definition at line 1732 of file box_definitions.cc.

@@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d0/d93/structedash__packager_1_1media_1_1mp4_1_1SampleTable-members.html b/docs/d0/d93/structedash__packager_1_1media_1_1mp4_1_1SampleTable-members.html index 642ced8933..7135e1473d 100644 --- a/docs/d0/d93/structedash__packager_1_1media_1_1mp4_1_1SampleTable-members.html +++ b/docs/d0/d93/structedash__packager_1_1media_1_1mp4_1_1SampleTable-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d96/structedash__packager_1_1ContentProtectionElement.html b/docs/d0/d96/structedash__packager_1_1ContentProtectionElement.html index 11bcd93ad9..c2677c7d63 100644 --- a/docs/d0/d96/structedash__packager_1_1ContentProtectionElement.html +++ b/docs/d0/d96/structedash__packager_1_1ContentProtectionElement.html @@ -123,7 +123,7 @@ std::vector< diff --git a/docs/d0/d96/structedash__packager_1_1media_1_1mp4_1_1WebVTTSourceLabelBox-members.html b/docs/d0/d96/structedash__packager_1_1media_1_1mp4_1_1WebVTTSourceLabelBox-members.html index 3b6ae91f1c..69e52d61de 100644 --- a/docs/d0/d96/structedash__packager_1_1media_1_1mp4_1_1WebVTTSourceLabelBox-members.html +++ b/docs/d0/d96/structedash__packager_1_1media_1_1mp4_1_1WebVTTSourceLabelBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/da4/classedash__packager_1_1media_1_1WebMVideoClient-members.html b/docs/d0/da4/classedash__packager_1_1media_1_1WebMVideoClient-members.html index 3a06ed17c4..3e284f0c8c 100644 --- a/docs/d0/da4/classedash__packager_1_1media_1_1WebMVideoClient-members.html +++ b/docs/d0/da4/classedash__packager_1_1media_1_1WebMVideoClient-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/da6/stream__descriptor_8cc_source.html b/docs/d0/da6/stream__descriptor_8cc_source.html index 0ab22bf712..a22fef445b 100644 --- a/docs/d0/da6/stream__descriptor_8cc_source.html +++ b/docs/d0/da6/stream__descriptor_8cc_source.html @@ -243,7 +243,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/da9/classedash__packager_1_1MockRepresentation.html b/docs/d0/da9/classedash__packager_1_1MockRepresentation.html index c5e0e7cad7..dd5851de9b 100644 --- a/docs/d0/da9/classedash__packager_1_1MockRepresentation.html +++ b/docs/d0/da9/classedash__packager_1_1MockRepresentation.html @@ -146,7 +146,7 @@ Public Member Functions diff --git a/docs/d0/da9/classedash__packager_1_1media_1_1webm_1_1WebMMuxer-members.html b/docs/d0/da9/classedash__packager_1_1media_1_1webm_1_1WebMMuxer-members.html index 4902f4fd99..b64abc17ca 100644 --- a/docs/d0/da9/classedash__packager_1_1media_1_1webm_1_1WebMMuxer-members.html +++ b/docs/d0/da9/classedash__packager_1_1media_1_1webm_1_1WebMMuxer-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dae/classedash__packager_1_1media_1_1BufferWriter-members.html b/docs/d0/dae/classedash__packager_1_1media_1_1BufferWriter-members.html index f5f18769cc..a5cd12e7d2 100644 --- a/docs/d0/dae/classedash__packager_1_1media_1_1BufferWriter-members.html +++ b/docs/d0/dae/classedash__packager_1_1media_1_1BufferWriter-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/db7/structedash__packager_1_1media_1_1mp4_1_1DTSSpecific.html b/docs/d0/db7/structedash__packager_1_1media_1_1mp4_1_1DTSSpecific.html index 7796a6cfbf..c0c37bc40f 100644 --- a/docs/d0/db7/structedash__packager_1_1media_1_1mp4_1_1DTSSpecific.html +++ b/docs/d0/db7/structedash__packager_1_1media_1_1mp4_1_1DTSSpecific.html @@ -124,9 +124,21 @@ Public Member Functions - - + + + + + + + + + +

Public Attributes

-std::vector< uint8_t > data
 
+uint32_t sampling_frequency
 
+uint32_t max_bitrate
 
+uint32_t avg_bitrate
 
+uint8_t pcm_sample_depth
 
+std::vector< uint8_t > extra_data
 
@@ -162,7 +174,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 1195 of file box_definitions.cc.

+

Definition at line 1215 of file box_definitions.cc.

@@ -173,7 +185,7 @@ Additional Inherited Members diff --git a/docs/d0/dd1/classedash__packager_1_1SimpleMpdNotifier-members.html b/docs/d0/dd1/classedash__packager_1_1SimpleMpdNotifier-members.html index 72020cc60c..f2d5a22620 100644 --- a/docs/d0/dd1/classedash__packager_1_1SimpleMpdNotifier-members.html +++ b/docs/d0/dd1/classedash__packager_1_1SimpleMpdNotifier-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');

Additional Inherited Members

diff --git a/docs/d0/dd4/structedash__packager_1_1media_1_1SubsampleEntry-members.html b/docs/d0/dd4/structedash__packager_1_1media_1_1SubsampleEntry-members.html index 53f9769e3f..8a33b0d545 100644 --- a/docs/d0/dd4/structedash__packager_1_1media_1_1SubsampleEntry-members.html +++ b/docs/d0/dd4/structedash__packager_1_1media_1_1SubsampleEntry-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dd6/webm__crypto__helpers_8cc_source.html b/docs/d0/dd6/webm__crypto__helpers_8cc_source.html index 44342ed235..3b20c823ac 100644 --- a/docs/d0/dd6/webm__crypto__helpers_8cc_source.html +++ b/docs/d0/dd6/webm__crypto__helpers_8cc_source.html @@ -157,7 +157,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/ddc/structedash__packager_1_1media_1_1FileCloser.html b/docs/d0/ddc/structedash__packager_1_1media_1_1FileCloser.html index 59e6e06377..dfffa535de 100644 --- a/docs/d0/ddc/structedash__packager_1_1media_1_1FileCloser.html +++ b/docs/d0/ddc/structedash__packager_1_1media_1_1FileCloser.html @@ -112,7 +112,7 @@ void operator() ( diff --git a/docs/d0/de0/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry-members.html b/docs/d0/de0/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry-members.html index 2482f415ee..209652ff2d 100644 --- a/docs/d0/de0/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry-members.html +++ b/docs/d0/de0/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/de4/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html b/docs/d0/de4/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html index 8f248325dc..4e51cde465 100644 --- a/docs/d0/de4/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html +++ b/docs/d0/de4/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/de6/classedash__packager_1_1media_1_1TracksBuilder.html b/docs/d0/de6/classedash__packager_1_1media_1_1TracksBuilder.html index 353bdf4e38..85bb230284 100644 --- a/docs/d0/de6/classedash__packager_1_1media_1_1TracksBuilder.html +++ b/docs/d0/de6/classedash__packager_1_1media_1_1TracksBuilder.html @@ -123,7 +123,7 @@ std::vector< uint8_t >  diff --git a/docs/d0/de8/structedash__packager_1_1media_1_1mp4_1_1VTTCueBox-members.html b/docs/d0/de8/structedash__packager_1_1media_1_1mp4_1_1VTTCueBox-members.html index 0826d16520..5a59e90045 100644 --- a/docs/d0/de8/structedash__packager_1_1media_1_1mp4_1_1VTTCueBox-members.html +++ b/docs/d0/de8/structedash__packager_1_1media_1_1mp4_1_1VTTCueBox-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dea/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html b/docs/d0/dea/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html index 26b6d4b191..e262d736d2 100644 --- a/docs/d0/dea/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html +++ b/docs/d0/dea/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/df3/packager__util_8cc_source.html b/docs/d0/df3/packager__util_8cc_source.html index 68c9e1a5d8..7aa8e55237 100644 --- a/docs/d0/df3/packager__util_8cc_source.html +++ b/docs/d0/df3/packager__util_8cc_source.html @@ -315,7 +315,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/df6/structedash__packager_1_1media_1_1mp4_1_1MovieExtends-members.html b/docs/d0/df6/structedash__packager_1_1media_1_1mp4_1_1MovieExtends-members.html index 23b8f6afd7..820db38d78 100644 --- a/docs/d0/df6/structedash__packager_1_1media_1_1mp4_1_1MovieExtends-members.html +++ b/docs/d0/df6/structedash__packager_1_1media_1_1mp4_1_1MovieExtends-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dfa/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html b/docs/d0/dfa/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html index 6e2975720e..814edbc23f 100644 --- a/docs/d0/dfa/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html +++ b/docs/d0/dfa/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html @@ -116,7 +116,7 @@ scoped_refptr< diff --git a/docs/d1/d02/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer-members.html b/docs/d1/d02/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer-members.html index 759cb86d1b..fc854a95a7 100644 --- a/docs/d1/d02/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer-members.html +++ b/docs/d1/d02/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer-members.html @@ -121,7 +121,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d13/status_8h_source.html b/docs/d1/d13/status_8h_source.html index 9dc771587b..274711ecda 100644 --- a/docs/d1/d13/status_8h_source.html +++ b/docs/d1/d13/status_8h_source.html @@ -239,7 +239,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d16/structedash__packager_1_1xml_1_1XmlDeleter-members.html b/docs/d1/d16/structedash__packager_1_1xml_1_1XmlDeleter-members.html index 96032ea26a..26a832760a 100644 --- a/docs/d1/d16/structedash__packager_1_1xml_1_1XmlDeleter-members.html +++ b/docs/d1/d16/structedash__packager_1_1xml_1_1XmlDeleter-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d1c/two__pass__single__segment__segmenter_8cc_source.html b/docs/d1/d1c/two__pass__single__segment__segmenter_8cc_source.html index 1c868f613c..e554b2050f 100644 --- a/docs/d1/d1c/two__pass__single__segment__segmenter_8cc_source.html +++ b/docs/d1/d1c/two__pass__single__segment__segmenter_8cc_source.html @@ -275,7 +275,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d1d/muxer__flags_8cc_source.html b/docs/d1/d1d/muxer__flags_8cc_source.html index e7d91ca0a1..324b603f4c 100644 --- a/docs/d1/d1d/muxer__flags_8cc_source.html +++ b/docs/d1/d1d/muxer__flags_8cc_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d27/key__fetcher_8h_source.html b/docs/d1/d27/key__fetcher_8h_source.html index 419ea94340..4739a07738 100644 --- a/docs/d1/d27/key__fetcher_8h_source.html +++ b/docs/d1/d27/key__fetcher_8h_source.html @@ -126,7 +126,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d28/classedash__packager_1_1media_1_1WebMTracksParser-members.html b/docs/d1/d28/classedash__packager_1_1media_1_1WebMTracksParser-members.html index f07d303ca5..03cef2c47c 100644 --- a/docs/d1/d28/classedash__packager_1_1media_1_1WebMTracksParser-members.html +++ b/docs/d1/d28/classedash__packager_1_1media_1_1WebMTracksParser-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d28/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator-members.html b/docs/d1/d28/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator-members.html index 022fe67e40..a65db892fd 100644 --- a/docs/d1/d28/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator-members.html +++ b/docs/d1/d28/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d2a/structedash__packager_1_1media_1_1mp4_1_1TrackExtends-members.html b/docs/d1/d2a/structedash__packager_1_1media_1_1mp4_1_1TrackExtends-members.html index 734221aa66..e071416f90 100644 --- a/docs/d1/d2a/structedash__packager_1_1media_1_1mp4_1_1TrackExtends-members.html +++ b/docs/d1/d2a/structedash__packager_1_1media_1_1mp4_1_1TrackExtends-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d2f/webvtt__media__parser_8cc_source.html b/docs/d1/d2f/webvtt__media__parser_8cc_source.html index c2c9a057ce..82d1403247 100644 --- a/docs/d1/d2f/webvtt__media__parser_8cc_source.html +++ b/docs/d1/d2f/webvtt__media__parser_8cc_source.html @@ -479,7 +479,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.html b/docs/d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.html index 2e039df73f..e9105ee828 100644 --- a/docs/d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.html +++ b/docs/d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.html @@ -165,7 +165,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 1012 of file box_definitions.cc.

+

Definition at line 1028 of file box_definitions.cc.

@@ -176,7 +176,7 @@ Additional Inherited Members diff --git a/docs/d1/d37/es__parser__h264_8h_source.html b/docs/d1/d37/es__parser__h264_8h_source.html index 712f2bf3ec..a64cc5949a 100644 --- a/docs/d1/d37/es__parser__h264_8h_source.html +++ b/docs/d1/d37/es__parser__h264_8h_source.html @@ -200,7 +200,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d38/classedash__packager_1_1MockRepresentation-members.html b/docs/d1/d38/classedash__packager_1_1MockRepresentation-members.html index 3c5f8901ed..e84b7164ce 100644 --- a/docs/d1/d38/classedash__packager_1_1MockRepresentation-members.html +++ b/docs/d1/d38/classedash__packager_1_1MockRepresentation-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d3b/mpd__generator__flags_8h_source.html b/docs/d1/d3b/mpd__generator__flags_8h_source.html index 5476e99485..11211d708b 100644 --- a/docs/d1/d3b/mpd__generator__flags_8h_source.html +++ b/docs/d1/d3b/mpd__generator__flags_8h_source.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d45/decoding__time__iterator_8cc_source.html b/docs/d1/d45/decoding__time__iterator_8cc_source.html index 099ec533ec..3efc7687ce 100644 --- a/docs/d1/d45/decoding__time__iterator_8cc_source.html +++ b/docs/d1/d45/decoding__time__iterator_8cc_source.html @@ -163,12 +163,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
bool IsValid() const
bool AdvanceSample()
uint32_t NumSamples() const
-
+
uint64_t Duration(uint32_t start_sample, uint32_t end_sample) const
diff --git a/docs/d1/d48/text__track__config_8h_source.html b/docs/d1/d48/text__track__config_8h_source.html index 68fcb2bbd6..af7e09bfa5 100644 --- a/docs/d1/d48/text__track__config_8h_source.html +++ b/docs/d1/d48/text__track__config_8h_source.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d4b/classedash__packager_1_1media_1_1mp2t_1_1TsPacket.html b/docs/d1/d4b/classedash__packager_1_1media_1_1mp2t_1_1TsPacket.html index 466fa73b50..f7e6775fbc 100644 --- a/docs/d1/d4b/classedash__packager_1_1media_1_1mp2t_1_1TsPacket.html +++ b/docs/d1/d4b/classedash__packager_1_1media_1_1mp2t_1_1TsPacket.html @@ -145,7 +145,7 @@ static const int kPacketSi diff --git a/docs/d1/d4d/h264__bit__reader_8cc_source.html b/docs/d1/d4d/h264__bit__reader_8cc_source.html index f6222cd19d..aa0f052f1e 100644 --- a/docs/d1/d4d/h264__bit__reader_8cc_source.html +++ b/docs/d1/d4d/h264__bit__reader_8cc_source.html @@ -205,7 +205,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d5d/structedash__packager_1_1MpdOptions.html b/docs/d1/d5d/structedash__packager_1_1MpdOptions.html index 659555b63d..52658fd335 100644 --- a/docs/d1/d5d/structedash__packager_1_1MpdOptions.html +++ b/docs/d1/d5d/structedash__packager_1_1MpdOptions.html @@ -127,7 +127,7 @@ double suggested_presentat diff --git a/docs/d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html b/docs/d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html index 3f9f5ed8de..fde3ab16a5 100644 --- a/docs/d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html +++ b/docs/d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html @@ -151,7 +151,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 595 of file box_definitions.h.

+

Definition at line 599 of file box_definitions.h.

Member Function Documentation

@@ -177,7 +177,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 1915 of file box_definitions.cc.

+

Definition at line 1943 of file box_definitions.cc.

@@ -188,7 +188,7 @@ Additional Inherited Members diff --git a/docs/d1/d70/vp8__parser_8cc_source.html b/docs/d1/d70/vp8__parser_8cc_source.html index cd9c5b7813..f9aef89853 100644 --- a/docs/d1/d70/vp8__parser_8cc_source.html +++ b/docs/d1/d70/vp8__parser_8cc_source.html @@ -293,7 +293,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d72/language__utils_8cc_source.html b/docs/d1/d72/language__utils_8cc_source.html index d6d2093d7f..f54b17db6c 100644 --- a/docs/d1/d72/language__utils_8cc_source.html +++ b/docs/d1/d72/language__utils_8cc_source.html @@ -206,7 +206,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d72/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry-members.html b/docs/d1/d72/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry-members.html index 8bb45a1c21..1cac0f4277 100644 --- a/docs/d1/d72/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry-members.html +++ b/docs/d1/d72/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d72/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatio-members.html b/docs/d1/d72/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatio-members.html index 3490e17a82..28e7cae1f6 100644 --- a/docs/d1/d72/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatio-members.html +++ b/docs/d1/d72/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatio-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d74/mp2t__media__parser_8cc_source.html b/docs/d1/d74/mp2t__media__parser_8cc_source.html index d293b5a5f8..8b53e3e5e8 100644 --- a/docs/d1/d74/mp2t__media__parser_8cc_source.html +++ b/docs/d1/d74/mp2t__media__parser_8cc_source.html @@ -528,7 +528,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk-members.html b/docs/d1/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk-members.html index 0dd836d5bc..2d557dba7d 100644 --- a/docs/d1/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk-members.html +++ b/docs/d1/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.html b/docs/d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.html index a6ee2fa031..e2aabe43b1 100644 --- a/docs/d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.html +++ b/docs/d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.html @@ -176,7 +176,7 @@ base::Clock * clock () diff --git a/docs/d1/d7d/webm__video__client_8cc_source.html b/docs/d1/d7d/webm__video__client_8cc_source.html index a1f5a98723..eddb01fa27 100644 --- a/docs/d1/d7d/webm__video__client_8cc_source.html +++ b/docs/d1/d7d/webm__video__client_8cc_source.html @@ -266,7 +266,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d7f/classedash__packager_1_1media_1_1BitReader-members.html b/docs/d1/d7f/classedash__packager_1_1media_1_1BitReader-members.html index 4df5819b65..a894a53b4a 100644 --- a/docs/d1/d7f/classedash__packager_1_1media_1_1BitReader-members.html +++ b/docs/d1/d7f/classedash__packager_1_1media_1_1BitReader-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html b/docs/d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html index b37eb33884..32120b0994 100644 --- a/docs/d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html +++ b/docs/d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html @@ -157,7 +157,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 663 of file box_definitions.h.

+

Definition at line 667 of file box_definitions.h.

Member Function Documentation

@@ -183,7 +183,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 2120 of file box_definitions.cc.

+

Definition at line 2148 of file box_definitions.cc.

@@ -194,7 +194,7 @@ Additional Inherited Members diff --git a/docs/d1/d82/adts__constants_8h_source.html b/docs/d1/d82/adts__constants_8h_source.html index 6b24970b9f..670e02aee8 100644 --- a/docs/d1/d82/adts__constants_8h_source.html +++ b/docs/d1/d82/adts__constants_8h_source.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html b/docs/d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html index 0cf7febb0b..3265f21bbb 100644 --- a/docs/d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html +++ b/docs/d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html @@ -218,7 +218,7 @@ Static Public Member Functions diff --git a/docs/d1/d86/structedash__packager_1_1media_1_1mp4_1_1SubtitleMediaHeader.html b/docs/d1/d86/structedash__packager_1_1media_1_1mp4_1_1SubtitleMediaHeader.html index d3b800bd83..4273a39d38 100644 --- a/docs/d1/d86/structedash__packager_1_1media_1_1mp4_1_1SubtitleMediaHeader.html +++ b/docs/d1/d86/structedash__packager_1_1media_1_1mp4_1_1SubtitleMediaHeader.html @@ -138,7 +138,7 @@ uint32_t flags

Detailed Description

-

Definition at line 440 of file box_definitions.h.

+

Definition at line 444 of file box_definitions.h.

Member Function Documentation

@@ -164,7 +164,7 @@ uint32_t flagsImplements edash_packager::media::mp4::Box.

-

Definition at line 1434 of file box_definitions.cc.

+

Definition at line 1462 of file box_definitions.cc.

@@ -175,7 +175,7 @@ uint32_t flags diff --git a/docs/d1/d8e/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html b/docs/d1/d8e/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html index d62186d7c4..5e94739a73 100644 --- a/docs/d1/d8e/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html +++ b/docs/d1/d8e/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d8e/webm__audio__client_8cc_source.html b/docs/d1/d8e/webm__audio__client_8cc_source.html index 11037a1b0f..123f600d85 100644 --- a/docs/d1/d8e/webm__audio__client_8cc_source.html +++ b/docs/d1/d8e/webm__audio__client_8cc_source.html @@ -158,7 +158,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
69  return scoped_refptr<AudioStreamInfo>(new AudioStreamInfo(
70  track_num, kWebMTimeScale, 0, audio_codec,
71  AudioStreamInfo::GetCodecString(audio_codec, 0), language,
-
72  kSampleSizeInBits, channels_, sampling_frequency, extra_data,
+
72  kSampleSizeInBits, channels_, sampling_frequency, 0, 0, extra_data,
73  extra_data_size, is_encrypted));
74 }
75 
@@ -206,12 +206,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
117 } // namespace edash_packager
Holds audio stream information.
void Reset()
Reset this object's state so it can process a new audio track element.
-
static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
+
static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
scoped_refptr< AudioStreamInfo > GetAudioStreamInfo(int64_t track_num, const std::string &codec_id, const std::vector< uint8_t > &codec_private, const std::string &language, bool is_encrypted)
diff --git a/docs/d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html b/docs/d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html index 567caca1fa..2c7db2849e 100644 --- a/docs/d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html +++ b/docs/d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html @@ -242,7 +242,7 @@ false if max_offset > diff --git a/docs/d1/d9d/tracks__builder_8h_source.html b/docs/d1/d9d/tracks__builder_8h_source.html index 8d6eaa6bad..42dddcb4f7 100644 --- a/docs/d1/d9d/tracks__builder_8h_source.html +++ b/docs/d1/d9d/tracks__builder_8h_source.html @@ -210,7 +210,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/dc3/classedash__packager_1_1media_1_1LocalFile-members.html b/docs/d1/dc3/classedash__packager_1_1media_1_1LocalFile-members.html index d5d6718c2d..2c33b8a9ae 100644 --- a/docs/d1/dc3/classedash__packager_1_1media_1_1LocalFile-members.html +++ b/docs/d1/dc3/classedash__packager_1_1media_1_1LocalFile-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/dcb/encrypting__fragmenter_8h_source.html b/docs/d1/dcb/encrypting__fragmenter_8h_source.html index 00a7036d77..7256231cd0 100644 --- a/docs/d1/dcb/encrypting__fragmenter_8h_source.html +++ b/docs/d1/dcb/encrypting__fragmenter_8h_source.html @@ -175,13 +175,13 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
Status AddSample(scoped_refptr< MediaSample > sample) override
void FinalizeFragment() override
Finalize and optimize the fragment.
- +
virtual Status PrepareFragmentForEncryption(bool enable_encryption)
virtual void FinalizeFragmentForEncryption()
Finalize current fragment for encryption.
diff --git a/docs/d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html b/docs/d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html index 21896bf22b..6b3d62da79 100644 --- a/docs/d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html +++ b/docs/d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html @@ -171,7 +171,7 @@ Additional Inherited Members

Reimplemented in edash_packager::media::mp4::SegmentType.

-

Definition at line 78 of file box_definitions.cc.

+

Definition at line 94 of file box_definitions.cc.

@@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d1/dd0/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup-members.html b/docs/d1/dd0/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup-members.html index 9c7f8247aa..adcd3a6340 100644 --- a/docs/d1/dd0/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup-members.html +++ b/docs/d1/dd0/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.html b/docs/d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.html index 3962e12fd0..33940a7839 100644 --- a/docs/d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.html +++ b/docs/d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.html @@ -156,7 +156,7 @@ Protected Member Functions diff --git a/docs/d1/ddc/classedash__packager_1_1media_1_1VP9Parser-members.html b/docs/d1/ddc/classedash__packager_1_1media_1_1VP9Parser-members.html index 82c76d48a3..f913e02c95 100644 --- a/docs/d1/ddc/classedash__packager_1_1media_1_1VP9Parser-members.html +++ b/docs/d1/ddc/classedash__packager_1_1media_1_1VP9Parser-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/de2/composition__offset__iterator_8cc_source.html b/docs/d1/de2/composition__offset__iterator_8cc_source.html index e84e3eee48..4f1ab3b3f1 100644 --- a/docs/d1/de2/composition__offset__iterator_8cc_source.html +++ b/docs/d1/de2/composition__offset__iterator_8cc_source.html @@ -153,13 +153,13 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
CompositionOffsetIterator(const CompositionTimeToSample &composition_time_to_sample)
Create CompositionOffsetIterator from composition time to sample box.
- + diff --git a/docs/d1/df0/aes__encryptor_8h_source.html b/docs/d1/df0/aes__encryptor_8h_source.html index f24553fa33..e77016deb2 100644 --- a/docs/d1/df0/aes__encryptor_8h_source.html +++ b/docs/d1/df0/aes__encryptor_8h_source.html @@ -305,7 +305,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/df2/structedash__packager_1_1media_1_1mp4_1_1CueSettingsBox.html b/docs/d1/df2/structedash__packager_1_1media_1_1mp4_1_1CueSettingsBox.html index bb819fc5dc..0c909f0357 100644 --- a/docs/d1/df2/structedash__packager_1_1media_1_1mp4_1_1CueSettingsBox.html +++ b/docs/d1/df2/structedash__packager_1_1media_1_1mp4_1_1CueSettingsBox.html @@ -136,7 +136,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 695 of file box_definitions.h.

+

Definition at line 699 of file box_definitions.h.

Member Function Documentation

@@ -162,7 +162,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 2241 of file box_definitions.cc.

+

Definition at line 2269 of file box_definitions.cc.

@@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d1/dfc/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html b/docs/d1/dfc/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html index cb70114fdc..14461f75aa 100644 --- a/docs/d1/dfc/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html +++ b/docs/d1/dfc/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d02/timestamp_8h_source.html b/docs/d2/d02/timestamp_8h_source.html index 7af399e7d1..acaf3ef5d2 100644 --- a/docs/d2/d02/timestamp_8h_source.html +++ b/docs/d2/d02/timestamp_8h_source.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d0f/structedash__packager_1_1media_1_1mp4_1_1MediaInformation-members.html b/docs/d2/d0f/structedash__packager_1_1media_1_1mp4_1_1MediaInformation-members.html index 1f7f386625..906bf71088 100644 --- a/docs/d2/d0f/structedash__packager_1_1media_1_1mp4_1_1MediaInformation-members.html +++ b/docs/d2/d0f/structedash__packager_1_1media_1_1mp4_1_1MediaInformation-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d17/ts__section__pat_8cc_source.html b/docs/d2/d17/ts__section__pat_8cc_source.html index b9703d8a45..017e3a5e31 100644 --- a/docs/d2/d17/ts__section__pat_8cc_source.html +++ b/docs/d2/d17/ts__section__pat_8cc_source.html @@ -214,7 +214,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d23/threaded__io__file_8cc_source.html b/docs/d2/d23/threaded__io__file_8cc_source.html index ddd47d8ede..7e4735bedc 100644 --- a/docs/d2/d23/threaded__io__file_8cc_source.html +++ b/docs/d2/d23/threaded__io__file_8cc_source.html @@ -317,7 +317,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d24/packager__util_8h_source.html b/docs/d2/d24/packager__util_8h_source.html index 7df19c3740..74bedc9d36 100644 --- a/docs/d2/d24/packager__util_8h_source.html +++ b/docs/d2/d24/packager__util_8h_source.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html b/docs/d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html index a6ee347641..70f0e87b88 100644 --- a/docs/d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html +++ b/docs/d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html @@ -149,7 +149,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 612 of file box_definitions.h.

+

Definition at line 616 of file box_definitions.h.

Member Function Documentation

@@ -175,7 +175,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 1957 of file box_definitions.cc.

+

Definition at line 1985 of file box_definitions.cc.

@@ -186,7 +186,7 @@ Additional Inherited Members diff --git a/docs/d2/d2d/structedash__packager_1_1media_1_1mp4_1_1MediaHeader-members.html b/docs/d2/d2d/structedash__packager_1_1media_1_1mp4_1_1MediaHeader-members.html index 8291cece87..c3dee69603 100644 --- a/docs/d2/d2d/structedash__packager_1_1media_1_1mp4_1_1MediaHeader-members.html +++ b/docs/d2/d2d/structedash__packager_1_1media_1_1mp4_1_1MediaHeader-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d30/tracks__builder_8cc_source.html b/docs/d2/d30/tracks__builder_8cc_source.html index e92b792cff..70ba247833 100644 --- a/docs/d2/d30/tracks__builder_8cc_source.html +++ b/docs/d2/d30/tracks__builder_8cc_source.html @@ -487,7 +487,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d48/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader-members.html b/docs/d2/d48/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader-members.html index 0aba9c6b4b..18c47c2fb0 100644 --- a/docs/d2/d48/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader-members.html +++ b/docs/d2/d48/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d4b/structedash__packager_1_1media_1_1FileCloser-members.html b/docs/d2/d4b/structedash__packager_1_1media_1_1FileCloser-members.html index fa56bbe2ff..5e40fef541 100644 --- a/docs/d2/d4b/structedash__packager_1_1media_1_1FileCloser-members.html +++ b/docs/d2/d4b/structedash__packager_1_1media_1_1FileCloser-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d4d/file_8h_source.html b/docs/d2/d4d/file_8h_source.html index bebda82ceb..0166b1161d 100644 --- a/docs/d2/d4d/file_8h_source.html +++ b/docs/d2/d4d/file_8h_source.html @@ -190,7 +190,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d50/structedash__packager_1_1media_1_1H264DecRefPicMarking.html b/docs/d2/d50/structedash__packager_1_1media_1_1H264DecRefPicMarking.html index a51973ef04..d6779deb45 100644 --- a/docs/d2/d50/structedash__packager_1_1media_1_1H264DecRefPicMarking.html +++ b/docs/d2/d50/structedash__packager_1_1media_1_1H264DecRefPicMarking.html @@ -121,7 +121,7 @@ int max_long_term_frame_id diff --git a/docs/d2/d51/classedash__packager_1_1media_1_1WebVttMediaParser.html b/docs/d2/d51/classedash__packager_1_1media_1_1WebVttMediaParser.html index 8ba198dba6..fff1dc52d0 100644 --- a/docs/d2/d51/classedash__packager_1_1media_1_1WebVttMediaParser.html +++ b/docs/d2/d51/classedash__packager_1_1media_1_1WebVttMediaParser.html @@ -255,7 +255,7 @@ track_id, const scoped_refptr
diff --git a/docs/d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html b/docs/d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html index 526b7bedb1..ec31b1521c 100644 --- a/docs/d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html +++ b/docs/d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html @@ -177,7 +177,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 169 of file box_definitions.cc.

+

Definition at line 185 of file box_definitions.cc.

@@ -188,7 +188,7 @@ Additional Inherited Members diff --git a/docs/d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.html b/docs/d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.html index 7ae0f4b405..a7f0026f68 100644 --- a/docs/d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.html +++ b/docs/d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.html @@ -155,7 +155,7 @@ void Reset () override diff --git a/docs/d2/d5d/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader-members.html b/docs/d2/d5d/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader-members.html index 8f1cc189ee..1d37848a1a 100644 --- a/docs/d2/d5d/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader-members.html +++ b/docs/d2/d5d/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d62/simple__mpd__notifier_8h_source.html b/docs/d2/d62/simple__mpd__notifier_8h_source.html index 0ec4e4b1e4..700b9ba291 100644 --- a/docs/d2/d62/simple__mpd__notifier_8h_source.html +++ b/docs/d2/d62/simple__mpd__notifier_8h_source.html @@ -188,7 +188,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d6f/classBandwidthEstimator.html b/docs/d2/d6f/classBandwidthEstimator.html index f86117d732..7266fbabad 100644 --- a/docs/d2/d6f/classBandwidthEstimator.html +++ b/docs/d2/d6f/classBandwidthEstimator.html @@ -151,7 +151,7 @@ static const int kUseAllBl diff --git a/docs/d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html b/docs/d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html index 7f1869f08c..72be4a9288 100644 --- a/docs/d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html +++ b/docs/d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html @@ -162,7 +162,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 394 of file box_definitions.cc.

+

Definition at line 410 of file box_definitions.cc.

@@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d2/d7b/simple__mpd__notifier_8cc_source.html b/docs/d2/d7b/simple__mpd__notifier_8cc_source.html index dbb964984d..6bc4bb2f7d 100644 --- a/docs/d2/d7b/simple__mpd__notifier_8cc_source.html +++ b/docs/d2/d7b/simple__mpd__notifier_8cc_source.html @@ -242,7 +242,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d7e/aac__audio__specific__config_8h_source.html b/docs/d2/d7e/aac__audio__specific__config_8h_source.html index 166e56c4aa..4b6a474fa8 100644 --- a/docs/d2/d7e/aac__audio__specific__config_8h_source.html +++ b/docs/d2/d7e/aac__audio__specific__config_8h_source.html @@ -166,7 +166,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d90/classedash__packager_1_1media_1_1Status.html b/docs/d2/d90/classedash__packager_1_1media_1_1Status.html index a92ad2f201..c3905ce577 100644 --- a/docs/d2/d90/classedash__packager_1_1media_1_1Status.html +++ b/docs/d2/d90/classedash__packager_1_1media_1_1Status.html @@ -302,7 +302,7 @@ static const diff --git a/docs/d2/d92/box__reader_8h_source.html b/docs/d2/d92/box__reader_8h_source.html index 8f36bd22e6..841019a56b 100644 --- a/docs/d2/d92/box__reader_8h_source.html +++ b/docs/d2/d92/box__reader_8h_source.html @@ -249,7 +249,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d98/avc__decoder__configuration_8h_source.html b/docs/d2/d98/avc__decoder__configuration_8h_source.html index da0f5ade4e..f6642b2a4b 100644 --- a/docs/d2/d98/avc__decoder__configuration_8h_source.html +++ b/docs/d2/d98/avc__decoder__configuration_8h_source.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/da6/threaded__io__file_8h_source.html b/docs/d2/da6/threaded__io__file_8h_source.html index d744797315..89860dc7a1 100644 --- a/docs/d2/da6/threaded__io__file_8h_source.html +++ b/docs/d2/da6/threaded__io__file_8h_source.html @@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/da8/mp4_2segmenter_8cc_source.html b/docs/d2/da8/mp4_2segmenter_8cc_source.html index 3c8c1b969a..48ac916f18 100644 --- a/docs/d2/da8/mp4_2segmenter_8cc_source.html +++ b/docs/d2/da8/mp4_2segmenter_8cc_source.html @@ -525,7 +525,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
virtual Status GetKey(TrackType track_type, EncryptionKey *key)
Definition: key_source.cc:46
- + @@ -549,7 +549,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dae/webm__muxer_8cc_source.html b/docs/d2/dae/webm__muxer_8cc_source.html index 5791c82de7..8fd6d004b5 100644 --- a/docs/d2/dae/webm__muxer_8cc_source.html +++ b/docs/d2/dae/webm__muxer_8cc_source.html @@ -209,7 +209,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dc5/structedash__packager_1_1media_1_1mp4_1_1CueSettingsBox-members.html b/docs/d2/dc5/structedash__packager_1_1media_1_1mp4_1_1CueSettingsBox-members.html index 4cecff1683..ecd7d48baa 100644 --- a/docs/d2/dc5/structedash__packager_1_1media_1_1mp4_1_1CueSettingsBox-members.html +++ b/docs/d2/dc5/structedash__packager_1_1media_1_1mp4_1_1CueSettingsBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dd6/mkv__writer_8h_source.html b/docs/d2/dd6/mkv__writer_8h_source.html index ebe1d4781c..3c45163f04 100644 --- a/docs/d2/dd6/mkv__writer_8h_source.html +++ b/docs/d2/dd6/mkv__writer_8h_source.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dd9/structedash__packager_1_1media_1_1VideoStreamInfoParameters.html b/docs/d2/dd9/structedash__packager_1_1media_1_1VideoStreamInfoParameters.html index 520a4ee07d..4fec01301f 100644 --- a/docs/d2/dd9/structedash__packager_1_1media_1_1VideoStreamInfoParameters.html +++ b/docs/d2/dd9/structedash__packager_1_1media_1_1VideoStreamInfoParameters.html @@ -146,7 +146,7 @@ bool is_encrypted diff --git a/docs/d2/dda/vp__codec__configuration_8cc_source.html b/docs/d2/dda/vp__codec__configuration_8cc_source.html index a178870c37..3ee25c7083 100644 --- a/docs/d2/dda/vp__codec__configuration_8cc_source.html +++ b/docs/d2/dda/vp__codec__configuration_8cc_source.html @@ -217,7 +217,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/de6/packager__main_8cc_source.html b/docs/d2/de6/packager__main_8cc_source.html index fc2b92c1a0..6a7a23ebda 100644 --- a/docs/d2/de6/packager__main_8cc_source.html +++ b/docs/d2/de6/packager__main_8cc_source.html @@ -563,7 +563,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/deb/es__parser_8h_source.html b/docs/d2/deb/es__parser_8h_source.html index c2f42c8cd6..20d4046d4d 100644 --- a/docs/d2/deb/es__parser_8h_source.html +++ b/docs/d2/deb/es__parser_8h_source.html @@ -145,7 +145,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/df3/structedash__packager_1_1media_1_1mp4_1_1Edit-members.html b/docs/d2/df3/structedash__packager_1_1media_1_1mp4_1_1Edit-members.html index 1d7605d0fd..9850ca7582 100644 --- a/docs/d2/df3/structedash__packager_1_1media_1_1mp4_1_1Edit-members.html +++ b/docs/d2/df3/structedash__packager_1_1media_1_1mp4_1_1Edit-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/df8/structedash__packager_1_1media_1_1mp4_1_1CueSourceIDBox.html b/docs/d2/df8/structedash__packager_1_1media_1_1mp4_1_1CueSourceIDBox.html index 1fe808ef18..e2f9846757 100644 --- a/docs/d2/df8/structedash__packager_1_1media_1_1mp4_1_1CueSourceIDBox.html +++ b/docs/d2/df8/structedash__packager_1_1media_1_1mp4_1_1CueSourceIDBox.html @@ -136,7 +136,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 680 of file box_definitions.h.

+

Definition at line 684 of file box_definitions.h.

Member Function Documentation

@@ -162,7 +162,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 2186 of file box_definitions.cc.

+

Definition at line 2214 of file box_definitions.cc.

@@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html b/docs/d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html index f2192e5b1c..efabf12a10 100644 --- a/docs/d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html +++ b/docs/d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html @@ -195,7 +195,7 @@ Public Member Functions diff --git a/docs/d2/dfd/adts__header_8h_source.html b/docs/d2/dfd/adts__header_8h_source.html index de0b65986b..681bc473e4 100644 --- a/docs/d2/dfd/adts__header_8h_source.html +++ b/docs/d2/dfd/adts__header_8h_source.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dfd/classedash__packager_1_1media_1_1MediaStream.html b/docs/d2/dfd/classedash__packager_1_1media_1_1MediaStream.html index 5ec9f6b7ab..aabf80e178 100644 --- a/docs/d2/dfd/classedash__packager_1_1media_1_1MediaStream.html +++ b/docs/d2/dfd/classedash__packager_1_1media_1_1MediaStream.html @@ -225,7 +225,7 @@ const scoped_refptr< diff --git a/docs/d3/d00/structedash__packager_1_1media_1_1VPxFrameInfo-members.html b/docs/d3/d00/structedash__packager_1_1media_1_1VPxFrameInfo-members.html index 68de2408dd..4c8d3d1b77 100644 --- a/docs/d3/d00/structedash__packager_1_1media_1_1VPxFrameInfo-members.html +++ b/docs/d3/d00/structedash__packager_1_1media_1_1VPxFrameInfo-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d04/classedash__packager_1_1media_1_1WebMAudioClient-members.html b/docs/d3/d04/classedash__packager_1_1media_1_1WebMAudioClient-members.html index 4a3ae81f71..bf1f60aed9 100644 --- a/docs/d3/d04/classedash__packager_1_1media_1_1WebMAudioClient-members.html +++ b/docs/d3/d04/classedash__packager_1_1media_1_1WebMAudioClient-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html b/docs/d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html index 18c19bbced..eec6e0032f 100644 --- a/docs/d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html +++ b/docs/d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html @@ -234,7 +234,7 @@ Additional Inherited Members diff --git a/docs/d3/d15/udp__file__win_8cc_source.html b/docs/d3/d15/udp__file__win_8cc_source.html index de868aa9a6..32172ae018 100644 --- a/docs/d3/d15/udp__file__win_8cc_source.html +++ b/docs/d3/d15/udp__file__win_8cc_source.html @@ -160,7 +160,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d19/io__cache_8h_source.html b/docs/d3/d19/io__cache_8h_source.html index 325477406e..f41dc28778 100644 --- a/docs/d3/d19/io__cache_8h_source.html +++ b/docs/d3/d19/io__cache_8h_source.html @@ -162,7 +162,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d1c/structedash__packager_1_1media_1_1mp4_1_1VTTEmptyCueBox.html b/docs/d3/d1c/structedash__packager_1_1media_1_1mp4_1_1VTTEmptyCueBox.html index 54333e1a1a..0cc73015b9 100644 --- a/docs/d3/d1c/structedash__packager_1_1media_1_1mp4_1_1VTTEmptyCueBox.html +++ b/docs/d3/d1c/structedash__packager_1_1media_1_1mp4_1_1VTTEmptyCueBox.html @@ -129,7 +129,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 705 of file box_definitions.h.

+

Definition at line 709 of file box_definitions.h.

Member Function Documentation

@@ -155,7 +155,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 2277 of file box_definitions.cc.

+

Definition at line 2305 of file box_definitions.cc.

@@ -166,7 +166,7 @@ Additional Inherited Members diff --git a/docs/d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html b/docs/d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html index c9ab73641e..e34eb2e7f6 100644 --- a/docs/d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html +++ b/docs/d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html @@ -157,7 +157,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 497 of file box_definitions.h.

+

Definition at line 501 of file box_definitions.h.

Member Function Documentation

@@ -183,7 +183,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 1622 of file box_definitions.cc.

+

Definition at line 1650 of file box_definitions.cc.

@@ -194,7 +194,7 @@ Additional Inherited Members diff --git a/docs/d3/d2f/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption-members.html b/docs/d3/d2f/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption-members.html index 41c6635d2d..bcb0c0ce9b 100644 --- a/docs/d3/d2f/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption-members.html +++ b/docs/d3/d2f/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html b/docs/d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html index e8d778f9e1..ac97098285 100644 --- a/docs/d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html +++ b/docs/d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html @@ -311,7 +311,7 @@ KeyFetcher implementation overrides. diff --git a/docs/d3/d48/structedash__packager_1_1media_1_1mp4_1_1EditList-members.html b/docs/d3/d48/structedash__packager_1_1media_1_1mp4_1_1EditList-members.html index 058122b84f..6d825ade85 100644 --- a/docs/d3/d48/structedash__packager_1_1media_1_1mp4_1_1EditList-members.html +++ b/docs/d3/d48/structedash__packager_1_1media_1_1mp4_1_1EditList-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d52/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html b/docs/d3/d52/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html index bdefa85984..1ec14480f4 100644 --- a/docs/d3/d52/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html +++ b/docs/d3/d52/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d56/decrypt__config_8cc_source.html b/docs/d3/d56/decrypt__config_8cc_source.html index b99e58b396..622572b873 100644 --- a/docs/d3/d56/decrypt__config_8cc_source.html +++ b/docs/d3/d56/decrypt__config_8cc_source.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d62/rcheck_8h_source.html b/docs/d3/d62/rcheck_8h_source.html index 76a5e0b98a..e7cdd5b5d5 100644 --- a/docs/d3/d62/rcheck_8h_source.html +++ b/docs/d3/d62/rcheck_8h_source.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d69/classedash__packager_1_1media_1_1ClusterBuilder.html b/docs/d3/d69/classedash__packager_1_1media_1_1ClusterBuilder.html index f633ae3d43..48f32a93fe 100644 --- a/docs/d3/d69/classedash__packager_1_1media_1_1ClusterBuilder.html +++ b/docs/d3/d69/classedash__packager_1_1media_1_1ClusterBuilder.html @@ -125,7 +125,7 @@ scoped_ptr< diff --git a/docs/d3/d6b/classedash__packager_1_1media_1_1IoCache.html b/docs/d3/d6b/classedash__packager_1_1media_1_1IoCache.html index df903ebc5e..6f588d2522 100644 --- a/docs/d3/d6b/classedash__packager_1_1media_1_1IoCache.html +++ b/docs/d3/d6b/classedash__packager_1_1media_1_1IoCache.html @@ -297,7 +297,7 @@ void  diff --git a/docs/d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html b/docs/d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html index 9d33d58b52..15e3b63cfe 100644 --- a/docs/d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html +++ b/docs/d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html @@ -154,7 +154,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 312 of file box_definitions.h.

+

Definition at line 316 of file box_definitions.h.

Member Function Documentation

@@ -180,7 +180,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 524 of file box_definitions.cc.

+

Definition at line 540 of file box_definitions.cc.

@@ -191,7 +191,7 @@ Additional Inherited Members diff --git a/docs/d3/d76/muxer__flags_8h_source.html b/docs/d3/d76/muxer__flags_8h_source.html index 28a8a56d6b..387738f5a0 100644 --- a/docs/d3/d76/muxer__flags_8h_source.html +++ b/docs/d3/d76/muxer__flags_8h_source.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html b/docs/d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html index 32c627d626..94e6c341a3 100644 --- a/docs/d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html +++ b/docs/d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html @@ -154,7 +154,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 399 of file box_definitions.h.

+

Definition at line 403 of file box_definitions.h.

Member Function Documentation

@@ -180,7 +180,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 851 of file box_definitions.cc.

+

Definition at line 867 of file box_definitions.cc.

@@ -191,7 +191,7 @@ Additional Inherited Members diff --git a/docs/d3/d80/muxer__util_8h_source.html b/docs/d3/d80/muxer__util_8h_source.html index 53745e13da..623eb374af 100644 --- a/docs/d3/d80/muxer__util_8h_source.html +++ b/docs/d3/d80/muxer__util_8h_source.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d81/classedash__packager_1_1media_1_1MemoryFile.html b/docs/d3/d81/classedash__packager_1_1media_1_1MemoryFile.html index a4d9ddc538..c12a0ff995 100644 --- a/docs/d3/d81/classedash__packager_1_1media_1_1MemoryFile.html +++ b/docs/d3/d81/classedash__packager_1_1media_1_1MemoryFile.html @@ -485,7 +485,7 @@ bool  diff --git a/docs/d3/d8a/classedash__packager_1_1RepresentationStateChangeListener-members.html b/docs/d3/d8a/classedash__packager_1_1RepresentationStateChangeListener-members.html index 12d43b3015..8afe5728d7 100644 --- a/docs/d3/d8a/classedash__packager_1_1RepresentationStateChangeListener-members.html +++ b/docs/d3/d8a/classedash__packager_1_1RepresentationStateChangeListener-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d8d/webm__audio__client_8h_source.html b/docs/d3/d8d/webm__audio__client_8h_source.html index 7c9f8ba058..f918b0df55 100644 --- a/docs/d3/d8d/webm__audio__client_8h_source.html +++ b/docs/d3/d8d/webm__audio__client_8h_source.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d8e/classedash__packager_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter-members.html b/docs/d3/d8e/classedash__packager_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter-members.html index 5fff9a4a0d..91e5385d14 100644 --- a/docs/d3/d8e/classedash__packager_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter-members.html +++ b/docs/d3/d8e/classedash__packager_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter-members.html @@ -129,7 +129,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d9b/structedash__packager_1_1media_1_1VideoStreamInfoParameters-members.html b/docs/d3/d9b/structedash__packager_1_1media_1_1VideoStreamInfoParameters-members.html index 2363b681d7..3c4a18f7ef 100644 --- a/docs/d3/d9b/structedash__packager_1_1media_1_1VideoStreamInfoParameters-members.html +++ b/docs/d3/d9b/structedash__packager_1_1media_1_1VideoStreamInfoParameters-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d9f/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor-members.html b/docs/d3/d9f/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor-members.html index 6a616f4e36..ad317cc376 100644 --- a/docs/d3/d9f/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor-members.html +++ b/docs/d3/d9f/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor-members.html @@ -93,22 +93,27 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');

This is the complete list of members for edash_packager::media::mp4::ESDescriptor, including all inherited members.

- - - - - - - + + + + + + + + + + + - - - + + + +
ComputeSize() const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptor
decoder_specific_info() const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
ESDescriptor() (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptor
esid() const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
IsAAC() const edash_packager::media::mp4::ESDescriptorinline
object_type() const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
Parse(const std::vector< uint8_t > &data) (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptor
avg_bitrate() const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
ComputeSize() const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptor
decoder_specific_info() const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
ESDescriptor() (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptor
esid() const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
IsAAC() const edash_packager::media::mp4::ESDescriptorinline
IsDTS() const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
max_bitrate() const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
object_type() const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
Parse(const std::vector< uint8_t > &data) (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptor
set_avg_bitrate(uint32_t avg_bitrate) (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
set_decoder_specific_info(const std::vector< uint8_t > &decoder_specific_info) (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
set_esid(uint16_t esid) (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
set_object_type(ObjectType object_type) (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
Write(BufferWriter *writer) const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptor
~ESDescriptor() (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptor
set_max_bitrate(uint32_t max_bitrate) (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
set_object_type(ObjectType object_type) (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
Write(BufferWriter *writer) const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptor
~ESDescriptor() (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptor
diff --git a/docs/d3/db6/webm__parser_8cc_source.html b/docs/d3/db6/webm__parser_8cc_source.html index 4181785a53..583435dbd2 100644 --- a/docs/d3/db6/webm__parser_8cc_source.html +++ b/docs/d3/db6/webm__parser_8cc_source.html @@ -1068,7 +1068,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dbc/seek__head_8cc_source.html b/docs/d3/dbc/seek__head_8cc_source.html index a99067b949..2ab656eaa4 100644 --- a/docs/d3/dbc/seek__head_8cc_source.html +++ b/docs/d3/dbc/seek__head_8cc_source.html @@ -215,7 +215,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dbc/structedash__packager_1_1media_1_1H264WeightingFactors.html b/docs/d3/dbc/structedash__packager_1_1media_1_1H264WeightingFactors.html index 5f08e0c636..d34ab6f937 100644 --- a/docs/d3/dbc/structedash__packager_1_1media_1_1H264WeightingFactors.html +++ b/docs/d3/dbc/structedash__packager_1_1media_1_1H264WeightingFactors.html @@ -124,7 +124,7 @@ int chroma_offset [32] diff --git a/docs/d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html b/docs/d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html index 6286c4f5ed..d578a7424d 100644 --- a/docs/d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html +++ b/docs/d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html @@ -171,7 +171,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 956 of file box_definitions.cc.

+

Definition at line 972 of file box_definitions.cc.

@@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d3/dbe/classedash__packager_1_1media_1_1WebMMediaParser-members.html b/docs/d3/dbe/classedash__packager_1_1media_1_1WebMMediaParser-members.html index ad532269c1..900835fc82 100644 --- a/docs/d3/dbe/classedash__packager_1_1media_1_1WebMMediaParser-members.html +++ b/docs/d3/dbe/classedash__packager_1_1media_1_1WebMMediaParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dbe/demuxer_8cc_source.html b/docs/d3/dbe/demuxer_8cc_source.html index 8f7c5d886a..e0b5e96188 100644 --- a/docs/d3/dbe/demuxer_8cc_source.html +++ b/docs/d3/dbe/demuxer_8cc_source.html @@ -311,7 +311,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dc0/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html b/docs/d3/dc0/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html index 1f6993f191..9ce434ea6f 100644 --- a/docs/d3/dc0/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html +++ b/docs/d3/dc0/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dcc/classedash__packager_1_1media_1_1ProgressListener-members.html b/docs/d3/dcc/classedash__packager_1_1media_1_1ProgressListener-members.html index 71203c18e3..caf6ee8a8e 100644 --- a/docs/d3/dcc/classedash__packager_1_1media_1_1ProgressListener-members.html +++ b/docs/d3/dcc/classedash__packager_1_1media_1_1ProgressListener-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dd0/classedash__packager_1_1media_1_1mp4_1_1BoxReader-members.html b/docs/d3/dd0/classedash__packager_1_1media_1_1mp4_1_1BoxReader-members.html index 706e38b077..56b5aa2be8 100644 --- a/docs/d3/dd0/classedash__packager_1_1media_1_1mp4_1_1BoxReader-members.html +++ b/docs/d3/dd0/classedash__packager_1_1media_1_1mp4_1_1BoxReader-members.html @@ -128,7 +128,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html b/docs/d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html index cd10083aa1..5c14ed419b 100644 --- a/docs/d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html +++ b/docs/d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html @@ -145,7 +145,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 482 of file box_definitions.h.

+

Definition at line 486 of file box_definitions.h.

Member Function Documentation

@@ -171,7 +171,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 1579 of file box_definitions.cc.

+

Definition at line 1607 of file box_definitions.cc.

@@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d3/de4/seek__head_8h_source.html b/docs/d3/de4/seek__head_8h_source.html index a712bbd72d..f378257f04 100644 --- a/docs/d3/de4/seek__head_8h_source.html +++ b/docs/d3/de4/seek__head_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/de7/structedash__packager_1_1media_1_1OnMediaEndParameters.html b/docs/d3/de7/structedash__packager_1_1media_1_1OnMediaEndParameters.html index 110c48691c..13789b04fe 100644 --- a/docs/d3/de7/structedash__packager_1_1media_1_1OnMediaEndParameters.html +++ b/docs/d3/de7/structedash__packager_1_1media_1_1OnMediaEndParameters.html @@ -130,7 +130,7 @@ uint64_t file_size diff --git a/docs/d3/df1/box__reader_8cc_source.html b/docs/d3/df1/box__reader_8cc_source.html index d47f882dd5..d3865ec459 100644 --- a/docs/d3/df1/box__reader_8cc_source.html +++ b/docs/d3/df1/box__reader_8cc_source.html @@ -296,7 +296,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dfa/classedash__packager_1_1MpdBuilder.html b/docs/d3/dfa/classedash__packager_1_1MpdBuilder.html index b5a28baa0a..e81da37170 100644 --- a/docs/d3/dfa/classedash__packager_1_1MpdBuilder.html +++ b/docs/d3/dfa/classedash__packager_1_1MpdBuilder.html @@ -381,7 +381,7 @@ class DynamicMpdBuilderTes diff --git a/docs/d3/dfa/structedash__packager_1_1media_1_1H264SliceHeader-members.html b/docs/d3/dfa/structedash__packager_1_1media_1_1H264SliceHeader-members.html index 485e447482..7d44544cd6 100644 --- a/docs/d3/dfa/structedash__packager_1_1media_1_1H264SliceHeader-members.html +++ b/docs/d3/dfa/structedash__packager_1_1media_1_1H264SliceHeader-members.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d00/mp4_2multi__segment__segmenter_8cc_source.html b/docs/d4/d00/mp4_2multi__segment__segmenter_8cc_source.html index 0592255dc3..2351732357 100644 --- a/docs/d4/d00/mp4_2multi__segment__segmenter_8cc_source.html +++ b/docs/d4/d00/mp4_2multi__segment__segmenter_8cc_source.html @@ -303,7 +303,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d0b/structedash__packager_1_1media_1_1mp4_1_1Media-members.html b/docs/d4/d0b/structedash__packager_1_1media_1_1mp4_1_1Media-members.html index c30c174446..fb0234d788 100644 --- a/docs/d4/d0b/structedash__packager_1_1media_1_1mp4_1_1Media-members.html +++ b/docs/d4/d0b/structedash__packager_1_1media_1_1mp4_1_1Media-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d1d/classedash__packager_1_1media_1_1Muxer.html b/docs/d4/d1d/classedash__packager_1_1media_1_1Muxer.html index 4dd46b56bb..5422b109e5 100644 --- a/docs/d4/d1d/classedash__packager_1_1media_1_1Muxer.html +++ b/docs/d4/d1d/classedash__packager_1_1media_1_1Muxer.html @@ -331,7 +331,7 @@ class MediaStream diff --git a/docs/d4/d37/io__cache_8cc_source.html b/docs/d4/d37/io__cache_8cc_source.html index 6f8e70735a..767e2664dc 100644 --- a/docs/d4/d37/io__cache_8cc_source.html +++ b/docs/d4/d37/io__cache_8cc_source.html @@ -253,7 +253,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d3d/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatio.html b/docs/d4/d3d/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatio.html index 261083d471..de5dcec677 100644 --- a/docs/d4/d3d/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatio.html +++ b/docs/d4/d3d/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatio.html @@ -165,7 +165,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 1036 of file box_definitions.cc.

+

Definition at line 1052 of file box_definitions.cc.

@@ -176,7 +176,7 @@ Additional Inherited Members diff --git a/docs/d4/d43/classedash__packager_1_1media_1_1KeyFetcher.html b/docs/d4/d43/classedash__packager_1_1media_1_1KeyFetcher.html index b0f2a3023d..fe8c38f133 100644 --- a/docs/d4/d43/classedash__packager_1_1media_1_1KeyFetcher.html +++ b/docs/d4/d43/classedash__packager_1_1media_1_1KeyFetcher.html @@ -177,7 +177,7 @@ Public Member Functions diff --git a/docs/d4/d55/classedash__packager_1_1media_1_1H264BitReader.html b/docs/d4/d55/classedash__packager_1_1media_1_1H264BitReader.html index 457c37209d..959b6e1841 100644 --- a/docs/d4/d55/classedash__packager_1_1media_1_1H264BitReader.html +++ b/docs/d4/d55/classedash__packager_1_1media_1_1H264BitReader.html @@ -122,7 +122,7 @@ size_t NumEmulationPrevent diff --git a/docs/d4/d67/structedash__packager_1_1media_1_1mp4_1_1MovieFragment-members.html b/docs/d4/d67/structedash__packager_1_1media_1_1mp4_1_1MovieFragment-members.html index 397c016e25..d3f71d1eae 100644 --- a/docs/d4/d67/structedash__packager_1_1media_1_1mp4_1_1MovieFragment-members.html +++ b/docs/d4/d67/structedash__packager_1_1media_1_1mp4_1_1MovieFragment-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d72/classedash__packager_1_1media_1_1webm_1_1SingleSegmentSegmenter-members.html b/docs/d4/d72/classedash__packager_1_1media_1_1webm_1_1SingleSegmentSegmenter-members.html index 384343fef3..4573c88b1d 100644 --- a/docs/d4/d72/classedash__packager_1_1media_1_1webm_1_1SingleSegmentSegmenter-members.html +++ b/docs/d4/d72/classedash__packager_1_1media_1_1webm_1_1SingleSegmentSegmenter-members.html @@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d8c/classedash__packager_1_1media_1_1MkvWriter.html b/docs/d4/d8c/classedash__packager_1_1media_1_1MkvWriter.html index 9f3f702680..1f6f83dfb1 100644 --- a/docs/d4/d8c/classedash__packager_1_1media_1_1MkvWriter.html +++ b/docs/d4/d8c/classedash__packager_1_1media_1_1MkvWriter.html @@ -372,7 +372,7 @@ Public Member Functions diff --git a/docs/d4/d8f/structedash__packager_1_1media_1_1mp4_1_1MovieHeader-members.html b/docs/d4/d8f/structedash__packager_1_1media_1_1mp4_1_1MovieHeader-members.html index ab9465a304..2b2c589b66 100644 --- a/docs/d4/d8f/structedash__packager_1_1media_1_1mp4_1_1MovieHeader-members.html +++ b/docs/d4/d8f/structedash__packager_1_1media_1_1mp4_1_1MovieHeader-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html b/docs/d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html index 001277e2c3..918c2a3a1c 100644 --- a/docs/d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html +++ b/docs/d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html @@ -235,7 +235,7 @@ Public Member Functions diff --git a/docs/d4/d92/structedash__packager_1_1media_1_1mp4_1_1MediaData.html b/docs/d4/d92/structedash__packager_1_1media_1_1mp4_1_1MediaData.html index 9665261636..847ae9dbce 100644 --- a/docs/d4/d92/structedash__packager_1_1media_1_1mp4_1_1MediaData.html +++ b/docs/d4/d92/structedash__packager_1_1media_1_1mp4_1_1MediaData.html @@ -136,7 +136,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 674 of file box_definitions.h.

+

Definition at line 678 of file box_definitions.h.

Member Function Documentation

@@ -162,7 +162,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 2172 of file box_definitions.cc.

+

Definition at line 2200 of file box_definitions.cc.

@@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d4/d93/structedash__packager_1_1media_1_1H264SEIMessage.html b/docs/d4/d93/structedash__packager_1_1media_1_1H264SEIMessage.html index 497e915313..76f81afa0a 100644 --- a/docs/d4/d93/structedash__packager_1_1media_1_1H264SEIMessage.html +++ b/docs/d4/d93/structedash__packager_1_1media_1_1H264SEIMessage.html @@ -127,7 +127,7 @@ union { diff --git a/docs/d4/d9b/classedash__packager_1_1AdaptationSet-members.html b/docs/d4/d9b/classedash__packager_1_1AdaptationSet-members.html index 1d945ab69b..bea8eb95ed 100644 --- a/docs/d4/d9b/classedash__packager_1_1AdaptationSet-members.html +++ b/docs/d4/d9b/classedash__packager_1_1AdaptationSet-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html b/docs/d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html index ad7d8ba42b..3262042fb6 100644 --- a/docs/d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html +++ b/docs/d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html @@ -183,7 +183,7 @@ static const size_t  diff --git a/docs/d4/da4/classedash__packager_1_1media_1_1AesCbcCtsEncryptor-members.html b/docs/d4/da4/classedash__packager_1_1media_1_1AesCbcCtsEncryptor-members.html index ab7893517c..15be4469c5 100644 --- a/docs/d4/da4/classedash__packager_1_1media_1_1AesCbcCtsEncryptor-members.html +++ b/docs/d4/da4/classedash__packager_1_1media_1_1AesCbcCtsEncryptor-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/db2/cluster__builder_8h_source.html b/docs/d4/db2/cluster__builder_8h_source.html index 10764b0a4c..315690a643 100644 --- a/docs/d4/db2/cluster__builder_8h_source.html +++ b/docs/d4/db2/cluster__builder_8h_source.html @@ -176,7 +176,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dca/structedash__packager_1_1media_1_1H264SEIRecoveryPoint.html b/docs/d4/dca/structedash__packager_1_1media_1_1H264SEIRecoveryPoint.html index 32220c0e0d..42e4818eec 100644 --- a/docs/d4/dca/structedash__packager_1_1media_1_1H264SEIRecoveryPoint.html +++ b/docs/d4/dca/structedash__packager_1_1media_1_1H264SEIRecoveryPoint.html @@ -118,7 +118,7 @@ int changing_slice_group_i diff --git a/docs/d4/dcb/classedash__packager_1_1media_1_1Status-members.html b/docs/d4/dcb/classedash__packager_1_1media_1_1Status-members.html index 29de2cc931..b86c68b95d 100644 --- a/docs/d4/dcb/classedash__packager_1_1media_1_1Status-members.html +++ b/docs/d4/dcb/classedash__packager_1_1media_1_1Status-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html b/docs/d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html index 5b41b2f6b8..54f4c3f4d9 100644 --- a/docs/d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html +++ b/docs/d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html @@ -174,7 +174,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 343 of file box_definitions.cc.

+

Definition at line 359 of file box_definitions.cc.

@@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/d4/dcd/classedash__packager_1_1media_1_1OffsetByteQueue-members.html b/docs/d4/dcd/classedash__packager_1_1media_1_1OffsetByteQueue-members.html index 8aba78f1dd..32552ef628 100644 --- a/docs/d4/dcd/classedash__packager_1_1media_1_1OffsetByteQueue-members.html +++ b/docs/d4/dcd/classedash__packager_1_1media_1_1OffsetByteQueue-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dce/structedash__packager_1_1media_1_1mp4_1_1SegmentReference.html b/docs/d4/dce/structedash__packager_1_1media_1_1mp4_1_1SegmentReference.html index c77d1ede5b..14232a0db5 100644 --- a/docs/d4/dce/structedash__packager_1_1media_1_1mp4_1_1SegmentReference.html +++ b/docs/d4/dce/structedash__packager_1_1media_1_1mp4_1_1SegmentReference.html @@ -136,14 +136,14 @@ uint64_t earliest_presenta

Detailed Description

-

Definition at line 641 of file box_definitions.h.

+

Definition at line 645 of file box_definitions.h.


The documentation for this struct was generated from the following file: diff --git a/docs/d4/dd3/bit__reader_8h_source.html b/docs/d4/dd3/bit__reader_8h_source.html index b7d3920680..aaf2cfeae4 100644 --- a/docs/d4/dd3/bit__reader_8h_source.html +++ b/docs/d4/dd3/bit__reader_8h_source.html @@ -178,7 +178,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html b/docs/d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html index 313f7f5c20..8f4feb3583 100644 --- a/docs/d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html +++ b/docs/d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html @@ -160,7 +160,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 619 of file box_definitions.h.

+

Definition at line 623 of file box_definitions.h.

Member Function Documentation

@@ -186,7 +186,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 2034 of file box_definitions.cc.

+

Definition at line 2062 of file box_definitions.cc.

@@ -197,7 +197,7 @@ Additional Inherited Members diff --git a/docs/d4/dde/webvtt__util_8h_source.html b/docs/d4/dde/webvtt__util_8h_source.html index a1ca0885e8..3e6e10779d 100644 --- a/docs/d4/dde/webvtt__util_8h_source.html +++ b/docs/d4/dde/webvtt__util_8h_source.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/de4/structedash__packager_1_1media_1_1SubsampleEntry.html b/docs/d4/de4/structedash__packager_1_1media_1_1SubsampleEntry.html index 9295133c8c..8a322d0903 100644 --- a/docs/d4/de4/structedash__packager_1_1media_1_1SubsampleEntry.html +++ b/docs/d4/de4/structedash__packager_1_1media_1_1SubsampleEntry.html @@ -115,7 +115,7 @@ uint32_t cipher_bytes< diff --git a/docs/d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html b/docs/d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html index 33c89396cb..65256fbab7 100644 --- a/docs/d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html +++ b/docs/d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html @@ -225,7 +225,7 @@ Public Member Functions diff --git a/docs/d4/de7/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html b/docs/d4/de7/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html index 2a1f77030e..1beaa1b0d2 100644 --- a/docs/d4/de7/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html +++ b/docs/d4/de7/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/df5/request__signer_8cc_source.html b/docs/d4/df5/request__signer_8cc_source.html index 12b0c83399..38f2ed7538 100644 --- a/docs/d4/df5/request__signer_8cc_source.html +++ b/docs/d4/df5/request__signer_8cc_source.html @@ -176,7 +176,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/df9/structedash__packager_1_1MpdOptions-members.html b/docs/d4/df9/structedash__packager_1_1MpdOptions-members.html index 82ca45fda1..c80fe493dd 100644 --- a/docs/d4/df9/structedash__packager_1_1MpdOptions-members.html +++ b/docs/d4/df9/structedash__packager_1_1MpdOptions-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dff/webm__media__parser_8cc_source.html b/docs/d4/dff/webm__media__parser_8cc_source.html index a0fc8ea8eb..beeb95dc8a 100644 --- a/docs/d4/dff/webm__media__parser_8cc_source.html +++ b/docs/d4/dff/webm__media__parser_8cc_source.html @@ -335,7 +335,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html b/docs/d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html index b72ff4fe0d..7cec866365 100644 --- a/docs/d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html +++ b/docs/d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html @@ -501,7 +501,7 @@ template<class T > diff --git a/docs/d5/d15/producer__consumer__queue_8h_source.html b/docs/d5/d15/producer__consumer__queue_8h_source.html index fbd363769b..8112d4fd93 100644 --- a/docs/d5/d15/producer__consumer__queue_8h_source.html +++ b/docs/d5/d15/producer__consumer__queue_8h_source.html @@ -374,7 +374,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d18/structedash__packager_1_1media_1_1H264NALU-members.html b/docs/d5/d18/structedash__packager_1_1media_1_1H264NALU-members.html index 4e91488143..3c2f0cdf23 100644 --- a/docs/d5/d18/structedash__packager_1_1media_1_1H264NALU-members.html +++ b/docs/d5/d18/structedash__packager_1_1media_1_1H264NALU-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d18/structedash__packager_1_1media_1_1mp4_1_1CueIDBox-members.html b/docs/d5/d18/structedash__packager_1_1media_1_1mp4_1_1CueIDBox-members.html index 8499b5ff5f..44e5ddf7dd 100644 --- a/docs/d5/d18/structedash__packager_1_1media_1_1mp4_1_1CueIDBox-members.html +++ b/docs/d5/d18/structedash__packager_1_1media_1_1mp4_1_1CueIDBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d1a/ts__section_8h_source.html b/docs/d5/d1a/ts__section_8h_source.html index c896033e64..285fbe0498 100644 --- a/docs/d5/d1a/ts__section_8h_source.html +++ b/docs/d5/d1a/ts__section_8h_source.html @@ -134,7 +134,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d1f/classedash__packager_1_1media_1_1BufferReader-members.html b/docs/d5/d1f/classedash__packager_1_1media_1_1BufferReader-members.html index 61cca66f02..6001e19755 100644 --- a/docs/d5/d1f/classedash__packager_1_1media_1_1BufferReader-members.html +++ b/docs/d5/d1f/classedash__packager_1_1media_1_1BufferReader-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d26/classedash__packager_1_1media_1_1MediaParser-members.html b/docs/d5/d26/classedash__packager_1_1media_1_1MediaParser-members.html index 7f9ec9d92e..4cbbae5504 100644 --- a/docs/d5/d26/classedash__packager_1_1media_1_1MediaParser-members.html +++ b/docs/d5/d26/classedash__packager_1_1media_1_1MediaParser-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d27/key__fetcher_8cc_source.html b/docs/d5/d27/key__fetcher_8cc_source.html index 6119240d3a..ce49d1c234 100644 --- a/docs/d5/d27/key__fetcher_8cc_source.html +++ b/docs/d5/d27/key__fetcher_8cc_source.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html b/docs/d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html index 1ad5412e80..9f7e065a1f 100644 --- a/docs/d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html +++ b/docs/d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html @@ -192,7 +192,7 @@ static const size_t kUnitS diff --git a/docs/d5/d40/webm_2single__segment__segmenter_8h_source.html b/docs/d5/d40/webm_2single__segment__segmenter_8h_source.html index 38e4948acc..3677317f7f 100644 --- a/docs/d5/d40/webm_2single__segment__segmenter_8h_source.html +++ b/docs/d5/d40/webm_2single__segment__segmenter_8h_source.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d41/hevc__decoder__configuration_8cc_source.html b/docs/d5/d41/hevc__decoder__configuration_8cc_source.html index 0cad240c4c..e547dd6fb7 100644 --- a/docs/d5/d41/hevc__decoder__configuration_8cc_source.html +++ b/docs/d5/d41/hevc__decoder__configuration_8cc_source.html @@ -232,7 +232,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d4a/classedash__packager_1_1media_1_1mp2t_1_1TsPacket-members.html b/docs/d5/d4a/classedash__packager_1_1media_1_1mp2t_1_1TsPacket-members.html index 561f3607cc..8f417b0ceb 100644 --- a/docs/d5/d4a/classedash__packager_1_1media_1_1mp2t_1_1TsPacket-members.html +++ b/docs/d5/d4a/classedash__packager_1_1media_1_1mp2t_1_1TsPacket-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d4d/box_8cc_source.html b/docs/d5/d4d/box_8cc_source.html index 398e287bc5..46f40f399c 100644 --- a/docs/d5/d4d/box_8cc_source.html +++ b/docs/d5/d4d/box_8cc_source.html @@ -199,7 +199,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d52/ts__section__pes_8h_source.html b/docs/d5/d52/ts__section__pes_8h_source.html index 46d07f5cc8..184c1e1587 100644 --- a/docs/d5/d52/ts__section__pes_8h_source.html +++ b/docs/d5/d52/ts__section__pes_8h_source.html @@ -161,7 +161,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d54/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig-members.html b/docs/d5/d54/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig-members.html index 6d257b69d2..0e8dc0c425 100644 --- a/docs/d5/d54/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig-members.html +++ b/docs/d5/d54/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html b/docs/d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html index 3913552e82..58a8b678ef 100644 --- a/docs/d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html +++ b/docs/d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html @@ -224,7 +224,7 @@ Static Public Member Functions diff --git a/docs/d5/d63/network__util_8cc_source.html b/docs/d5/d63/network__util_8cc_source.html index 288f76795f..965af0190e 100644 --- a/docs/d5/d63/network__util_8cc_source.html +++ b/docs/d5/d63/network__util_8cc_source.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d6e/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html b/docs/d5/d6e/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html index 16630b4c72..1d6c790b36 100644 --- a/docs/d5/d6e/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html +++ b/docs/d5/d6e/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d6f/vlog__flags_8cc_source.html b/docs/d5/d6f/vlog__flags_8cc_source.html index 74c2aaef64..4694b85afb 100644 --- a/docs/d5/d6f/vlog__flags_8cc_source.html +++ b/docs/d5/d6f/vlog__flags_8cc_source.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d73/vp__codec__configuration_8h_source.html b/docs/d5/d73/vp__codec__configuration_8h_source.html index eb8f130171..c994b2a228 100644 --- a/docs/d5/d73/vp__codec__configuration_8h_source.html +++ b/docs/d5/d73/vp__codec__configuration_8h_source.html @@ -192,7 +192,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d78/structedash__packager_1_1media_1_1mp4_1_1SampleEncryption.html b/docs/d5/d78/structedash__packager_1_1media_1_1mp4_1_1SampleEncryption.html index 4c258342d7..73f898dce0 100644 --- a/docs/d5/d78/structedash__packager_1_1media_1_1mp4_1_1SampleEncryption.html +++ b/docs/d5/d78/structedash__packager_1_1media_1_1mp4_1_1SampleEncryption.html @@ -186,7 +186,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 262 of file box_definitions.cc.

+

Definition at line 278 of file box_definitions.cc.

@@ -223,7 +223,7 @@ Additional Inherited Members
Returns
true on success, false otherwise.
-

Definition at line 311 of file box_definitions.cc.

+

Definition at line 327 of file box_definitions.cc.

@@ -250,7 +250,7 @@ Additional Inherited Members diff --git a/docs/d5/d7a/structedash__packager_1_1Element.html b/docs/d5/d7a/structedash__packager_1_1Element.html index 938aaf86e8..b2b209bfba 100644 --- a/docs/d5/d7a/structedash__packager_1_1Element.html +++ b/docs/d5/d7a/structedash__packager_1_1Element.html @@ -120,7 +120,7 @@ std::vector< diff --git a/docs/d5/d7b/box__definitions_8h_source.html b/docs/d5/d7b/box__definitions_8h_source.html index 53492caf60..ea889b6205 100644 --- a/docs/d5/d7b/box__definitions_8h_source.html +++ b/docs/d5/d7b/box__definitions_8h_source.html @@ -335,558 +335,562 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
268 struct DTSSpecific : Box {
269  DECLARE_BOX_METHODS(DTSSpecific);
270 
-
271  std::vector<uint8_t> data;
-
272 };
-
273 
- -
275  DECLARE_BOX_METHODS(AudioSampleEntry);
-
276  // Returns actual format of this sample entry.
-
277  FourCC GetActualFormat() const {
-
278  return format == FOURCC_ENCA ? sinf.format.format : format;
-
279  }
-
280 
-
281  FourCC format;
-
282  uint16_t data_reference_index;
-
283  uint16_t channelcount;
-
284  uint16_t samplesize;
-
285  uint32_t samplerate;
-
286 
- - -
289  DTSSpecific ddts;
-
290 };
-
291 
- -
293  DECLARE_BOX_METHODS(WebVTTConfigurationBox);
-
294  std::string config;
-
295 };
-
296 
- -
298  DECLARE_BOX_METHODS(WebVTTSourceLabelBox);
-
299  std::string source_label;
-
300 };
-
301 
- -
303  DECLARE_BOX_METHODS(WVTTSampleEntry);
-
304 
-
305  uint16_t data_reference_index;
-
306 
-
307  WebVTTConfigurationBox config;
-
308  WebVTTSourceLabelBox label;
-
309  // Optional MPEG4BitRateBox.
-
310 };
-
311 
- -
313  DECLARE_BOX_METHODS(SampleDescription);
-
314 
-
315  TrackType type;
-
316  // TODO(kqyang): Clean up the code to have one single member, e.g. by creating
-
317  // SampleEntry struct, std::vector<SampleEntry> sample_entries.
-
318  std::vector<VideoSampleEntry> video_entries;
-
319  std::vector<AudioSampleEntry> audio_entries;
-
320  std::vector<WVTTSampleEntry> wvtt_entries;
-
321 };
-
322 
-
323 struct DecodingTime {
-
324  uint32_t sample_count;
-
325  uint32_t sample_delta;
-
326 };
-
327 
-
328 // stts.
- -
330  DECLARE_BOX_METHODS(DecodingTimeToSample);
+
271  uint32_t sampling_frequency;
+
272  uint32_t max_bitrate;
+
273  uint32_t avg_bitrate;
+
274  uint8_t pcm_sample_depth;
+
275  std::vector<uint8_t> extra_data;
+
276 };
+
277 
+ +
279  DECLARE_BOX_METHODS(AudioSampleEntry);
+
280  // Returns actual format of this sample entry.
+
281  FourCC GetActualFormat() const {
+
282  return format == FOURCC_ENCA ? sinf.format.format : format;
+
283  }
+
284 
+
285  FourCC format;
+
286  uint16_t data_reference_index;
+
287  uint16_t channelcount;
+
288  uint16_t samplesize;
+
289  uint32_t samplerate;
+
290 
+ + +
293  DTSSpecific ddts;
+
294 };
+
295 
+ +
297  DECLARE_BOX_METHODS(WebVTTConfigurationBox);
+
298  std::string config;
+
299 };
+
300 
+ +
302  DECLARE_BOX_METHODS(WebVTTSourceLabelBox);
+
303  std::string source_label;
+
304 };
+
305 
+ +
307  DECLARE_BOX_METHODS(WVTTSampleEntry);
+
308 
+
309  uint16_t data_reference_index;
+
310 
+
311  WebVTTConfigurationBox config;
+
312  WebVTTSourceLabelBox label;
+
313  // Optional MPEG4BitRateBox.
+
314 };
+
315 
+ +
317  DECLARE_BOX_METHODS(SampleDescription);
+
318 
+
319  TrackType type;
+
320  // TODO(kqyang): Clean up the code to have one single member, e.g. by creating
+
321  // SampleEntry struct, std::vector<SampleEntry> sample_entries.
+
322  std::vector<VideoSampleEntry> video_entries;
+
323  std::vector<AudioSampleEntry> audio_entries;
+
324  std::vector<WVTTSampleEntry> wvtt_entries;
+
325 };
+
326 
+
327 struct DecodingTime {
+
328  uint32_t sample_count;
+
329  uint32_t sample_delta;
+
330 };
331 
-
332  std::vector<DecodingTime> decoding_time;
-
333 };
-
334 
- -
336  uint32_t sample_count;
-
337  // If version == 0, sample_offset is uint32_t;
-
338  // If version == 1, sample_offset is int32_t.
-
339  // Use int64_t so both can be supported properly.
-
340  int64_t sample_offset;
-
341 };
-
342 
-
343 // ctts. Optional.
- -
345  DECLARE_BOX_METHODS(CompositionTimeToSample);
+
332 // stts.
+ +
334  DECLARE_BOX_METHODS(DecodingTimeToSample);
+
335 
+
336  std::vector<DecodingTime> decoding_time;
+
337 };
+
338 
+ +
340  uint32_t sample_count;
+
341  // If version == 0, sample_offset is uint32_t;
+
342  // If version == 1, sample_offset is int32_t.
+
343  // Use int64_t so both can be supported properly.
+
344  int64_t sample_offset;
+
345 };
346 
-
347  std::vector<CompositionOffset> composition_offset;
-
348 };
-
349 
-
350 struct ChunkInfo {
-
351  uint32_t first_chunk;
-
352  uint32_t samples_per_chunk;
-
353  uint32_t sample_description_index;
-
354 };
-
355 
-
356 // stsc.
- -
358  DECLARE_BOX_METHODS(SampleToChunk);
+
347 // ctts. Optional.
+ +
349  DECLARE_BOX_METHODS(CompositionTimeToSample);
+
350 
+
351  std::vector<CompositionOffset> composition_offset;
+
352 };
+
353 
+
354 struct ChunkInfo {
+
355  uint32_t first_chunk;
+
356  uint32_t samples_per_chunk;
+
357  uint32_t sample_description_index;
+
358 };
359 
-
360  std::vector<ChunkInfo> chunk_info;
-
361 };
-
362 
-
363 // stsz.
-
364 struct SampleSize : FullBox {
-
365  DECLARE_BOX_METHODS(SampleSize);
+
360 // stsc.
+ +
362  DECLARE_BOX_METHODS(SampleToChunk);
+
363 
+
364  std::vector<ChunkInfo> chunk_info;
+
365 };
366 
-
367  uint32_t sample_size;
-
368  uint32_t sample_count;
-
369  std::vector<uint32_t> sizes;
-
370 };
-
371 
-
372 // stz2.
- -
374  DECLARE_BOX_METHODS(CompactSampleSize);
+
367 // stsz.
+
368 struct SampleSize : FullBox {
+
369  DECLARE_BOX_METHODS(SampleSize);
+
370 
+
371  uint32_t sample_size;
+
372  uint32_t sample_count;
+
373  std::vector<uint32_t> sizes;
+
374 };
375 
-
376  uint8_t field_size;
-
377  std::vector<uint32_t> sizes;
-
378 };
+
376 // stz2.
+ +
378  DECLARE_BOX_METHODS(CompactSampleSize);
379 
-
380 // co64.
- -
382  DECLARE_BOX_METHODS(ChunkLargeOffset);
+
380  uint8_t field_size;
+
381  std::vector<uint32_t> sizes;
+
382 };
383 
-
384  std::vector<uint64_t> offsets;
-
385 };
-
386 
-
387 // stco.
- -
389  DECLARE_BOX_METHODS(ChunkOffset);
-
390 };
-
391 
-
392 // stss. Optional.
-
393 struct SyncSample : FullBox {
-
394  DECLARE_BOX_METHODS(SyncSample);
+
384 // co64.
+ +
386  DECLARE_BOX_METHODS(ChunkLargeOffset);
+
387 
+
388  std::vector<uint64_t> offsets;
+
389 };
+
390 
+
391 // stco.
+ +
393  DECLARE_BOX_METHODS(ChunkOffset);
+
394 };
395 
-
396  std::vector<uint32_t> sample_number;
-
397 };
-
398 
-
399 struct SampleTable : Box {
-
400  DECLARE_BOX_METHODS(SampleTable);
-
401 
-
402  SampleDescription description;
-
403  DecodingTimeToSample decoding_time_to_sample;
-
404  CompositionTimeToSample composition_time_to_sample;
-
405  SampleToChunk sample_to_chunk;
-
406  // Either SampleSize or CompactSampleSize must present. Store in SampleSize.
-
407  SampleSize sample_size;
-
408  // Either ChunkOffset or ChunkLargeOffset must present. Store in
-
409  // ChunkLargeOffset.
-
410  ChunkLargeOffset chunk_large_offset;
-
411  SyncSample sync_sample;
-
412 };
-
413 
- -
415  DECLARE_BOX_METHODS(MediaHeader);
-
416 
-
417  uint64_t creation_time;
-
418  uint64_t modification_time;
-
419  uint32_t timescale;
-
420  uint64_t duration;
-
421  // 3-char language code + 1 null terminating char.
-
422  char language[4];
-
423 };
-
424 
- -
426  DECLARE_BOX_METHODS(VideoMediaHeader);
-
427 
-
428  uint16_t graphicsmode;
-
429  uint16_t opcolor_red;
-
430  uint16_t opcolor_green;
-
431  uint16_t opcolor_blue;
-
432 };
-
433 
- -
435  DECLARE_BOX_METHODS(SoundMediaHeader);
-
436 
-
437  uint16_t balance;
-
438 };
-
439 
- -
441  DECLARE_BOX_METHODS(SubtitleMediaHeader);
+
396 // stss. Optional.
+
397 struct SyncSample : FullBox {
+
398  DECLARE_BOX_METHODS(SyncSample);
+
399 
+
400  std::vector<uint32_t> sample_number;
+
401 };
+
402 
+
403 struct SampleTable : Box {
+
404  DECLARE_BOX_METHODS(SampleTable);
+
405 
+
406  SampleDescription description;
+
407  DecodingTimeToSample decoding_time_to_sample;
+
408  CompositionTimeToSample composition_time_to_sample;
+
409  SampleToChunk sample_to_chunk;
+
410  // Either SampleSize or CompactSampleSize must present. Store in SampleSize.
+
411  SampleSize sample_size;
+
412  // Either ChunkOffset or ChunkLargeOffset must present. Store in
+
413  // ChunkLargeOffset.
+
414  ChunkLargeOffset chunk_large_offset;
+
415  SyncSample sync_sample;
+
416 };
+
417 
+ +
419  DECLARE_BOX_METHODS(MediaHeader);
+
420 
+
421  uint64_t creation_time;
+
422  uint64_t modification_time;
+
423  uint32_t timescale;
+
424  uint64_t duration;
+
425  // 3-char language code + 1 null terminating char.
+
426  char language[4];
+
427 };
+
428 
+ +
430  DECLARE_BOX_METHODS(VideoMediaHeader);
+
431 
+
432  uint16_t graphicsmode;
+
433  uint16_t opcolor_red;
+
434  uint16_t opcolor_green;
+
435  uint16_t opcolor_blue;
+
436 };
+
437 
+ +
439  DECLARE_BOX_METHODS(SoundMediaHeader);
+
440 
+
441  uint16_t balance;
442 };
443 
- -
445  DECLARE_BOX_METHODS(DataEntryUrl);
-
446 
-
447  std::vector<uint8_t> location;
-
448 };
-
449 
- -
451  DECLARE_BOX_METHODS(DataReference);
-
452 
-
453  // data entry can be either url or urn box. Fix to url box for now.
-
454  std::vector<DataEntryUrl> data_entry;
-
455 };
+ +
445  DECLARE_BOX_METHODS(SubtitleMediaHeader);
+
446 };
+
447 
+ +
449  DECLARE_BOX_METHODS(DataEntryUrl);
+
450 
+
451  std::vector<uint8_t> location;
+
452 };
+
453 
+ +
455  DECLARE_BOX_METHODS(DataReference);
456 
- -
458  DECLARE_BOX_METHODS(DataInformation);
-
459 
-
460  DataReference dref;
-
461 };
-
462 
- -
464  DECLARE_BOX_METHODS(MediaInformation);
-
465 
-
466  DataInformation dinf;
-
467  SampleTable sample_table;
-
468  // Exactly one specific meida header shall be present, vmhd, smhd, hmhd, nmhd.
-
469  VideoMediaHeader vmhd;
-
470  SoundMediaHeader smhd;
-
471  SubtitleMediaHeader sthd;
-
472 };
-
473 
-
474 struct Media : Box {
-
475  DECLARE_BOX_METHODS(Media);
-
476 
-
477  MediaHeader header;
-
478  HandlerReference handler;
-
479  MediaInformation information;
-
480 };
-
481 
-
482 struct Track : Box {
-
483  DECLARE_BOX_METHODS(Track);
-
484 
-
485  TrackHeader header;
-
486  Media media;
-
487  Edit edit;
-
488  SampleEncryption sample_encryption;
-
489 };
-
490 
- -
492  DECLARE_BOX_METHODS(MovieExtendsHeader);
-
493 
-
494  uint64_t fragment_duration;
-
495 };
-
496 
- -
498  DECLARE_BOX_METHODS(TrackExtends);
-
499 
-
500  uint32_t track_id;
-
501  uint32_t default_sample_description_index;
-
502  uint32_t default_sample_duration;
-
503  uint32_t default_sample_size;
-
504  uint32_t default_sample_flags;
-
505 };
-
506 
-
507 struct MovieExtends : Box {
-
508  DECLARE_BOX_METHODS(MovieExtends);
-
509 
-
510  MovieExtendsHeader header;
-
511  std::vector<TrackExtends> tracks;
-
512 };
+
457  // data entry can be either url or urn box. Fix to url box for now.
+
458  std::vector<DataEntryUrl> data_entry;
+
459 };
+
460 
+ +
462  DECLARE_BOX_METHODS(DataInformation);
+
463 
+
464  DataReference dref;
+
465 };
+
466 
+ +
468  DECLARE_BOX_METHODS(MediaInformation);
+
469 
+
470  DataInformation dinf;
+
471  SampleTable sample_table;
+
472  // Exactly one specific meida header shall be present, vmhd, smhd, hmhd, nmhd.
+
473  VideoMediaHeader vmhd;
+
474  SoundMediaHeader smhd;
+
475  SubtitleMediaHeader sthd;
+
476 };
+
477 
+
478 struct Media : Box {
+
479  DECLARE_BOX_METHODS(Media);
+
480 
+
481  MediaHeader header;
+
482  HandlerReference handler;
+
483  MediaInformation information;
+
484 };
+
485 
+
486 struct Track : Box {
+
487  DECLARE_BOX_METHODS(Track);
+
488 
+
489  TrackHeader header;
+
490  Media media;
+
491  Edit edit;
+
492  SampleEncryption sample_encryption;
+
493 };
+
494 
+ +
496  DECLARE_BOX_METHODS(MovieExtendsHeader);
+
497 
+
498  uint64_t fragment_duration;
+
499 };
+
500 
+ +
502  DECLARE_BOX_METHODS(TrackExtends);
+
503 
+
504  uint32_t track_id;
+
505  uint32_t default_sample_description_index;
+
506  uint32_t default_sample_duration;
+
507  uint32_t default_sample_size;
+
508  uint32_t default_sample_flags;
+
509 };
+
510 
+
511 struct MovieExtends : Box {
+
512  DECLARE_BOX_METHODS(MovieExtends);
513 
-
514 struct Movie : Box {
-
515  DECLARE_BOX_METHODS(Movie);
-
516 
-
517  MovieHeader header;
-
518  MovieExtends extends;
-
519  std::vector<Track> tracks;
-
520  std::vector<ProtectionSystemSpecificHeader> pssh;
-
521 };
-
522 
- -
524  DECLARE_BOX_METHODS(TrackFragmentDecodeTime);
-
525 
-
526  uint64_t decode_time;
-
527 };
-
528 
- -
530  DECLARE_BOX_METHODS(MovieFragmentHeader);
-
531 
-
532  uint32_t sequence_number;
-
533 };
-
534 
- -
536  enum TrackFragmentFlagsMasks {
-
537  kBaseDataOffsetPresentMask = 0x000001,
-
538  kSampleDescriptionIndexPresentMask = 0x000002,
-
539  kDefaultSampleDurationPresentMask = 0x000008,
-
540  kDefaultSampleSizePresentMask = 0x000010,
-
541  kDefaultSampleFlagsPresentMask = 0x000020,
-
542  kDurationIsEmptyMask = 0x010000,
-
543  kDefaultBaseIsMoofMask = 0x020000,
-
544  };
-
545 
-
546  enum SampleFlagsMasks {
-
547  kReservedMask = 0xFC000000,
-
548  kSampleDependsOnMask = 0x03000000,
-
549  kSampleIsDependedOnMask = 0x00C00000,
-
550  kSampleHasRedundancyMask = 0x00300000,
-
551  kSamplePaddingValueMask = 0x000E0000,
-
552  kNonKeySampleMask = 0x00010000,
-
553  kSampleDegradationPriorityMask = 0x0000FFFF,
-
554  };
-
555 
-
556  DECLARE_BOX_METHODS(TrackFragmentHeader);
-
557 
-
558  uint32_t track_id;
-
559  uint32_t sample_description_index;
-
560  uint32_t default_sample_duration;
-
561  uint32_t default_sample_size;
-
562  uint32_t default_sample_flags;
-
563 };
-
564 
- -
566  enum TrackFragmentFlagsMasks {
-
567  kDataOffsetPresentMask = 0x000001,
-
568  kFirstSampleFlagsPresentMask = 0x000004,
-
569  kSampleDurationPresentMask = 0x000100,
-
570  kSampleSizePresentMask = 0x000200,
-
571  kSampleFlagsPresentMask = 0x000400,
-
572  kSampleCompTimeOffsetsPresentMask = 0x000800,
-
573  };
-
574 
-
575  DECLARE_BOX_METHODS(TrackFragmentRun);
-
576 
-
577  uint32_t sample_count;
-
578  uint32_t data_offset;
-
579  std::vector<uint32_t> sample_flags;
-
580  std::vector<uint32_t> sample_sizes;
-
581  std::vector<uint32_t> sample_durations;
-
582  std::vector<int64_t> sample_composition_time_offsets;
-
583 };
-
584 
- -
586  enum GroupDescriptionIndexBase {
-
587  kTrackGroupDescriptionIndexBase = 0,
-
588  kTrackFragmentGroupDescriptionIndexBase = 0x10000,
-
589  };
-
590 
-
591  uint32_t sample_count;
-
592  uint32_t group_description_index;
-
593 };
+
514  MovieExtendsHeader header;
+
515  std::vector<TrackExtends> tracks;
+
516 };
+
517 
+
518 struct Movie : Box {
+
519  DECLARE_BOX_METHODS(Movie);
+
520 
+
521  MovieHeader header;
+
522  MovieExtends extends;
+
523  std::vector<Track> tracks;
+
524  std::vector<ProtectionSystemSpecificHeader> pssh;
+
525 };
+
526 
+ +
528  DECLARE_BOX_METHODS(TrackFragmentDecodeTime);
+
529 
+
530  uint64_t decode_time;
+
531 };
+
532 
+ +
534  DECLARE_BOX_METHODS(MovieFragmentHeader);
+
535 
+
536  uint32_t sequence_number;
+
537 };
+
538 
+ +
540  enum TrackFragmentFlagsMasks {
+
541  kBaseDataOffsetPresentMask = 0x000001,
+
542  kSampleDescriptionIndexPresentMask = 0x000002,
+
543  kDefaultSampleDurationPresentMask = 0x000008,
+
544  kDefaultSampleSizePresentMask = 0x000010,
+
545  kDefaultSampleFlagsPresentMask = 0x000020,
+
546  kDurationIsEmptyMask = 0x010000,
+
547  kDefaultBaseIsMoofMask = 0x020000,
+
548  };
+
549 
+
550  enum SampleFlagsMasks {
+
551  kReservedMask = 0xFC000000,
+
552  kSampleDependsOnMask = 0x03000000,
+
553  kSampleIsDependedOnMask = 0x00C00000,
+
554  kSampleHasRedundancyMask = 0x00300000,
+
555  kSamplePaddingValueMask = 0x000E0000,
+
556  kNonKeySampleMask = 0x00010000,
+
557  kSampleDegradationPriorityMask = 0x0000FFFF,
+
558  };
+
559 
+
560  DECLARE_BOX_METHODS(TrackFragmentHeader);
+
561 
+
562  uint32_t track_id;
+
563  uint32_t sample_description_index;
+
564  uint32_t default_sample_duration;
+
565  uint32_t default_sample_size;
+
566  uint32_t default_sample_flags;
+
567 };
+
568 
+ +
570  enum TrackFragmentFlagsMasks {
+
571  kDataOffsetPresentMask = 0x000001,
+
572  kFirstSampleFlagsPresentMask = 0x000004,
+
573  kSampleDurationPresentMask = 0x000100,
+
574  kSampleSizePresentMask = 0x000200,
+
575  kSampleFlagsPresentMask = 0x000400,
+
576  kSampleCompTimeOffsetsPresentMask = 0x000800,
+
577  };
+
578 
+
579  DECLARE_BOX_METHODS(TrackFragmentRun);
+
580 
+
581  uint32_t sample_count;
+
582  uint32_t data_offset;
+
583  std::vector<uint32_t> sample_flags;
+
584  std::vector<uint32_t> sample_sizes;
+
585  std::vector<uint32_t> sample_durations;
+
586  std::vector<int64_t> sample_composition_time_offsets;
+
587 };
+
588 
+ +
590  enum GroupDescriptionIndexBase {
+
591  kTrackGroupDescriptionIndexBase = 0,
+
592  kTrackFragmentGroupDescriptionIndexBase = 0x10000,
+
593  };
594 
- -
596  DECLARE_BOX_METHODS(SampleToGroup);
-
597 
-
598  uint32_t grouping_type;
-
599  uint32_t grouping_type_parameter; // Version 1 only.
-
600  std::vector<SampleToGroupEntry> entries;
-
601 };
-
602 
- - - +
595  uint32_t sample_count;
+
596  uint32_t group_description_index;
+
597 };
+
598 
+ +
600  DECLARE_BOX_METHODS(SampleToGroup);
+
601 
+
602  uint32_t grouping_type;
+
603  uint32_t grouping_type_parameter; // Version 1 only.
+
604  std::vector<SampleToGroupEntry> entries;
+
605 };
606 
-
607  bool is_encrypted;
-
608  uint8_t iv_size;
-
609  std::vector<uint8_t> key_id;
-
610 };
-
611 
- -
613  DECLARE_BOX_METHODS(SampleGroupDescription);
-
614 
-
615  uint32_t grouping_type;
-
616  std::vector<CencSampleEncryptionInfoEntry> entries;
-
617 };
+ + + +
610 
+
611  bool is_encrypted;
+
612  uint8_t iv_size;
+
613  std::vector<uint8_t> key_id;
+
614 };
+
615 
+ +
617  DECLARE_BOX_METHODS(SampleGroupDescription);
618 
-
619 struct TrackFragment : Box {
-
620  DECLARE_BOX_METHODS(TrackFragment);
-
621 
-
622  TrackFragmentHeader header;
-
623  std::vector<TrackFragmentRun> runs;
-
624  bool decode_time_absent;
-
625  TrackFragmentDecodeTime decode_time;
-
626  SampleToGroup sample_to_group;
-
627  SampleGroupDescription sample_group_description;
-
628  SampleAuxiliaryInformationSize auxiliary_size;
-
629  SampleAuxiliaryInformationOffset auxiliary_offset;
-
630  SampleEncryption sample_encryption;
-
631 };
-
632 
-
633 struct MovieFragment : Box {
-
634  DECLARE_BOX_METHODS(MovieFragment);
-
635 
-
636  MovieFragmentHeader header;
-
637  std::vector<TrackFragment> tracks;
-
638  std::vector<ProtectionSystemSpecificHeader> pssh;
-
639 };
-
640 
- -
642  enum SAPType {
-
643  TypeUnknown = 0,
-
644  Type1 = 1, // T(ept) = T(dec) = T(sap) = T(ptf)
-
645  Type2 = 2, // T(ept) = T(dec) = T(sap) < T(ptf)
-
646  Type3 = 3, // T(ept) < T(dec) = T(sap) <= T(ptf)
-
647  Type4 = 4, // T(ept) <= T(ptf) < T(dec) = T(sap)
-
648  Type5 = 5, // T(ept) = T(dec) < T(sap)
-
649  Type6 = 6, // T(ept) < T(dec) < T(sap)
-
650  };
-
651 
-
652  bool reference_type;
-
653  uint32_t referenced_size;
-
654  uint32_t subsegment_duration;
-
655  bool starts_with_sap;
-
656  SAPType sap_type;
-
657  uint32_t sap_delta_time;
-
658  // We add this field to keep track of earliest_presentation_time in this
-
659  // subsegment. It is not part of SegmentReference.
-
660  uint64_t earliest_presentation_time;
-
661 };
-
662 
- -
664  DECLARE_BOX_METHODS(SegmentIndex);
-
665 
-
666  uint32_t reference_id;
-
667  uint32_t timescale;
-
668  uint64_t earliest_presentation_time;
-
669  uint64_t first_offset;
-
670  std::vector<SegmentReference> references;
-
671 };
-
672 
-
673 // The actual data is parsed and written separately.
-
674 struct MediaData : Box {
-
675  DECLARE_BOX_METHODS(MediaData);
+
619  uint32_t grouping_type;
+
620  std::vector<CencSampleEncryptionInfoEntry> entries;
+
621 };
+
622 
+
623 struct TrackFragment : Box {
+
624  DECLARE_BOX_METHODS(TrackFragment);
+
625 
+
626  TrackFragmentHeader header;
+
627  std::vector<TrackFragmentRun> runs;
+
628  bool decode_time_absent;
+
629  TrackFragmentDecodeTime decode_time;
+
630  SampleToGroup sample_to_group;
+
631  SampleGroupDescription sample_group_description;
+
632  SampleAuxiliaryInformationSize auxiliary_size;
+
633  SampleAuxiliaryInformationOffset auxiliary_offset;
+
634  SampleEncryption sample_encryption;
+
635 };
+
636 
+
637 struct MovieFragment : Box {
+
638  DECLARE_BOX_METHODS(MovieFragment);
+
639 
+
640  MovieFragmentHeader header;
+
641  std::vector<TrackFragment> tracks;
+
642  std::vector<ProtectionSystemSpecificHeader> pssh;
+
643 };
+
644 
+ +
646  enum SAPType {
+
647  TypeUnknown = 0,
+
648  Type1 = 1, // T(ept) = T(dec) = T(sap) = T(ptf)
+
649  Type2 = 2, // T(ept) = T(dec) = T(sap) < T(ptf)
+
650  Type3 = 3, // T(ept) < T(dec) = T(sap) <= T(ptf)
+
651  Type4 = 4, // T(ept) <= T(ptf) < T(dec) = T(sap)
+
652  Type5 = 5, // T(ept) = T(dec) < T(sap)
+
653  Type6 = 6, // T(ept) < T(dec) < T(sap)
+
654  };
+
655 
+
656  bool reference_type;
+
657  uint32_t referenced_size;
+
658  uint32_t subsegment_duration;
+
659  bool starts_with_sap;
+
660  SAPType sap_type;
+
661  uint32_t sap_delta_time;
+
662  // We add this field to keep track of earliest_presentation_time in this
+
663  // subsegment. It is not part of SegmentReference.
+
664  uint64_t earliest_presentation_time;
+
665 };
+
666 
+ +
668  DECLARE_BOX_METHODS(SegmentIndex);
+
669 
+
670  uint32_t reference_id;
+
671  uint32_t timescale;
+
672  uint64_t earliest_presentation_time;
+
673  uint64_t first_offset;
+
674  std::vector<SegmentReference> references;
+
675 };
676 
-
677  uint32_t data_size;
-
678 };
-
679 
-
680 struct CueSourceIDBox : Box {
-
681  DECLARE_BOX_METHODS(CueSourceIDBox);
-
682  int32_t source_id;
-
683 };
-
684 
-
685 struct CueTimeBox : Box {
-
686  DECLARE_BOX_METHODS(CueTimeBox);
-
687  std::string cue_current_time;
-
688 };
-
689 
-
690 struct CueIDBox : Box {
-
691  DECLARE_BOX_METHODS(CueIDBox);
-
692  std::string cue_id;
-
693 };
-
694 
-
695 struct CueSettingsBox : Box {
-
696  DECLARE_BOX_METHODS(CueSettingsBox);
-
697  std::string settings;
-
698 };
-
699 
-
700 struct CuePayloadBox : Box {
-
701  DECLARE_BOX_METHODS(CuePayloadBox);
-
702  std::string cue_text;
-
703 };
-
704 
-
705 struct VTTEmptyCueBox : Box {
-
706  DECLARE_BOX_METHODS(VTTEmptyCueBox);
+
677 // The actual data is parsed and written separately.
+
678 struct MediaData : Box {
+
679  DECLARE_BOX_METHODS(MediaData);
+
680 
+
681  uint32_t data_size;
+
682 };
+
683 
+
684 struct CueSourceIDBox : Box {
+
685  DECLARE_BOX_METHODS(CueSourceIDBox);
+
686  int32_t source_id;
+
687 };
+
688 
+
689 struct CueTimeBox : Box {
+
690  DECLARE_BOX_METHODS(CueTimeBox);
+
691  std::string cue_current_time;
+
692 };
+
693 
+
694 struct CueIDBox : Box {
+
695  DECLARE_BOX_METHODS(CueIDBox);
+
696  std::string cue_id;
+
697 };
+
698 
+
699 struct CueSettingsBox : Box {
+
700  DECLARE_BOX_METHODS(CueSettingsBox);
+
701  std::string settings;
+
702 };
+
703 
+
704 struct CuePayloadBox : Box {
+
705  DECLARE_BOX_METHODS(CuePayloadBox);
+
706  std::string cue_text;
707 };
708 
- -
710  DECLARE_BOX_METHODS(VTTAdditionalTextBox);
-
711  std::string cue_additional_text;
-
712 };
-
713 
-
714 struct VTTCueBox : Box {
-
715  DECLARE_BOX_METHODS(VTTCueBox);
-
716 
-
717  CueSourceIDBox cue_source_id;
-
718  CueIDBox cue_id;
-
719  CueTimeBox cue_time;
-
720  CueSettingsBox cue_settings;
-
721  CuePayloadBox cue_payload;
-
722 };
-
723 
-
724 #undef DECLARE_BOX
-
725 
-
726 } // namespace mp4
-
727 } // namespace media
-
728 } // namespace edash_packager
-
729 
-
730 #endif // MEDIA_FORMATS_MP4_BOX_DEFINITIONS_H_
+
709 struct VTTEmptyCueBox : Box {
+
710  DECLARE_BOX_METHODS(VTTEmptyCueBox);
+
711 };
+
712 
+ +
714  DECLARE_BOX_METHODS(VTTAdditionalTextBox);
+
715  std::string cue_additional_text;
+
716 };
+
717 
+
718 struct VTTCueBox : Box {
+
719  DECLARE_BOX_METHODS(VTTCueBox);
+
720 
+
721  CueSourceIDBox cue_source_id;
+
722  CueIDBox cue_id;
+
723  CueTimeBox cue_time;
+
724  CueSettingsBox cue_settings;
+
725  CuePayloadBox cue_payload;
+
726 };
+
727 
+
728 #undef DECLARE_BOX
+
729 
+
730 } // namespace mp4
+
731 } // namespace media
+
732 } // namespace edash_packager
+
733 
+
734 #endif // MEDIA_FORMATS_MP4_BOX_DEFINITIONS_H_
- - - - + + + + - - + + - - + + - - - + + + - -
bool ParseFromSampleEncryptionData(size_t iv_size, std::vector< SampleEncryptionEntry > *sample_encryption_entries) const
+ +
bool ParseFromSampleEncryptionData(size_t iv_size, std::vector< SampleEncryptionEntry > *sample_encryption_entries) const
- - + + - + - + - + - - - - + + + + - + - - - - - + + + + + - + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - + - - - -
bool ParseFromBuffer(uint8_t iv_size, bool has_subsamples, BufferReader *reader)
+ + + +
bool ParseFromBuffer(uint8_t iv_size, bool has_subsamples, BufferReader *reader)
- - + + - -
bool ReadWrite(uint8_t iv_size, bool has_subsamples, BoxBuffer *buffer)
- - + +
bool ReadWrite(uint8_t iv_size, bool has_subsamples, BoxBuffer *buffer)
+ + - + - + diff --git a/docs/d5/d89/widevine__key__source_8cc_source.html b/docs/d5/d89/widevine__key__source_8cc_source.html index 7afa78da98..86c0ac3f76 100644 --- a/docs/d5/d89/widevine__key__source_8cc_source.html +++ b/docs/d5/d89/widevine__key__source_8cc_source.html @@ -657,7 +657,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d8f/webm__cluster__parser_8cc_source.html b/docs/d5/d8f/webm__cluster__parser_8cc_source.html index 50b12a41eb..e77bc42d7a 100644 --- a/docs/d5/d8f/webm__cluster__parser_8cc_source.html +++ b/docs/d5/d8f/webm__cluster__parser_8cc_source.html @@ -881,7 +881,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d91/es__parser__adts_8cc_source.html b/docs/d5/d91/es__parser__adts_8cc_source.html index 4e43d9409d..0e7dbbd5c6 100644 --- a/docs/d5/d91/es__parser__adts_8cc_source.html +++ b/docs/d5/d91/es__parser__adts_8cc_source.html @@ -322,59 +322,61 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
233  kAacSampleSizeBits,
234  adts_header.GetNumChannels(),
235  extended_samples_per_second,
-
236  audio_specific_config.data(),
-
237  audio_specific_config.size(),
-
238  false));
-
239 
-
240  DVLOG(1) << "Sampling frequency: " << samples_per_second;
-
241  DVLOG(1) << "Extended sampling frequency: " << extended_samples_per_second;
-
242  DVLOG(1) << "Channel config: " << adts_header.GetNumChannels();
-
243  DVLOG(1) << "Object type: " << adts_header.GetObjectType();
-
244  // Reset the timestamp helper to use a new sampling frequency.
-
245  if (audio_timestamp_helper_) {
-
246  int64_t base_timestamp = audio_timestamp_helper_->GetTimestamp();
-
247  audio_timestamp_helper_.reset(
-
248  new AudioTimestampHelper(kMpeg2Timescale, samples_per_second));
-
249  audio_timestamp_helper_->SetBaseTimestamp(base_timestamp);
-
250  } else {
-
251  audio_timestamp_helper_.reset(
-
252  new AudioTimestampHelper(kMpeg2Timescale, extended_samples_per_second));
-
253  }
-
254 
-
255  // Audio config notification.
-
256  new_stream_info_cb_.Run(last_audio_decoder_config_);
-
257 
-
258  return true;
-
259 }
-
260 
-
261 void EsParserAdts::DiscardEs(int nbytes) {
-
262  DCHECK_GE(nbytes, 0);
-
263  if (nbytes <= 0)
-
264  return;
-
265 
-
266  // Adjust the ES position of each PTS.
-
267  for (EsPtsList::iterator it = pts_list_.begin(); it != pts_list_.end(); ++it)
-
268  it->first -= nbytes;
-
269 
-
270  // Discard |nbytes| of ES.
-
271  es_byte_queue_.Pop(nbytes);
-
272 }
-
273 
-
274 } // namespace mp2t
-
275 } // namespace media
-
276 } // namespace edash_packager
+
236  0,
+
237  0,
+
238  audio_specific_config.data(),
+
239  audio_specific_config.size(),
+
240  false));
+
241 
+
242  DVLOG(1) << "Sampling frequency: " << samples_per_second;
+
243  DVLOG(1) << "Extended sampling frequency: " << extended_samples_per_second;
+
244  DVLOG(1) << "Channel config: " << adts_header.GetNumChannels();
+
245  DVLOG(1) << "Object type: " << adts_header.GetObjectType();
+
246  // Reset the timestamp helper to use a new sampling frequency.
+
247  if (audio_timestamp_helper_) {
+
248  int64_t base_timestamp = audio_timestamp_helper_->GetTimestamp();
+
249  audio_timestamp_helper_.reset(
+
250  new AudioTimestampHelper(kMpeg2Timescale, samples_per_second));
+
251  audio_timestamp_helper_->SetBaseTimestamp(base_timestamp);
+
252  } else {
+
253  audio_timestamp_helper_.reset(
+
254  new AudioTimestampHelper(kMpeg2Timescale, extended_samples_per_second));
+
255  }
+
256 
+
257  // Audio config notification.
+
258  new_stream_info_cb_.Run(last_audio_decoder_config_);
+
259 
+
260  return true;
+
261 }
+
262 
+
263 void EsParserAdts::DiscardEs(int nbytes) {
+
264  DCHECK_GE(nbytes, 0);
+
265  if (nbytes <= 0)
+
266  return;
+
267 
+
268  // Adjust the ES position of each PTS.
+
269  for (EsPtsList::iterator it = pts_list_.begin(); it != pts_list_.end(); ++it)
+
270  it->first -= nbytes;
+
271 
+
272  // Discard |nbytes| of ES.
+
273  es_byte_queue_.Pop(nbytes);
+
274 }
+
275 
+
276 } // namespace mp2t
+
277 } // namespace media
+
278 } // namespace edash_packager
static size_t GetAdtsFrameSize(const uint8_t *data, size_t num_bytes)
Definition: adts_header.cc:23
void Push(const uint8_t *data, int size)
Append new bytes to the end of the queue.
Definition: byte_queue.cc:29
static scoped_refptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:45
static size_t GetAdtsHeaderSize(const uint8_t *data, size_t num_bytes)
Definition: adts_header.cc:31
void Reset()
Reset the queue to the empty state.
Definition: byte_queue.cc:24
-
static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
+
static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
void Peek(const uint8_t **data, int *size) const
Definition: byte_queue.cc:63
diff --git a/docs/d5/d9c/classedash__packager_1_1MpdNotifierFactory-members.html b/docs/d5/d9c/classedash__packager_1_1MpdNotifierFactory-members.html index aa42f6e216..f16a9d2d74 100644 --- a/docs/d5/d9c/classedash__packager_1_1MpdNotifierFactory-members.html +++ b/docs/d5/d9c/classedash__packager_1_1MpdNotifierFactory-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/da4/aes__encryptor_8cc_source.html b/docs/d5/da4/aes__encryptor_8cc_source.html index 3f52ef4a40..2f02eadb0e 100644 --- a/docs/d5/da4/aes__encryptor_8cc_source.html +++ b/docs/d5/da4/aes__encryptor_8cc_source.html @@ -568,7 +568,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/db7/classedash__packager_1_1xml_1_1AdaptationSetXmlNode-members.html b/docs/d5/db7/classedash__packager_1_1xml_1_1AdaptationSetXmlNode-members.html index 2e84a72379..d249b02b96 100644 --- a/docs/d5/db7/classedash__packager_1_1xml_1_1AdaptationSetXmlNode-members.html +++ b/docs/d5/db7/classedash__packager_1_1xml_1_1AdaptationSetXmlNode-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dba/ts__packet_8cc_source.html b/docs/d5/dba/ts__packet_8cc_source.html index 7629abbadc..cff8ca4df5 100644 --- a/docs/d5/dba/ts__packet_8cc_source.html +++ b/docs/d5/dba/ts__packet_8cc_source.html @@ -304,7 +304,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dc1/webm__webvtt__parser_8cc_source.html b/docs/d5/dc1/webm__webvtt__parser_8cc_source.html index 58715f99cd..237cf14c9f 100644 --- a/docs/d5/dc1/webm__webvtt__parser_8cc_source.html +++ b/docs/d5/dc1/webm__webvtt__parser_8cc_source.html @@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dc8/classedash__packager_1_1media_1_1OpusPacket.html b/docs/d5/dc8/classedash__packager_1_1media_1_1OpusPacket.html index 9475c886f0..cf4936b285 100644 --- a/docs/d5/dc8/classedash__packager_1_1media_1_1OpusPacket.html +++ b/docs/d5/dc8/classedash__packager_1_1media_1_1OpusPacket.html @@ -119,7 +119,7 @@ double duration_ms () diff --git a/docs/d5/dce/classedash__packager_1_1media_1_1Demuxer.html b/docs/d5/dce/classedash__packager_1_1media_1_1Demuxer.html index ccdc87497e..0c2214c0bf 100644 --- a/docs/d5/dce/classedash__packager_1_1media_1_1Demuxer.html +++ b/docs/d5/dce/classedash__packager_1_1media_1_1Demuxer.html @@ -294,7 +294,7 @@ Public Member Functions diff --git a/docs/d5/dce/classedash__packager_1_1media_1_1VP8Parser.html b/docs/d5/dce/classedash__packager_1_1media_1_1VP8Parser.html index a801011d5f..03202dee33 100644 --- a/docs/d5/dce/classedash__packager_1_1media_1_1VP8Parser.html +++ b/docs/d5/dce/classedash__packager_1_1media_1_1VP8Parser.html @@ -235,7 +235,7 @@ Additional Inherited Members diff --git a/docs/d5/dcf/rsa__key_8h_source.html b/docs/d5/dcf/rsa__key_8h_source.html index 85f4a55fc9..adc9550013 100644 --- a/docs/d5/dcf/rsa__key_8h_source.html +++ b/docs/d5/dcf/rsa__key_8h_source.html @@ -165,7 +165,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dd2/classedash__packager_1_1media_1_1VPxParser.html b/docs/d5/dd2/classedash__packager_1_1media_1_1VPxParser.html index 632f00b049..faaec27cba 100644 --- a/docs/d5/dd2/classedash__packager_1_1media_1_1VPxParser.html +++ b/docs/d5/dd2/classedash__packager_1_1media_1_1VPxParser.html @@ -205,7 +205,7 @@ Protected Member Functions diff --git a/docs/d5/dda/ts__section__psi_8h_source.html b/docs/d5/dda/ts__section__psi_8h_source.html index 1426912cc3..1ddd1e26f8 100644 --- a/docs/d5/dda/ts__section__psi_8h_source.html +++ b/docs/d5/dda/ts__section__psi_8h_source.html @@ -151,7 +151,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/de0/bit__reader_8cc_source.html b/docs/d5/de0/bit__reader_8cc_source.html index 069ff907dc..19b11505ee 100644 --- a/docs/d5/de0/bit__reader_8cc_source.html +++ b/docs/d5/de0/bit__reader_8cc_source.html @@ -199,7 +199,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dec/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser-members.html b/docs/d5/dec/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser-members.html index b9455965be..660605d998 100644 --- a/docs/d5/dec/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser-members.html +++ b/docs/d5/dec/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/def/ts__section__pmt_8h_source.html b/docs/d5/def/ts__section__pmt_8h_source.html index 62a07f2e57..6f6a12cca9 100644 --- a/docs/d5/def/ts__section__pmt_8h_source.html +++ b/docs/d5/def/ts__section__pmt_8h_source.html @@ -133,7 +133,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/df8/classedash__packager_1_1media_1_1H264BitReader-members.html b/docs/d5/df8/classedash__packager_1_1media_1_1H264BitReader-members.html index ad75d7c977..f1ff857b81 100644 --- a/docs/d5/df8/classedash__packager_1_1media_1_1H264BitReader-members.html +++ b/docs/d5/df8/classedash__packager_1_1media_1_1H264BitReader-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dfc/file_8cc_source.html b/docs/d5/dfc/file_8cc_source.html index 514e1f0334..8e20ca92b0 100644 --- a/docs/d5/dfc/file_8cc_source.html +++ b/docs/d5/dfc/file_8cc_source.html @@ -376,7 +376,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d00/structedash__packager_1_1media_1_1mp4_1_1Box-members.html b/docs/d6/d00/structedash__packager_1_1media_1_1mp4_1_1Box-members.html index 0f30413df4..0d4c08820f 100644 --- a/docs/d6/d00/structedash__packager_1_1media_1_1mp4_1_1Box-members.html +++ b/docs/d6/d00/structedash__packager_1_1media_1_1mp4_1_1Box-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d06/classedash__packager_1_1media_1_1StreamInfo.html b/docs/d6/d06/classedash__packager_1_1media_1_1StreamInfo.html index 11871422e7..e73d532816 100644 --- a/docs/d6/d06/classedash__packager_1_1media_1_1StreamInfo.html +++ b/docs/d6/d06/classedash__packager_1_1media_1_1StreamInfo.html @@ -229,7 +229,7 @@ class base::RefCountedThre diff --git a/docs/d6/d10/classedash__packager_1_1media_1_1VideoStreamInfo-members.html b/docs/d6/d10/classedash__packager_1_1media_1_1VideoStreamInfo-members.html index 7b68da94a3..a29748a243 100644 --- a/docs/d6/d10/classedash__packager_1_1media_1_1VideoStreamInfo-members.html +++ b/docs/d6/d10/classedash__packager_1_1media_1_1VideoStreamInfo-members.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d12/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat-members.html b/docs/d6/d12/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat-members.html index 123795abae..3dfdf107d4 100644 --- a/docs/d6/d12/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat-members.html +++ b/docs/d6/d12/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d13/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html b/docs/d6/d13/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html index 574e287270..41bca2e46f 100644 --- a/docs/d6/d13/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html +++ b/docs/d6/d13/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d16/text__stream__info_8cc_source.html b/docs/d6/d16/text__stream__info_8cc_source.html index 522ff031f8..255658f1d6 100644 --- a/docs/d6/d16/text__stream__info_8cc_source.html +++ b/docs/d6/d16/text__stream__info_8cc_source.html @@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d17/es__parser__h264_8cc_source.html b/docs/d6/d17/es__parser__h264_8cc_source.html index c139857a51..62fc8cc718 100644 --- a/docs/d6/d17/es__parser__h264_8cc_source.html +++ b/docs/d6/d17/es__parser__h264_8cc_source.html @@ -482,7 +482,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d19/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription-members.html b/docs/d6/d19/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription-members.html index 778804859a..13dc0dcc6b 100644 --- a/docs/d6/d19/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription-members.html +++ b/docs/d6/d19/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d1b/classedash__packager_1_1media_1_1ClosureThread-members.html b/docs/d6/d1b/classedash__packager_1_1media_1_1ClosureThread-members.html index f601bca78b..f14e4fd128 100644 --- a/docs/d6/d1b/classedash__packager_1_1media_1_1ClosureThread-members.html +++ b/docs/d6/d1b/classedash__packager_1_1media_1_1ClosureThread-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d2e/mpd__notifier__util_8cc_source.html b/docs/d6/d2e/mpd__notifier__util_8cc_source.html index b70790ad52..887122fe21 100644 --- a/docs/d6/d2e/mpd__notifier__util_8cc_source.html +++ b/docs/d6/d2e/mpd__notifier__util_8cc_source.html @@ -170,7 +170,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d35/webm__content__encodings_8cc_source.html b/docs/d6/d35/webm__content__encodings_8cc_source.html index b116b54d1e..99ac41632e 100644 --- a/docs/d6/d35/webm__content__encodings_8cc_source.html +++ b/docs/d6/d35/webm__content__encodings_8cc_source.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.html b/docs/d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.html index fcde1112be..82ca8b8874 100644 --- a/docs/d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.html +++ b/docs/d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.html @@ -197,7 +197,7 @@ Additional Inherited Members diff --git a/docs/d6/d3a/classedash__packager_1_1media_1_1AesRequestSigner-members.html b/docs/d6/d3a/classedash__packager_1_1media_1_1AesRequestSigner-members.html index 07fe1d2a8d..e58f0a7fbc 100644 --- a/docs/d6/d3a/classedash__packager_1_1media_1_1AesRequestSigner-members.html +++ b/docs/d6/d3a/classedash__packager_1_1media_1_1AesRequestSigner-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d3b/chunk__info__iterator_8cc_source.html b/docs/d6/d3b/chunk__info__iterator_8cc_source.html index e208a615c2..0f919c558e 100644 --- a/docs/d6/d3b/chunk__info__iterator_8cc_source.html +++ b/docs/d6/d3b/chunk__info__iterator_8cc_source.html @@ -162,7 +162,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
73 } // namespace mp4
74 } // namespace media
75 } // namespace edash_packager
- +
uint32_t NumSamples(uint32_t start_chunk, uint32_t end_chunk) const
ChunkInfoIterator(const SampleToChunk &sample_to_chunk)
Create ChunkInfoIterator from sample to chunk box.
@@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d41/encrypting__fragmenter_8cc_source.html b/docs/d6/d41/encrypting__fragmenter_8cc_source.html index 49e501975d..2f5204afbd 100644 --- a/docs/d6/d41/encrypting__fragmenter_8cc_source.html +++ b/docs/d6/d41/encrypting__fragmenter_8cc_source.html @@ -306,7 +306,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
Status AddSample(scoped_refptr< MediaSample > sample) override
void FinalizeFragment() override
Finalize and optimize the fragment.
- +
virtual Status PrepareFragmentForEncryption(bool enable_encryption)
virtual void FinalizeFragmentForEncryption()
Finalize current fragment for encryption.
@@ -314,7 +314,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d48/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl-members.html b/docs/d6/d48/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl-members.html index 319fe55b54..c0ffe96338 100644 --- a/docs/d6/d48/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl-members.html +++ b/docs/d6/d48/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html b/docs/d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html index abf346ed04..5b7f9ed457 100644 --- a/docs/d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html +++ b/docs/d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html @@ -233,7 +233,7 @@ Static Public Member Functions diff --git a/docs/d6/d4e/webm_2multi__segment__segmenter_8cc_source.html b/docs/d6/d4e/webm_2multi__segment__segmenter_8cc_source.html index 323ec96651..c3db0c2f92 100644 --- a/docs/d6/d4e/webm_2multi__segment__segmenter_8cc_source.html +++ b/docs/d6/d4e/webm_2multi__segment__segmenter_8cc_source.html @@ -183,7 +183,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html b/docs/d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html index e31ec59ec1..4d1227ed82 100644 --- a/docs/d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html +++ b/docs/d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html @@ -136,7 +136,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 457 of file box_definitions.h.

+

Definition at line 461 of file box_definitions.h.

Member Function Documentation

@@ -162,7 +162,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 1491 of file box_definitions.cc.

+

Definition at line 1519 of file box_definitions.cc.

@@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d6/d5d/classedash__packager_1_1media_1_1HEVCDecoderConfiguration.html b/docs/d6/d5d/classedash__packager_1_1media_1_1HEVCDecoderConfiguration.html index 5982c47469..10b7edef65 100644 --- a/docs/d6/d5d/classedash__packager_1_1media_1_1HEVCDecoderConfiguration.html +++ b/docs/d6/d5d/classedash__packager_1_1media_1_1HEVCDecoderConfiguration.html @@ -185,7 +185,7 @@ Public Member Functions diff --git a/docs/d6/d5e/structedash__packager_1_1media_1_1H264SEIRecoveryPoint-members.html b/docs/d6/d5e/structedash__packager_1_1media_1_1H264SEIRecoveryPoint-members.html index f9b104537d..3928c456b3 100644 --- a/docs/d6/d5e/structedash__packager_1_1media_1_1H264SEIRecoveryPoint-members.html +++ b/docs/d6/d5e/structedash__packager_1_1media_1_1H264SEIRecoveryPoint-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d5e/structedash__packager_1_1media_1_1mp4_1_1DTSSpecific-members.html b/docs/d6/d5e/structedash__packager_1_1media_1_1mp4_1_1DTSSpecific-members.html index 25d6e17a32..ca348905af 100644 --- a/docs/d6/d5e/structedash__packager_1_1media_1_1mp4_1_1DTSSpecific-members.html +++ b/docs/d6/d5e/structedash__packager_1_1media_1_1mp4_1_1DTSSpecific-members.html @@ -93,15 +93,19 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');

This is the complete list of members for edash_packager::media::mp4::DTSSpecific, including all inherited members.

- - - - - + + + + + - + + + - + + + @@ -109,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
box_size()edash_packager::media::mp4::Boxinline
BoxType() const overrideedash_packager::media::mp4::DTSSpecificvirtual
ComputeSize()edash_packager::media::mp4::Box
data (defined in edash_packager::media::mp4::DTSSpecific)edash_packager::media::mp4::DTSSpecific
avg_bitrate (defined in edash_packager::media::mp4::DTSSpecific)edash_packager::media::mp4::DTSSpecific
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
box_size()edash_packager::media::mp4::Boxinline
BoxType() const overrideedash_packager::media::mp4::DTSSpecificvirtual
ComputeSize()edash_packager::media::mp4::Box
DTSSpecific() (defined in edash_packager::media::mp4::DTSSpecific)edash_packager::media::mp4::DTSSpecific
HeaderSize() const edash_packager::media::mp4::Boxvirtual
extra_data (defined in edash_packager::media::mp4::DTSSpecific)edash_packager::media::mp4::DTSSpecific
HeaderSize() const edash_packager::media::mp4::Boxvirtual
max_bitrate (defined in edash_packager::media::mp4::DTSSpecific)edash_packager::media::mp4::DTSSpecific
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWriteHeaderInternal(BoxBuffer *buffer)edash_packager::media::mp4::Boxprotectedvirtual
pcm_sample_depth (defined in edash_packager::media::mp4::DTSSpecific)edash_packager::media::mp4::DTSSpecific
ReadWriteHeaderInternal(BoxBuffer *buffer)edash_packager::media::mp4::Boxprotectedvirtual
sampling_frequency (defined in edash_packager::media::mp4::DTSSpecific)edash_packager::media::mp4::DTSSpecific
Write(BufferWriter *writer)edash_packager::media::mp4::Box
WriteHeader(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
diff --git a/docs/d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html b/docs/d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html index 29be77c208..f14cf4130b 100644 --- a/docs/d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html +++ b/docs/d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html @@ -145,7 +145,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 444 of file box_definitions.h.

+

Definition at line 448 of file box_definitions.h.

Member Function Documentation

@@ -171,7 +171,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 1449 of file box_definitions.cc.

+

Definition at line 1477 of file box_definitions.cc.

@@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d6/d6e/ts__section__pes_8cc_source.html b/docs/d6/d6e/ts__section__pes_8cc_source.html index 43609b6e23..1adb92cc55 100644 --- a/docs/d6/d6e/ts__section__pes_8cc_source.html +++ b/docs/d6/d6e/ts__section__pes_8cc_source.html @@ -405,7 +405,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d71/scoped__xml__ptr_8h_source.html b/docs/d6/d71/scoped__xml__ptr_8h_source.html index e2cc9393ba..7939ac6fba 100644 --- a/docs/d6/d71/scoped__xml__ptr_8h_source.html +++ b/docs/d6/d71/scoped__xml__ptr_8h_source.html @@ -131,7 +131,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d74/structedash__packager_1_1media_1_1mp4_1_1VTTCueBox.html b/docs/d6/d74/structedash__packager_1_1media_1_1mp4_1_1VTTCueBox.html index 24a9ab72c5..0c4ee0167e 100644 --- a/docs/d6/d74/structedash__packager_1_1media_1_1mp4_1_1VTTCueBox.html +++ b/docs/d6/d74/structedash__packager_1_1media_1_1mp4_1_1VTTCueBox.html @@ -148,7 +148,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 714 of file box_definitions.h.

+

Definition at line 718 of file box_definitions.h.

Member Function Documentation

@@ -174,7 +174,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 2310 of file box_definitions.cc.

+

Definition at line 2338 of file box_definitions.cc.

@@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/d6/d77/dash__iop__mpd__notifier_8h_source.html b/docs/d6/d77/dash__iop__mpd__notifier_8h_source.html index fbefd2288a..c21c94e67e 100644 --- a/docs/d6/d77/dash__iop__mpd__notifier_8h_source.html +++ b/docs/d6/d77/dash__iop__mpd__notifier_8h_source.html @@ -218,7 +218,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html b/docs/d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html index c0ff82edba..b83007d1f3 100644 --- a/docs/d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html +++ b/docs/d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html @@ -143,7 +143,7 @@ uint32_t flags

Detailed Description

-

Definition at line 388 of file box_definitions.h.

+

Definition at line 392 of file box_definitions.h.

Member Function Documentation

@@ -169,7 +169,7 @@ uint32_t flagsReimplemented from edash_packager::media::mp4::ChunkLargeOffset.

-

Definition at line 773 of file box_definitions.cc.

+

Definition at line 789 of file box_definitions.cc.

@@ -180,7 +180,7 @@ uint32_t flags diff --git a/docs/d6/d7b/webm__tracks__parser_8h_source.html b/docs/d6/d7b/webm__tracks__parser_8h_source.html index 58452d24a8..3f85f467e2 100644 --- a/docs/d6/d7b/webm__tracks__parser_8h_source.html +++ b/docs/d6/d7b/webm__tracks__parser_8h_source.html @@ -202,7 +202,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d80/classedash__packager_1_1media_1_1Demuxer-members.html b/docs/d6/d80/classedash__packager_1_1media_1_1Demuxer-members.html index 9efed2f2b6..ef83328e44 100644 --- a/docs/d6/d80/classedash__packager_1_1media_1_1Demuxer-members.html +++ b/docs/d6/d80/classedash__packager_1_1media_1_1Demuxer-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d81/classedash__packager_1_1media_1_1LibcryptoThreading-members.html b/docs/d6/d81/classedash__packager_1_1media_1_1LibcryptoThreading-members.html index 5c2a218b66..4710afbd5a 100644 --- a/docs/d6/d81/classedash__packager_1_1media_1_1LibcryptoThreading-members.html +++ b/docs/d6/d81/classedash__packager_1_1media_1_1LibcryptoThreading-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d86/bandwidth__estimator_8cc_source.html b/docs/d6/d86/bandwidth__estimator_8cc_source.html index efcc2dcf79..a243bb46e1 100644 --- a/docs/d6/d86/bandwidth__estimator_8cc_source.html +++ b/docs/d6/d86/bandwidth__estimator_8cc_source.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d8a/vp9__parser_8cc_source.html b/docs/d6/d8a/vp9__parser_8cc_source.html index 1c0dd03b54..b2ce73a30b 100644 --- a/docs/d6/d8a/vp9__parser_8cc_source.html +++ b/docs/d6/d8a/vp9__parser_8cc_source.html @@ -659,7 +659,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html b/docs/d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html index 8baf694ed8..3f29ba47fc 100644 --- a/docs/d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html +++ b/docs/d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html @@ -139,7 +139,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 507 of file box_definitions.h.

+

Definition at line 511 of file box_definitions.h.

Member Function Documentation

@@ -165,7 +165,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 1643 of file box_definitions.cc.

+

Definition at line 1671 of file box_definitions.cc.

@@ -176,7 +176,7 @@ Additional Inherited Members diff --git a/docs/d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html b/docs/d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html index 104c25c84d..0a4474aa32 100644 --- a/docs/d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html +++ b/docs/d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html @@ -243,7 +243,7 @@ Protected Member Functions diff --git a/docs/d6/d92/classedash__packager_1_1media_1_1webm_1_1Segmenter-members.html b/docs/d6/d92/classedash__packager_1_1media_1_1webm_1_1Segmenter-members.html index 7010f1afd5..e0b7677d22 100644 --- a/docs/d6/d92/classedash__packager_1_1media_1_1webm_1_1Segmenter-members.html +++ b/docs/d6/d92/classedash__packager_1_1media_1_1webm_1_1Segmenter-members.html @@ -121,7 +121,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d96/structedash__packager_1_1media_1_1mp4_1_1SampleDescription-members.html b/docs/d6/d96/structedash__packager_1_1media_1_1mp4_1_1SampleDescription-members.html index 67ec36eab7..f44f9b70f9 100644 --- a/docs/d6/d96/structedash__packager_1_1media_1_1mp4_1_1SampleDescription-members.html +++ b/docs/d6/d96/structedash__packager_1_1media_1_1mp4_1_1SampleDescription-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d97/classedash__packager_1_1media_1_1UdpFile-members.html b/docs/d6/d97/classedash__packager_1_1media_1_1UdpFile-members.html index 1b55d71860..fe77e8794d 100644 --- a/docs/d6/d97/classedash__packager_1_1media_1_1UdpFile-members.html +++ b/docs/d6/d97/classedash__packager_1_1media_1_1UdpFile-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d9b/h264__parser_8h_source.html b/docs/d6/d9b/h264__parser_8h_source.html index 31b00bf64d..3523d818dd 100644 --- a/docs/d6/d9b/h264__parser_8h_source.html +++ b/docs/d6/d9b/h264__parser_8h_source.html @@ -516,7 +516,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d9c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes-members.html b/docs/d6/d9c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes-members.html index d8bc5a9753..a3abe66bf0 100644 --- a/docs/d6/d9c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes-members.html +++ b/docs/d6/d9c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/da0/ts__section__pat_8h_source.html b/docs/d6/da0/ts__section__pat_8h_source.html index 9144be37d2..9e59cf56ce 100644 --- a/docs/d6/da0/ts__section__pat_8h_source.html +++ b/docs/d6/da0/ts__section__pat_8h_source.html @@ -135,7 +135,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html b/docs/d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html index 140bd96ff0..0ff3d1e415 100644 --- a/docs/d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html +++ b/docs/d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html @@ -258,7 +258,7 @@ const std::vector< uint8_t > &  diff --git a/docs/d6/da3/classedash__packager_1_1media_1_1H264Parser.html b/docs/d6/da3/classedash__packager_1_1media_1_1H264Parser.html index 0d1a238401..ec14a9c9dc 100644 --- a/docs/d6/da3/classedash__packager_1_1media_1_1H264Parser.html +++ b/docs/d6/da3/classedash__packager_1_1media_1_1H264Parser.html @@ -154,7 +154,7 @@ static bool FindStartCode< diff --git a/docs/d6/da3/mpd__builder_8h_source.html b/docs/d6/da3/mpd__builder_8h_source.html index 934e767023..d6b411ec74 100644 --- a/docs/d6/da3/mpd__builder_8h_source.html +++ b/docs/d6/da3/mpd__builder_8h_source.html @@ -509,7 +509,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/da8/classedash__packager_1_1media_1_1WebMWebVTTParser-members.html b/docs/d6/da8/classedash__packager_1_1media_1_1WebMWebVTTParser-members.html index 20bdbf4a0c..9632bed64b 100644 --- a/docs/d6/da8/classedash__packager_1_1media_1_1WebMWebVTTParser-members.html +++ b/docs/d6/da8/classedash__packager_1_1media_1_1WebMWebVTTParser-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dba/classedash__packager_1_1media_1_1ThreadedIoFile-members.html b/docs/d6/dba/classedash__packager_1_1media_1_1ThreadedIoFile-members.html index 4c901ba406..7f7e588317 100644 --- a/docs/d6/dba/classedash__packager_1_1media_1_1ThreadedIoFile-members.html +++ b/docs/d6/dba/classedash__packager_1_1media_1_1ThreadedIoFile-members.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dbb/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset-members.html b/docs/d6/dbb/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset-members.html index b7235ff2c4..008bd9258d 100644 --- a/docs/d6/dbb/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset-members.html +++ b/docs/d6/dbb/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dbd/structedash__packager_1_1media_1_1Cue-members.html b/docs/d6/dbd/structedash__packager_1_1media_1_1Cue-members.html index 64afb21541..ba90c102ec 100644 --- a/docs/d6/dbd/structedash__packager_1_1media_1_1Cue-members.html +++ b/docs/d6/dbd/structedash__packager_1_1media_1_1Cue-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dc2/classedash__packager_1_1media_1_1TextTrackConfig-members.html b/docs/d6/dc2/classedash__packager_1_1media_1_1TextTrackConfig-members.html index b130e133d6..7d9b002010 100644 --- a/docs/d6/dc2/classedash__packager_1_1media_1_1TextTrackConfig-members.html +++ b/docs/d6/dc2/classedash__packager_1_1media_1_1TextTrackConfig-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html b/docs/d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html index 6170ae8adf..5e8d8bd92c 100644 --- a/docs/d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html +++ b/docs/d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html @@ -208,7 +208,7 @@ const std::vector< uint8_t > &  diff --git a/docs/d6/dc8/mkv__writer_8cc_source.html b/docs/d6/dc8/mkv__writer_8cc_source.html index b670741902..9adf2b24e8 100644 --- a/docs/d6/dc8/mkv__writer_8cc_source.html +++ b/docs/d6/dc8/mkv__writer_8cc_source.html @@ -186,7 +186,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dd6/classedash__packager_1_1media_1_1WebMListParser.html b/docs/d6/dd6/classedash__packager_1_1media_1_1WebMListParser.html index a06be9a8e9..8c52622c22 100644 --- a/docs/d6/dd6/classedash__packager_1_1media_1_1WebMListParser.html +++ b/docs/d6/dd6/classedash__packager_1_1media_1_1WebMListParser.html @@ -210,7 +210,7 @@ void  diff --git a/docs/d6/dd7/classedash__packager_1_1media_1_1TextStreamInfo.html b/docs/d6/dd7/classedash__packager_1_1media_1_1TextStreamInfo.html index 5deab87795..fc5d39b5f3 100644 --- a/docs/d6/dd7/classedash__packager_1_1media_1_1TextStreamInfo.html +++ b/docs/d6/dd7/classedash__packager_1_1media_1_1TextStreamInfo.html @@ -276,7 +276,7 @@ void set_language (con diff --git a/docs/d6/de6/classedash__packager_1_1media_1_1KeyFetcher-members.html b/docs/d6/de6/classedash__packager_1_1media_1_1KeyFetcher-members.html index b733ecf29d..18cbcbcd86 100644 --- a/docs/d6/de6/classedash__packager_1_1media_1_1KeyFetcher-members.html +++ b/docs/d6/de6/classedash__packager_1_1media_1_1KeyFetcher-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/de7/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor-members.html b/docs/d6/de7/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor-members.html index bd08ae8631..3205baed06 100644 --- a/docs/d6/de7/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor-members.html +++ b/docs/d6/de7/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/de8/local__file_8cc_source.html b/docs/d6/de8/local__file_8cc_source.html index 1e14f52100..1542f81ccc 100644 --- a/docs/d6/de8/local__file_8cc_source.html +++ b/docs/d6/de8/local__file_8cc_source.html @@ -191,7 +191,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/de8/network__util_8h_source.html b/docs/d6/de8/network__util_8h_source.html index dd9ffd4b3a..d01e9a467d 100644 --- a/docs/d6/de8/network__util_8h_source.html +++ b/docs/d6/de8/network__util_8h_source.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html b/docs/d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html index 5d4fdc3dc2..f28bd5ae56 100644 --- a/docs/d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html +++ b/docs/d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html @@ -146,7 +146,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 514 of file box_definitions.h.

+

Definition at line 518 of file box_definitions.h.

Member Function Documentation

@@ -172,7 +172,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 1671 of file box_definitions.cc.

+

Definition at line 1699 of file box_definitions.cc.

@@ -183,7 +183,7 @@ Additional Inherited Members diff --git a/docs/d6/ded/ts__packet_8h_source.html b/docs/d6/ded/ts__packet_8h_source.html index 3f941db0af..0cb6e2ecbb 100644 --- a/docs/d6/ded/ts__packet_8h_source.html +++ b/docs/d6/ded/ts__packet_8h_source.html @@ -169,7 +169,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/def/sync__sample__iterator_8cc_source.html b/docs/d6/def/sync__sample__iterator_8cc_source.html index d2ccd652b6..6396279550 100644 --- a/docs/d6/def/sync__sample__iterator_8cc_source.html +++ b/docs/d6/def/sync__sample__iterator_8cc_source.html @@ -134,13 +134,13 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
45 } // namespace media
46 } // namespace edash_packager
SyncSampleIterator(const SyncSample &sync_sample)
Create a new SyncSampleIterator from sync sample box.
- + diff --git a/docs/d6/df4/classedash__packager_1_1media_1_1webm_1_1MultiSegmentSegmenter-members.html b/docs/d6/df4/classedash__packager_1_1media_1_1webm_1_1MultiSegmentSegmenter-members.html index 42ebfa3ea1..115d2bbc8f 100644 --- a/docs/d6/df4/classedash__packager_1_1media_1_1webm_1_1MultiSegmentSegmenter-members.html +++ b/docs/d6/df4/classedash__packager_1_1media_1_1webm_1_1MultiSegmentSegmenter-members.html @@ -123,7 +123,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/df9/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser-members.html b/docs/d6/df9/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser-members.html index 81b44dfad3..6807220667 100644 --- a/docs/d6/df9/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser-members.html +++ b/docs/d6/df9/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d0b/muxer__listener__test__helper_8h_source.html b/docs/d7/d0b/muxer__listener__test__helper_8h_source.html index 667bb74f26..8155b8b3ad 100644 --- a/docs/d7/d0b/muxer__listener__test__helper_8h_source.html +++ b/docs/d7/d0b/muxer__listener__test__helper_8h_source.html @@ -196,7 +196,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html b/docs/d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html index a3f96f0ad3..6e4b5a4205 100644 --- a/docs/d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html +++ b/docs/d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html @@ -145,7 +145,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 450 of file box_definitions.h.

+

Definition at line 454 of file box_definitions.h.

Member Function Documentation

@@ -171,7 +171,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 1469 of file box_definitions.cc.

+

Definition at line 1497 of file box_definitions.cc.

@@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d7/d12/media__parser_8h_source.html b/docs/d7/d12/media__parser_8h_source.html index 253cbdc9d9..4d5e9d1eb4 100644 --- a/docs/d7/d12/media__parser_8h_source.html +++ b/docs/d7/d12/media__parser_8h_source.html @@ -149,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d15/classedash__packager_1_1Representation.html b/docs/d7/d15/classedash__packager_1_1Representation.html index 1cfc13d98d..3e96b91cab 100644 --- a/docs/d7/d15/classedash__packager_1_1Representation.html +++ b/docs/d7/d15/classedash__packager_1_1Representation.html @@ -426,7 +426,7 @@ template<MpdBuilder::MpdType type> diff --git a/docs/d7/d15/mpd__notifier_8h_source.html b/docs/d7/d15/mpd__notifier_8h_source.html index 2660d12683..e1326f93b2 100644 --- a/docs/d7/d15/mpd__notifier_8h_source.html +++ b/docs/d7/d15/mpd__notifier_8h_source.html @@ -169,7 +169,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d1c/structedash__packager_1_1media_1_1mp4_1_1DecodingTime.html b/docs/d7/d1c/structedash__packager_1_1media_1_1mp4_1_1DecodingTime.html index f3ec3bd44a..5d8dd04ac9 100644 --- a/docs/d7/d1c/structedash__packager_1_1media_1_1mp4_1_1DecodingTime.html +++ b/docs/d7/d1c/structedash__packager_1_1media_1_1mp4_1_1DecodingTime.html @@ -105,14 +105,14 @@ uint32_t sample_delta<

Detailed Description

-

Definition at line 323 of file box_definitions.h.

+

Definition at line 327 of file box_definitions.h.


The documentation for this struct was generated from the following file: diff --git a/docs/d7/d22/libcrypto__threading_8h_source.html b/docs/d7/d22/libcrypto__threading_8h_source.html index 8df36cc5df..1c91247b8c 100644 --- a/docs/d7/d22/libcrypto__threading_8h_source.html +++ b/docs/d7/d22/libcrypto__threading_8h_source.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d2a/classedash__packager_1_1media_1_1DecryptorSource-members.html b/docs/d7/d2a/classedash__packager_1_1media_1_1DecryptorSource-members.html index 86f8f79abc..70d419fe60 100644 --- a/docs/d7/d2a/classedash__packager_1_1media_1_1DecryptorSource-members.html +++ b/docs/d7/d2a/classedash__packager_1_1media_1_1DecryptorSource-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d39/structedash__packager_1_1media_1_1mp4_1_1Movie-members.html b/docs/d7/d39/structedash__packager_1_1media_1_1mp4_1_1Movie-members.html index 0810ba2918..87f73b0291 100644 --- a/docs/d7/d39/structedash__packager_1_1media_1_1mp4_1_1Movie-members.html +++ b/docs/d7/d39/structedash__packager_1_1media_1_1mp4_1_1Movie-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html b/docs/d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html index 70eb5800d3..46871aba27 100644 --- a/docs/d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html +++ b/docs/d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html @@ -429,7 +429,7 @@ void set_language (con diff --git a/docs/d7/d40/classedash__packager_1_1media_1_1WebMClusterParser-members.html b/docs/d7/d40/classedash__packager_1_1media_1_1WebMClusterParser-members.html index ae60379dd7..1645b055bd 100644 --- a/docs/d7/d40/classedash__packager_1_1media_1_1WebMClusterParser-members.html +++ b/docs/d7/d40/classedash__packager_1_1media_1_1WebMClusterParser-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d44/classedash__packager_1_1MockMpdNotifier.html b/docs/d7/d44/classedash__packager_1_1MockMpdNotifier.html index 549da91e88..5d659a85ae 100644 --- a/docs/d7/d44/classedash__packager_1_1MockMpdNotifier.html +++ b/docs/d7/d44/classedash__packager_1_1MockMpdNotifier.html @@ -160,7 +160,7 @@ Public Member Functions diff --git a/docs/d7/d49/structedash__packager_1_1media_1_1mp4_1_1CuePayloadBox.html b/docs/d7/d49/structedash__packager_1_1media_1_1mp4_1_1CuePayloadBox.html index 4c7f090532..6791f1791e 100644 --- a/docs/d7/d49/structedash__packager_1_1media_1_1mp4_1_1CuePayloadBox.html +++ b/docs/d7/d49/structedash__packager_1_1media_1_1mp4_1_1CuePayloadBox.html @@ -136,7 +136,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 700 of file box_definitions.h.

+

Definition at line 704 of file box_definitions.h.

Member Function Documentation

@@ -162,7 +162,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 2260 of file box_definitions.cc.

+

Definition at line 2288 of file box_definitions.cc.

@@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html b/docs/d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html index 5df8219649..9e7194aa6e 100644 --- a/docs/d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html +++ b/docs/d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html @@ -162,7 +162,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 939 of file box_definitions.cc.

+

Definition at line 955 of file box_definitions.cc.

@@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d7/d50/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter-members.html b/docs/d7/d50/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter-members.html index a3263787f9..8c78fe11b2 100644 --- a/docs/d7/d50/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter-members.html +++ b/docs/d7/d50/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d52/classedash__packager_1_1media_1_1WebMListParser-members.html b/docs/d7/d52/classedash__packager_1_1media_1_1WebMListParser-members.html index d5c7b18406..01dbb4e9c2 100644 --- a/docs/d7/d52/classedash__packager_1_1media_1_1WebMListParser-members.html +++ b/docs/d7/d52/classedash__packager_1_1media_1_1WebMListParser-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d55/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html b/docs/d7/d55/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html index 025554cd5a..236779201f 100644 --- a/docs/d7/d55/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html +++ b/docs/d7/d55/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html @@ -108,7 +108,7 @@ std::vector< uint8_t > 

Detailed Description

-

Definition at line 603 of file box_definitions.h.

+

Definition at line 607 of file box_definitions.h.


The documentation for this struct was generated from the following files:
  • media/formats/mp4/box_definitions.h
  • media/formats/mp4/box_definitions.cc
  • @@ -116,7 +116,7 @@ std::vector< uint8_t >  diff --git a/docs/d7/d79/structedash__packager_1_1media_1_1mp4_1_1MediaData-members.html b/docs/d7/d79/structedash__packager_1_1media_1_1mp4_1_1MediaData-members.html index 0e3e71aae0..0215aad298 100644 --- a/docs/d7/d79/structedash__packager_1_1media_1_1mp4_1_1MediaData-members.html +++ b/docs/d7/d79/structedash__packager_1_1media_1_1mp4_1_1MediaData-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d7b/structedash__packager_1_1media_1_1mp4_1_1DecodingTime-members.html b/docs/d7/d7b/structedash__packager_1_1media_1_1mp4_1_1DecodingTime-members.html index 77616a44e6..fc34badf5e 100644 --- a/docs/d7/d7b/structedash__packager_1_1media_1_1mp4_1_1DecodingTime-members.html +++ b/docs/d7/d7b/structedash__packager_1_1media_1_1mp4_1_1DecodingTime-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d7c/vlog__flags_8h_source.html b/docs/d7/d7c/vlog__flags_8h_source.html index a6e1d461bd..85e68093a2 100644 --- a/docs/d7/d7c/vlog__flags_8h_source.html +++ b/docs/d7/d7c/vlog__flags_8h_source.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d82/classedash__packager_1_1MpdBuilder-members.html b/docs/d7/d82/classedash__packager_1_1MpdBuilder-members.html index 659d1f5bb0..6b9c676918 100644 --- a/docs/d7/d82/classedash__packager_1_1MpdBuilder-members.html +++ b/docs/d7/d82/classedash__packager_1_1MpdBuilder-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d85/classedash__packager_1_1media_1_1VPCodecConfiguration.html b/docs/d7/d85/classedash__packager_1_1media_1_1VPCodecConfiguration.html index 44ab85e1c6..443760e290 100644 --- a/docs/d7/d85/classedash__packager_1_1media_1_1VPCodecConfiguration.html +++ b/docs/d7/d85/classedash__packager_1_1media_1_1VPCodecConfiguration.html @@ -255,7 +255,7 @@ bool video_full_range_flag diff --git a/docs/d7/d87/video__stream__info_8h_source.html b/docs/d7/d87/video__stream__info_8h_source.html index d3fb264300..0ea9a2563f 100644 --- a/docs/d7/d87/video__stream__info_8h_source.html +++ b/docs/d7/d87/video__stream__info_8h_source.html @@ -188,7 +188,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html b/docs/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html index d1cdaaebbd..4c26d05ac8 100644 --- a/docs/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html +++ b/docs/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html @@ -382,7 +382,7 @@ class BoxBuffer diff --git a/docs/d7/d8f/structedash__packager_1_1media_1_1mp4_1_1CueSourceIDBox-members.html b/docs/d7/d8f/structedash__packager_1_1media_1_1mp4_1_1CueSourceIDBox-members.html index 4ff49e8bf1..4221651c34 100644 --- a/docs/d7/d8f/structedash__packager_1_1media_1_1mp4_1_1CueSourceIDBox-members.html +++ b/docs/d7/d8f/structedash__packager_1_1media_1_1mp4_1_1CueSourceIDBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d9d/progress__listener_8h_source.html b/docs/d7/d9d/progress__listener_8h_source.html index 0ef2acadc0..b285a2fef6 100644 --- a/docs/d7/d9d/progress__listener_8h_source.html +++ b/docs/d7/d9d/progress__listener_8h_source.html @@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/da4/track__run__iterator_8h_source.html b/docs/d7/da4/track__run__iterator_8h_source.html index 0c46a0b0cb..cc2e0d66aa 100644 --- a/docs/d7/da4/track__run__iterator_8h_source.html +++ b/docs/d7/da4/track__run__iterator_8h_source.html @@ -183,19 +183,19 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    const AudioSampleEntry & audio_description() const
    Only valid if is_audio() is true.
    - + - + - + diff --git a/docs/d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html b/docs/d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html index 1fd74b75d6..3bb09522fa 100644 --- a/docs/d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html +++ b/docs/d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html @@ -151,7 +151,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 364 of file box_definitions.h.

    +

    Definition at line 368 of file box_definitions.h.

    Member Function Documentation

    @@ -177,7 +177,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 693 of file box_definitions.cc.

    +

    Definition at line 709 of file box_definitions.cc.

    @@ -188,7 +188,7 @@ Additional Inherited Members diff --git a/docs/d7/db0/mpd__writer_8h_source.html b/docs/d7/db0/mpd__writer_8h_source.html index f15897df3a..493f62e959 100644 --- a/docs/d7/db0/mpd__writer_8h_source.html +++ b/docs/d7/db0/mpd__writer_8h_source.html @@ -184,7 +184,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/db3/structedash__packager_1_1Element-members.html b/docs/d7/db3/structedash__packager_1_1Element-members.html index 4506b4a456..179ea69251 100644 --- a/docs/d7/db3/structedash__packager_1_1Element-members.html +++ b/docs/d7/db3/structedash__packager_1_1Element-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dc6/byte__queue_8h_source.html b/docs/d7/dc6/byte__queue_8h_source.html index 6e3bbe784f..d6ed4c28b9 100644 --- a/docs/d7/dc6/byte__queue_8h_source.html +++ b/docs/d7/dc6/byte__queue_8h_source.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dcc/structedash__packager_1_1media_1_1mp4_1_1WebVTTConfigurationBox.html b/docs/d7/dcc/structedash__packager_1_1media_1_1mp4_1_1WebVTTConfigurationBox.html index ceba34fb37..1440c2285e 100644 --- a/docs/d7/dcc/structedash__packager_1_1media_1_1mp4_1_1WebVTTConfigurationBox.html +++ b/docs/d7/dcc/structedash__packager_1_1media_1_1mp4_1_1WebVTTConfigurationBox.html @@ -136,7 +136,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 292 of file box_definitions.h.

    +

    Definition at line 296 of file box_definitions.h.

    Member Function Documentation

    @@ -162,7 +162,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 1284 of file box_definitions.cc.

    +

    Definition at line 1312 of file box_definitions.cc.

    @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d7/dd0/mpd__notifier__util_8h_source.html b/docs/d7/dd0/mpd__notifier__util_8h_source.html index ed6bbe3906..9a84e39bd3 100644 --- a/docs/d7/dd0/mpd__notifier__util_8h_source.html +++ b/docs/d7/dd0/mpd__notifier__util_8h_source.html @@ -128,7 +128,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dd2/classedash__packager_1_1media_1_1VPxParser-members.html b/docs/d7/dd2/classedash__packager_1_1media_1_1VPxParser-members.html index 64d4dadfd3..4ad665e737 100644 --- a/docs/d7/dd2/classedash__packager_1_1media_1_1VPxParser-members.html +++ b/docs/d7/dd2/classedash__packager_1_1media_1_1VPxParser-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dd4/request__signer_8h_source.html b/docs/d7/dd4/request__signer_8h_source.html index 2b9c2d215d..b9cda68fe1 100644 --- a/docs/d7/dd4/request__signer_8h_source.html +++ b/docs/d7/dd4/request__signer_8h_source.html @@ -178,7 +178,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dd6/key__source_8cc_source.html b/docs/d7/dd6/key__source_8cc_source.html index a39d7d0393..0935628d53 100644 --- a/docs/d7/dd6/key__source_8cc_source.html +++ b/docs/d7/dd6/key__source_8cc_source.html @@ -296,7 +296,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/de3/structedash__packager_1_1xml_1_1XmlDeleter.html b/docs/d7/de3/structedash__packager_1_1xml_1_1XmlDeleter.html index 9660e60fbc..b7e8037991 100644 --- a/docs/d7/de3/structedash__packager_1_1xml_1_1XmlDeleter.html +++ b/docs/d7/de3/structedash__packager_1_1xml_1_1XmlDeleter.html @@ -127,7 +127,7 @@ void operator() (xmlCh diff --git a/docs/d7/dec/h264__byte__to__unit__stream__converter_8h_source.html b/docs/d7/dec/h264__byte__to__unit__stream__converter_8h_source.html index cde225e2e6..71d79b81cd 100644 --- a/docs/d7/dec/h264__byte__to__unit__stream__converter_8h_source.html +++ b/docs/d7/dec/h264__byte__to__unit__stream__converter_8h_source.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html b/docs/d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html index 2860f8c4e5..878cabaaa0 100644 --- a/docs/d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html +++ b/docs/d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html @@ -157,7 +157,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 414 of file box_definitions.h.

    +

    Definition at line 418 of file box_definitions.h.

    Member Function Documentation

    @@ -183,7 +183,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 1348 of file box_definitions.cc.

    +

    Definition at line 1376 of file box_definitions.cc.

    @@ -194,7 +194,7 @@ Additional Inherited Members diff --git a/docs/d7/dee/mpd__generator_8cc_source.html b/docs/d7/dee/mpd__generator_8cc_source.html index 66b41ea4cc..2c9cca77b6 100644 --- a/docs/d7/dee/mpd__generator_8cc_source.html +++ b/docs/d7/dee/mpd__generator_8cc_source.html @@ -194,7 +194,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/def/mp4__media__parser_8cc_source.html b/docs/d7/def/mp4__media__parser_8cc_source.html index 07c48bcd3f..b5a62cc1db 100644 --- a/docs/d7/def/mp4__media__parser_8cc_source.html +++ b/docs/d7/def/mp4__media__parser_8cc_source.html @@ -170,675 +170,714 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    81 }
    82 
    83 const char kWidevineKeySystemId[] = "edef8ba979d64acea3c827dcd51d21ed";
    -
    84 
    -
    85 } // namespace
    +
    84 // Default DTS audio number of channels for 5.1 channel layout.
    +
    85 const uint8_t kDtsAudioNumChannels = 6;
    86 
    -
    87 MP4MediaParser::MP4MediaParser()
    -
    88  : state_(kWaitingForInit), moof_head_(0), mdat_tail_(0) {}
    -
    89 
    -
    90 MP4MediaParser::~MP4MediaParser() {
    -
    91  STLDeleteValues(&decryptor_map_);
    -
    92 }
    -
    93 
    -
    94 void MP4MediaParser::Init(const InitCB& init_cb,
    -
    95  const NewSampleCB& new_sample_cb,
    -
    96  KeySource* decryption_key_source) {
    -
    97  DCHECK_EQ(state_, kWaitingForInit);
    -
    98  DCHECK(init_cb_.is_null());
    -
    99  DCHECK(!init_cb.is_null());
    -
    100  DCHECK(!new_sample_cb.is_null());
    -
    101 
    -
    102  ChangeState(kParsingBoxes);
    -
    103  init_cb_ = init_cb;
    -
    104  new_sample_cb_ = new_sample_cb;
    -
    105  decryption_key_source_ = decryption_key_source;
    -
    106 }
    -
    107 
    -
    108 void MP4MediaParser::Reset() {
    -
    109  queue_.Reset();
    -
    110  runs_.reset();
    -
    111  moof_head_ = 0;
    -
    112  mdat_tail_ = 0;
    -
    113 }
    -
    114 
    - -
    116  DCHECK_NE(state_, kWaitingForInit);
    -
    117  Reset();
    -
    118  ChangeState(kParsingBoxes);
    -
    119 }
    -
    120 
    -
    121 bool MP4MediaParser::Parse(const uint8_t* buf, int size) {
    -
    122  DCHECK_NE(state_, kWaitingForInit);
    -
    123 
    -
    124  if (state_ == kError)
    -
    125  return false;
    -
    126 
    -
    127  queue_.Push(buf, size);
    +
    87 } // namespace
    +
    88 
    +
    89 MP4MediaParser::MP4MediaParser()
    +
    90  : state_(kWaitingForInit), moof_head_(0), mdat_tail_(0) {}
    +
    91 
    +
    92 MP4MediaParser::~MP4MediaParser() {
    +
    93  STLDeleteValues(&decryptor_map_);
    +
    94 }
    +
    95 
    +
    96 void MP4MediaParser::Init(const InitCB& init_cb,
    +
    97  const NewSampleCB& new_sample_cb,
    +
    98  KeySource* decryption_key_source) {
    +
    99  DCHECK_EQ(state_, kWaitingForInit);
    +
    100  DCHECK(init_cb_.is_null());
    +
    101  DCHECK(!init_cb.is_null());
    +
    102  DCHECK(!new_sample_cb.is_null());
    +
    103 
    +
    104  ChangeState(kParsingBoxes);
    +
    105  init_cb_ = init_cb;
    +
    106  new_sample_cb_ = new_sample_cb;
    +
    107  decryption_key_source_ = decryption_key_source;
    +
    108 }
    +
    109 
    +
    110 void MP4MediaParser::Reset() {
    +
    111  queue_.Reset();
    +
    112  runs_.reset();
    +
    113  moof_head_ = 0;
    +
    114  mdat_tail_ = 0;
    +
    115 }
    +
    116 
    + +
    118  DCHECK_NE(state_, kWaitingForInit);
    +
    119  Reset();
    +
    120  ChangeState(kParsingBoxes);
    +
    121 }
    +
    122 
    +
    123 bool MP4MediaParser::Parse(const uint8_t* buf, int size) {
    +
    124  DCHECK_NE(state_, kWaitingForInit);
    +
    125 
    +
    126  if (state_ == kError)
    +
    127  return false;
    128 
    -
    129  bool result, err = false;
    +
    129  queue_.Push(buf, size);
    130 
    -
    131  do {
    -
    132  if (state_ == kParsingBoxes) {
    -
    133  result = ParseBox(&err);
    -
    134  } else {
    -
    135  DCHECK_EQ(kEmittingSamples, state_);
    -
    136  result = EnqueueSample(&err);
    -
    137  if (result) {
    -
    138  int64_t max_clear = runs_->GetMaxClearOffset() + moof_head_;
    -
    139  err = !ReadAndDiscardMDATsUntil(max_clear);
    -
    140  }
    -
    141  }
    -
    142  } while (result && !err);
    -
    143 
    -
    144  if (err) {
    -
    145  DLOG(ERROR) << "Error while parsing MP4";
    -
    146  moov_.reset();
    -
    147  Reset();
    -
    148  ChangeState(kError);
    -
    149  return false;
    -
    150  }
    -
    151 
    -
    152  return true;
    -
    153 }
    -
    154 
    -
    155 bool MP4MediaParser::LoadMoov(const std::string& file_path) {
    -
    156  scoped_ptr<File, FileCloser> file(
    -
    157  File::OpenWithNoBuffering(file_path.c_str(), "r"));
    -
    158  if (!file) {
    -
    159  LOG(ERROR) << "Unable to open media file '" << file_path << "'";
    -
    160  return false;
    -
    161  }
    -
    162  if (!file->Seek(0)) {
    -
    163  LOG(WARNING) << "Filesystem does not support seeking on file '" << file_path
    -
    164  << "'";
    -
    165  return false;
    -
    166  }
    -
    167 
    -
    168  uint64_t file_position(0);
    -
    169  bool mdat_seen(false);
    -
    170  while (true) {
    -
    171  const uint32_t kBoxHeaderReadSize(16);
    -
    172  std::vector<uint8_t> buffer(kBoxHeaderReadSize);
    -
    173  int64_t bytes_read = file->Read(&buffer[0], kBoxHeaderReadSize);
    -
    174  if (bytes_read == 0) {
    -
    175  LOG(ERROR) << "Could not find 'moov' box in file '" << file_path << "'";
    -
    176  return false;
    -
    177  }
    -
    178  if (bytes_read < kBoxHeaderReadSize) {
    -
    179  LOG(ERROR) << "Error reading media file '" << file_path << "'";
    -
    180  return false;
    -
    181  }
    -
    182  uint64_t box_size;
    -
    183  FourCC box_type;
    -
    184  bool err;
    -
    185  if (!BoxReader::StartTopLevelBox(&buffer[0], kBoxHeaderReadSize, &box_type,
    -
    186  &box_size, &err)) {
    -
    187  LOG(ERROR) << "Could not start top level box from file '" << file_path
    -
    188  << "'";
    -
    189  return false;
    -
    190  }
    -
    191  if (box_type == FOURCC_MDAT) {
    -
    192  mdat_seen = true;
    -
    193  } else if (box_type == FOURCC_MOOV) {
    -
    194  if (!mdat_seen) {
    -
    195  // 'moov' is before 'mdat'. Nothing to do.
    -
    196  break;
    -
    197  }
    -
    198  // 'mdat' before 'moov'. Read and parse 'moov'.
    -
    199  if (!Parse(&buffer[0], bytes_read)) {
    -
    200  LOG(ERROR) << "Error parsing mp4 file '" << file_path << "'";
    -
    201  return false;
    -
    202  }
    -
    203  uint64_t bytes_to_read = box_size - bytes_read;
    -
    204  buffer.resize(bytes_to_read);
    -
    205  while (bytes_to_read > 0) {
    -
    206  bytes_read = file->Read(&buffer[0], bytes_to_read);
    -
    207  if (bytes_read <= 0) {
    -
    208  LOG(ERROR) << "Error reading 'moov' contents from file '" << file_path
    -
    209  << "'";
    -
    210  return false;
    -
    211  }
    -
    212  if (!Parse(&buffer[0], bytes_read)) {
    -
    213  LOG(ERROR) << "Error parsing mp4 file '" << file_path << "'";
    -
    214  return false;
    -
    215  }
    -
    216  bytes_to_read -= bytes_read;
    -
    217  }
    -
    218  queue_.Reset(); // So that we don't need to adjust data offsets.
    -
    219  mdat_tail_ = 0; // So it will skip boxes until mdat.
    -
    220  break; // Done.
    -
    221  }
    -
    222  file_position += box_size;
    -
    223  if (!file->Seek(file_position)) {
    -
    224  LOG(ERROR) << "Error skipping box in mp4 file '" << file_path << "'";
    -
    225  return false;
    -
    226  }
    -
    227  }
    -
    228  return true;
    -
    229 }
    -
    230 
    -
    231 bool MP4MediaParser::ParseBox(bool* err) {
    -
    232  const uint8_t* buf;
    -
    233  int size;
    -
    234  queue_.Peek(&buf, &size);
    -
    235  if (!size)
    -
    236  return false;
    -
    237 
    -
    238  scoped_ptr<BoxReader> reader(BoxReader::ReadTopLevelBox(buf, size, err));
    -
    239  if (reader.get() == NULL)
    -
    240  return false;
    -
    241 
    -
    242  if (reader->type() == FOURCC_MDAT) {
    -
    243  // The code ends up here only if a MOOV box is not yet seen.
    -
    244  DCHECK(!moov_);
    -
    245 
    -
    246  NOTIMPLEMENTED() << " Files with MDAT before MOOV is not supported yet.";
    -
    247  *err = true;
    -
    248  return false;
    -
    249  }
    -
    250 
    -
    251  // Set up mdat offset for ReadMDATsUntil().
    -
    252  mdat_tail_ = queue_.head() + reader->size();
    -
    253 
    -
    254  if (reader->type() == FOURCC_MOOV) {
    -
    255  *err = !ParseMoov(reader.get());
    -
    256  } else if (reader->type() == FOURCC_MOOF) {
    -
    257  moof_head_ = queue_.head();
    -
    258  *err = !ParseMoof(reader.get());
    -
    259 
    -
    260  // Return early to avoid evicting 'moof' data from queue. Auxiliary info may
    -
    261  // be located anywhere in the file, including inside the 'moof' itself.
    -
    262  // (Since 'default-base-is-moof' is mandated, no data references can come
    -
    263  // before the head of the 'moof', so keeping this box around is sufficient.)
    -
    264  return !(*err);
    -
    265  } else {
    -
    266  VLOG(2) << "Skipping top-level box: " << FourCCToString(reader->type());
    -
    267  }
    -
    268 
    -
    269  queue_.Pop(reader->size());
    -
    270  return !(*err);
    -
    271 }
    -
    272 
    -
    273 bool MP4MediaParser::ParseMoov(BoxReader* reader) {
    -
    274  if (moov_)
    -
    275  return true; // Already parsed the 'moov' box.
    -
    276 
    -
    277  moov_.reset(new Movie);
    -
    278  RCHECK(moov_->Parse(reader));
    -
    279  runs_.reset();
    -
    280 
    -
    281  std::vector<scoped_refptr<StreamInfo> > streams;
    +
    131  bool result, err = false;
    +
    132 
    +
    133  do {
    +
    134  if (state_ == kParsingBoxes) {
    +
    135  result = ParseBox(&err);
    +
    136  } else {
    +
    137  DCHECK_EQ(kEmittingSamples, state_);
    +
    138  result = EnqueueSample(&err);
    +
    139  if (result) {
    +
    140  int64_t max_clear = runs_->GetMaxClearOffset() + moof_head_;
    +
    141  err = !ReadAndDiscardMDATsUntil(max_clear);
    +
    142  }
    +
    143  }
    +
    144  } while (result && !err);
    +
    145 
    +
    146  if (err) {
    +
    147  DLOG(ERROR) << "Error while parsing MP4";
    +
    148  moov_.reset();
    +
    149  Reset();
    +
    150  ChangeState(kError);
    +
    151  return false;
    +
    152  }
    +
    153 
    +
    154  return true;
    +
    155 }
    +
    156 
    +
    157 bool MP4MediaParser::LoadMoov(const std::string& file_path) {
    +
    158  scoped_ptr<File, FileCloser> file(
    +
    159  File::OpenWithNoBuffering(file_path.c_str(), "r"));
    +
    160  if (!file) {
    +
    161  LOG(ERROR) << "Unable to open media file '" << file_path << "'";
    +
    162  return false;
    +
    163  }
    +
    164  if (!file->Seek(0)) {
    +
    165  LOG(WARNING) << "Filesystem does not support seeking on file '" << file_path
    +
    166  << "'";
    +
    167  return false;
    +
    168  }
    +
    169 
    +
    170  uint64_t file_position(0);
    +
    171  bool mdat_seen(false);
    +
    172  while (true) {
    +
    173  const uint32_t kBoxHeaderReadSize(16);
    +
    174  std::vector<uint8_t> buffer(kBoxHeaderReadSize);
    +
    175  int64_t bytes_read = file->Read(&buffer[0], kBoxHeaderReadSize);
    +
    176  if (bytes_read == 0) {
    +
    177  LOG(ERROR) << "Could not find 'moov' box in file '" << file_path << "'";
    +
    178  return false;
    +
    179  }
    +
    180  if (bytes_read < kBoxHeaderReadSize) {
    +
    181  LOG(ERROR) << "Error reading media file '" << file_path << "'";
    +
    182  return false;
    +
    183  }
    +
    184  uint64_t box_size;
    +
    185  FourCC box_type;
    +
    186  bool err;
    +
    187  if (!BoxReader::StartTopLevelBox(&buffer[0], kBoxHeaderReadSize, &box_type,
    +
    188  &box_size, &err)) {
    +
    189  LOG(ERROR) << "Could not start top level box from file '" << file_path
    +
    190  << "'";
    +
    191  return false;
    +
    192  }
    +
    193  if (box_type == FOURCC_MDAT) {
    +
    194  mdat_seen = true;
    +
    195  } else if (box_type == FOURCC_MOOV) {
    +
    196  if (!mdat_seen) {
    +
    197  // 'moov' is before 'mdat'. Nothing to do.
    +
    198  break;
    +
    199  }
    +
    200  // 'mdat' before 'moov'. Read and parse 'moov'.
    +
    201  if (!Parse(&buffer[0], bytes_read)) {
    +
    202  LOG(ERROR) << "Error parsing mp4 file '" << file_path << "'";
    +
    203  return false;
    +
    204  }
    +
    205  uint64_t bytes_to_read = box_size - bytes_read;
    +
    206  buffer.resize(bytes_to_read);
    +
    207  while (bytes_to_read > 0) {
    +
    208  bytes_read = file->Read(&buffer[0], bytes_to_read);
    +
    209  if (bytes_read <= 0) {
    +
    210  LOG(ERROR) << "Error reading 'moov' contents from file '" << file_path
    +
    211  << "'";
    +
    212  return false;
    +
    213  }
    +
    214  if (!Parse(&buffer[0], bytes_read)) {
    +
    215  LOG(ERROR) << "Error parsing mp4 file '" << file_path << "'";
    +
    216  return false;
    +
    217  }
    +
    218  bytes_to_read -= bytes_read;
    +
    219  }
    +
    220  queue_.Reset(); // So that we don't need to adjust data offsets.
    +
    221  mdat_tail_ = 0; // So it will skip boxes until mdat.
    +
    222  break; // Done.
    +
    223  }
    +
    224  file_position += box_size;
    +
    225  if (!file->Seek(file_position)) {
    +
    226  LOG(ERROR) << "Error skipping box in mp4 file '" << file_path << "'";
    +
    227  return false;
    +
    228  }
    +
    229  }
    +
    230  return true;
    +
    231 }
    +
    232 
    +
    233 bool MP4MediaParser::ParseBox(bool* err) {
    +
    234  const uint8_t* buf;
    +
    235  int size;
    +
    236  queue_.Peek(&buf, &size);
    +
    237  if (!size)
    +
    238  return false;
    +
    239 
    +
    240  scoped_ptr<BoxReader> reader(BoxReader::ReadTopLevelBox(buf, size, err));
    +
    241  if (reader.get() == NULL)
    +
    242  return false;
    +
    243 
    +
    244  if (reader->type() == FOURCC_MDAT) {
    +
    245  // The code ends up here only if a MOOV box is not yet seen.
    +
    246  DCHECK(!moov_);
    +
    247 
    +
    248  NOTIMPLEMENTED() << " Files with MDAT before MOOV is not supported yet.";
    +
    249  *err = true;
    +
    250  return false;
    +
    251  }
    +
    252 
    +
    253  // Set up mdat offset for ReadMDATsUntil().
    +
    254  mdat_tail_ = queue_.head() + reader->size();
    +
    255 
    +
    256  if (reader->type() == FOURCC_MOOV) {
    +
    257  *err = !ParseMoov(reader.get());
    +
    258  } else if (reader->type() == FOURCC_MOOF) {
    +
    259  moof_head_ = queue_.head();
    +
    260  *err = !ParseMoof(reader.get());
    +
    261 
    +
    262  // Return early to avoid evicting 'moof' data from queue. Auxiliary info may
    +
    263  // be located anywhere in the file, including inside the 'moof' itself.
    +
    264  // (Since 'default-base-is-moof' is mandated, no data references can come
    +
    265  // before the head of the 'moof', so keeping this box around is sufficient.)
    +
    266  return !(*err);
    +
    267  } else {
    +
    268  VLOG(2) << "Skipping top-level box: " << FourCCToString(reader->type());
    +
    269  }
    +
    270 
    +
    271  queue_.Pop(reader->size());
    +
    272  return !(*err);
    +
    273 }
    +
    274 
    +
    275 bool MP4MediaParser::ParseMoov(BoxReader* reader) {
    +
    276  if (moov_)
    +
    277  return true; // Already parsed the 'moov' box.
    +
    278 
    +
    279  moov_.reset(new Movie);
    +
    280  RCHECK(moov_->Parse(reader));
    +
    281  runs_.reset();
    282 
    -
    283  for (std::vector<Track>::const_iterator track = moov_->tracks.begin();
    -
    284  track != moov_->tracks.end(); ++track) {
    -
    285  const uint32_t timescale = track->media.header.timescale;
    -
    286 
    -
    287  // Calculate duration (based on timescale).
    -
    288  uint64_t duration = 0;
    -
    289  if (track->media.header.duration > 0) {
    -
    290  duration = track->media.header.duration;
    -
    291  } else if (moov_->extends.header.fragment_duration > 0) {
    -
    292  DCHECK(moov_->header.timescale != 0);
    -
    293  duration = Rescale(moov_->extends.header.fragment_duration,
    -
    294  moov_->header.timescale,
    -
    295  timescale);
    -
    296  } else if (moov_->header.duration > 0 &&
    -
    297  moov_->header.duration != std::numeric_limits<uint64_t>::max()) {
    -
    298  DCHECK(moov_->header.timescale != 0);
    -
    299  duration =
    -
    300  Rescale(moov_->header.duration, moov_->header.timescale, timescale);
    -
    301  }
    -
    302 
    -
    303  const SampleDescription& samp_descr =
    -
    304  track->media.information.sample_table.description;
    -
    305 
    -
    306  size_t desc_idx = 0;
    +
    283  std::vector<scoped_refptr<StreamInfo> > streams;
    +
    284 
    +
    285  for (std::vector<Track>::const_iterator track = moov_->tracks.begin();
    +
    286  track != moov_->tracks.end(); ++track) {
    +
    287  const uint32_t timescale = track->media.header.timescale;
    +
    288 
    +
    289  // Calculate duration (based on timescale).
    +
    290  uint64_t duration = 0;
    +
    291  if (track->media.header.duration > 0) {
    +
    292  duration = track->media.header.duration;
    +
    293  } else if (moov_->extends.header.fragment_duration > 0) {
    +
    294  DCHECK(moov_->header.timescale != 0);
    +
    295  duration = Rescale(moov_->extends.header.fragment_duration,
    +
    296  moov_->header.timescale,
    +
    297  timescale);
    +
    298  } else if (moov_->header.duration > 0 &&
    +
    299  moov_->header.duration != std::numeric_limits<uint64_t>::max()) {
    +
    300  DCHECK(moov_->header.timescale != 0);
    +
    301  duration =
    +
    302  Rescale(moov_->header.duration, moov_->header.timescale, timescale);
    +
    303  }
    +
    304 
    +
    305  const SampleDescription& samp_descr =
    +
    306  track->media.information.sample_table.description;
    307 
    -
    308  // Read sample description index from mvex if it exists otherwise read
    -
    309  // from the first entry in Sample To Chunk box.
    -
    310  if (moov_->extends.tracks.size() > 0) {
    -
    311  for (size_t t = 0; t < moov_->extends.tracks.size(); t++) {
    -
    312  const TrackExtends& trex = moov_->extends.tracks[t];
    -
    313  if (trex.track_id == track->header.track_id) {
    -
    314  desc_idx = trex.default_sample_description_index;
    -
    315  break;
    -
    316  }
    -
    317  }
    -
    318  } else {
    -
    319  const std::vector<ChunkInfo>& chunk_info =
    -
    320  track->media.information.sample_table.sample_to_chunk.chunk_info;
    -
    321  RCHECK(chunk_info.size() > 0);
    -
    322  desc_idx = chunk_info[0].sample_description_index;
    -
    323  }
    -
    324  RCHECK(desc_idx > 0);
    -
    325  desc_idx -= 1; // BMFF descriptor index is one-based
    -
    326 
    -
    327  if (track->media.handler.type == kAudio) {
    -
    328  RCHECK(!samp_descr.audio_entries.empty());
    -
    329 
    -
    330  // It is not uncommon to find otherwise-valid files with incorrect sample
    -
    331  // description indices, so we fail gracefully in that case.
    -
    332  if (desc_idx >= samp_descr.audio_entries.size())
    -
    333  desc_idx = 0;
    -
    334 
    -
    335  const AudioSampleEntry& entry = samp_descr.audio_entries[desc_idx];
    -
    336  const FourCC actual_format = entry.GetActualFormat();
    -
    337  AudioCodec codec = FourCCToAudioCodec(actual_format);
    -
    338  uint8_t num_channels = 0;
    -
    339  uint32_t sampling_frequency = 0;
    -
    340  uint8_t audio_object_type = 0;
    -
    341  std::vector<uint8_t> extra_data;
    -
    342 
    -
    343  switch (actual_format) {
    -
    344  case FOURCC_MP4A:
    -
    345  // Check if it is MPEG4 AAC defined in ISO 14496 Part 3 or
    -
    346  // supported MPEG2 AAC variants.
    -
    347  if (entry.esds.es_descriptor.IsAAC()) {
    -
    348  codec = kCodecAAC;
    -
    349  const AACAudioSpecificConfig& aac_audio_specific_config =
    -
    350  entry.esds.aac_audio_specific_config;
    -
    351  num_channels = aac_audio_specific_config.num_channels();
    -
    352  sampling_frequency = aac_audio_specific_config.frequency();
    -
    353  audio_object_type = aac_audio_specific_config.audio_object_type();
    -
    354  extra_data = entry.esds.es_descriptor.decoder_specific_info();
    -
    355  break;
    -
    356  } else {
    -
    357  LOG(ERROR) << "Unsupported audio format 0x" << std::hex
    -
    358  << actual_format << " in stsd box.";
    -
    359  return false;
    -
    360  }
    -
    361  case FOURCC_DTSC:
    -
    362  case FOURCC_DTSH:
    -
    363  case FOURCC_DTSL:
    -
    364  case FOURCC_DTSE:
    -
    365  case FOURCC_DTSM:
    -
    366  extra_data = entry.ddts.data;
    -
    367  num_channels = entry.channelcount;
    -
    368  sampling_frequency = entry.samplerate;
    -
    369  break;
    -
    370  case FOURCC_EAC3:
    -
    371  num_channels = entry.channelcount;
    -
    372  sampling_frequency = entry.samplerate;
    -
    373  break;
    -
    374  default:
    -
    375  LOG(ERROR) << "Unsupported audio format 0x" << std::hex
    -
    376  << actual_format << " in stsd box.";
    -
    377  return false;
    -
    378  }
    -
    379 
    -
    380  bool is_encrypted = entry.sinf.info.track_encryption.is_encrypted;
    -
    381  DVLOG(1) << "is_audio_track_encrypted_: " << is_encrypted;
    -
    382  streams.push_back(new AudioStreamInfo(
    -
    383  track->header.track_id,
    -
    384  timescale,
    -
    385  duration,
    -
    386  codec,
    -
    387  AudioStreamInfo::GetCodecString(codec, audio_object_type),
    -
    388  track->media.header.language,
    -
    389  entry.samplesize,
    -
    390  num_channels,
    -
    391  sampling_frequency,
    -
    392  extra_data.size() ? &extra_data[0] : NULL,
    -
    393  extra_data.size(),
    -
    394  is_encrypted));
    -
    395  }
    -
    396 
    -
    397  if (track->media.handler.type == kVideo) {
    -
    398  RCHECK(!samp_descr.video_entries.empty());
    -
    399  if (desc_idx >= samp_descr.video_entries.size())
    -
    400  desc_idx = 0;
    -
    401  const VideoSampleEntry& entry = samp_descr.video_entries[desc_idx];
    -
    402 
    -
    403  uint32_t coded_width = entry.width;
    -
    404  uint32_t coded_height = entry.height;
    -
    405  uint32_t pixel_width = entry.pixel_aspect.h_spacing;
    -
    406  uint32_t pixel_height = entry.pixel_aspect.v_spacing;
    -
    407  if (pixel_width == 0 && pixel_height == 0) {
    -
    408  pixel_width = 1;
    -
    409  pixel_height = 1;
    -
    410  }
    -
    411  std::string codec_string;
    -
    412  uint8_t nalu_length_size = 0;
    -
    413 
    -
    414  const FourCC actual_format = entry.GetActualFormat();
    -
    415  const VideoCodec video_codec = FourCCToVideoCodec(actual_format);
    -
    416  switch (actual_format) {
    -
    417  case FOURCC_AVC1: {
    -
    418  AVCDecoderConfiguration avc_config;
    -
    419  if (!avc_config.Parse(entry.codec_config_record.data)) {
    -
    420  LOG(ERROR) << "Failed to parse avcc.";
    -
    421  return false;
    -
    422  }
    -
    423  codec_string = avc_config.GetCodecString();
    -
    424  nalu_length_size = avc_config.length_size();
    -
    425 
    -
    426  if (coded_width != avc_config.coded_width() ||
    -
    427  coded_height != avc_config.coded_height()) {
    -
    428  LOG(WARNING) << "Resolution in VisualSampleEntry (" << coded_width
    -
    429  << "," << coded_height
    -
    430  << ") does not match with resolution in "
    -
    431  "AVCDecoderConfigurationRecord ("
    -
    432  << avc_config.coded_width() << ","
    -
    433  << avc_config.coded_height()
    -
    434  << "). Use AVCDecoderConfigurationRecord.";
    -
    435  coded_width = avc_config.coded_width();
    -
    436  coded_height = avc_config.coded_height();
    -
    437  }
    -
    438 
    -
    439  if (pixel_width != avc_config.pixel_width() ||
    -
    440  pixel_height != avc_config.pixel_height()) {
    -
    441  LOG_IF(WARNING, pixel_width != 1 || pixel_height != 1)
    -
    442  << "Pixel aspect ratio in PASP box (" << pixel_width << ","
    -
    443  << pixel_height
    -
    444  << ") does not match with SAR in AVCDecoderConfigurationRecord "
    -
    445  "("
    -
    446  << avc_config.pixel_width() << "," << avc_config.pixel_height()
    -
    447  << "). Use AVCDecoderConfigurationRecord.";
    -
    448  pixel_width = avc_config.pixel_width();
    -
    449  pixel_height = avc_config.pixel_height();
    -
    450  }
    -
    451  break;
    -
    452  }
    -
    453  case FOURCC_HEV1:
    -
    454  case FOURCC_HVC1: {
    -
    455  HEVCDecoderConfiguration hevc_config;
    -
    456  if (!hevc_config.Parse(entry.codec_config_record.data)) {
    -
    457  LOG(ERROR) << "Failed to parse hevc.";
    -
    458  return false;
    -
    459  }
    -
    460  codec_string = hevc_config.GetCodecString(video_codec);
    -
    461  nalu_length_size = hevc_config.length_size();
    -
    462  break;
    -
    463  }
    -
    464  case FOURCC_VP08:
    -
    465  case FOURCC_VP09:
    -
    466  case FOURCC_VP10: {
    -
    467  VPCodecConfiguration vp_config;
    -
    468  if (!vp_config.Parse(entry.codec_config_record.data)) {
    -
    469  LOG(ERROR) << "Failed to parse vpcc.";
    -
    470  return false;
    -
    471  }
    -
    472  codec_string = vp_config.GetCodecString(video_codec);
    -
    473  break;
    -
    474  }
    -
    475  default:
    -
    476  LOG(ERROR) << "Unsupported video format "
    -
    477  << FourCCToString(actual_format) << " in stsd box.";
    -
    478  return false;
    -
    479  }
    -
    480 
    -
    481  bool is_encrypted = entry.sinf.info.track_encryption.is_encrypted;
    -
    482  DVLOG(1) << "is_video_track_encrypted_: " << is_encrypted;
    -
    483  streams.push_back(new VideoStreamInfo(
    -
    484  track->header.track_id, timescale, duration, video_codec,
    -
    485  codec_string, track->media.header.language, coded_width, coded_height,
    -
    486  pixel_width, pixel_height,
    -
    487  0, // trick_play_rate
    -
    488  nalu_length_size, vector_as_array(&entry.codec_config_record.data),
    -
    489  entry.codec_config_record.data.size(), is_encrypted));
    -
    490  }
    -
    491  }
    -
    492 
    -
    493  init_cb_.Run(streams);
    -
    494  if (!FetchKeysIfNecessary(moov_->pssh))
    -
    495  return false;
    -
    496  runs_.reset(new TrackRunIterator(moov_.get()));
    -
    497  RCHECK(runs_->Init());
    -
    498  ChangeState(kEmittingSamples);
    -
    499  return true;
    -
    500 }
    -
    501 
    -
    502 bool MP4MediaParser::ParseMoof(BoxReader* reader) {
    -
    503  // Must already have initialization segment.
    -
    504  RCHECK(moov_.get());
    -
    505  MovieFragment moof;
    -
    506  RCHECK(moof.Parse(reader));
    -
    507  if (!runs_)
    -
    508  runs_.reset(new TrackRunIterator(moov_.get()));
    -
    509  RCHECK(runs_->Init(moof));
    -
    510  if (!FetchKeysIfNecessary(moof.pssh))
    -
    511  return false;
    -
    512  ChangeState(kEmittingSamples);
    -
    513  return true;
    -
    514 }
    -
    515 
    -
    516 bool MP4MediaParser::FetchKeysIfNecessary(
    -
    517  const std::vector<ProtectionSystemSpecificHeader>& headers) {
    -
    518  if (headers.empty())
    -
    519  return true;
    -
    520 
    -
    521  // An error will be returned later if the samples need to be decrypted.
    -
    522  if (!decryption_key_source_)
    -
    523  return true;
    -
    524 
    -
    525  // TODO(tinskip): Pass in raw 'pssh' boxes to FetchKeys. This will allow
    -
    526  // supporting multiple keysystems. Move this to KeySource.
    -
    527  std::vector<uint8_t> widevine_system_id;
    -
    528  base::HexStringToBytes(kWidevineKeySystemId, &widevine_system_id);
    -
    529  for (std::vector<ProtectionSystemSpecificHeader>::const_iterator iter =
    -
    530  headers.begin(); iter != headers.end(); ++iter) {
    -
    531  if (iter->system_id == widevine_system_id) {
    -
    532  Status status = decryption_key_source_->FetchKeys(iter->data);
    -
    533  if (!status.ok()) {
    -
    534  LOG(ERROR) << "Error fetching decryption keys: " << status;
    -
    535  return false;
    -
    536  }
    -
    537  return true;
    -
    538  }
    -
    539  }
    +
    308  size_t desc_idx = 0;
    +
    309 
    +
    310  // Read sample description index from mvex if it exists otherwise read
    +
    311  // from the first entry in Sample To Chunk box.
    +
    312  if (moov_->extends.tracks.size() > 0) {
    +
    313  for (size_t t = 0; t < moov_->extends.tracks.size(); t++) {
    +
    314  const TrackExtends& trex = moov_->extends.tracks[t];
    +
    315  if (trex.track_id == track->header.track_id) {
    +
    316  desc_idx = trex.default_sample_description_index;
    +
    317  break;
    +
    318  }
    +
    319  }
    +
    320  } else {
    +
    321  const std::vector<ChunkInfo>& chunk_info =
    +
    322  track->media.information.sample_table.sample_to_chunk.chunk_info;
    +
    323  RCHECK(chunk_info.size() > 0);
    +
    324  desc_idx = chunk_info[0].sample_description_index;
    +
    325  }
    +
    326  RCHECK(desc_idx > 0);
    +
    327  desc_idx -= 1; // BMFF descriptor index is one-based
    +
    328 
    +
    329  if (track->media.handler.type == kAudio) {
    +
    330  RCHECK(!samp_descr.audio_entries.empty());
    +
    331 
    +
    332  // It is not uncommon to find otherwise-valid files with incorrect sample
    +
    333  // description indices, so we fail gracefully in that case.
    +
    334  if (desc_idx >= samp_descr.audio_entries.size())
    +
    335  desc_idx = 0;
    +
    336 
    +
    337  const AudioSampleEntry& entry = samp_descr.audio_entries[desc_idx];
    +
    338  const FourCC actual_format = entry.GetActualFormat();
    +
    339  AudioCodec codec = FourCCToAudioCodec(actual_format);
    +
    340  uint8_t num_channels = 0;
    +
    341  uint32_t sampling_frequency = 0;
    +
    342  uint8_t audio_object_type = 0;
    +
    343  uint32_t max_bitrate = 0;
    +
    344  uint32_t avg_bitrate = 0;
    +
    345  std::vector<uint8_t> extra_data;
    +
    346 
    +
    347  switch (actual_format) {
    +
    348  case FOURCC_MP4A:
    +
    349  // Check if it is MPEG4 AAC defined in ISO 14496 Part 3 or
    +
    350  // supported MPEG2 AAC variants.
    +
    351  if (entry.esds.es_descriptor.IsAAC()) {
    +
    352  codec = kCodecAAC;
    +
    353  const AACAudioSpecificConfig& aac_audio_specific_config =
    +
    354  entry.esds.aac_audio_specific_config;
    +
    355  num_channels = aac_audio_specific_config.num_channels();
    +
    356  sampling_frequency = aac_audio_specific_config.frequency();
    +
    357  audio_object_type = aac_audio_specific_config.audio_object_type();
    +
    358  extra_data = entry.esds.es_descriptor.decoder_specific_info();
    +
    359  break;
    +
    360  } else if (entry.esds.es_descriptor.IsDTS()) {
    +
    361  ObjectType audio_type = entry.esds.es_descriptor.object_type();
    +
    362  switch (audio_type) {
    +
    363  case kDTSC:
    +
    364  codec = kCodecDTSC;
    +
    365  break;
    +
    366  case kDTSE:
    +
    367  codec = kCodecDTSE;
    +
    368  break;
    +
    369  case kDTSH:
    +
    370  codec = kCodecDTSH;
    +
    371  break;
    +
    372  case kDTSL:
    +
    373  codec = kCodecDTSL;
    +
    374  break;
    +
    375  default:
    +
    376  LOG(ERROR) << "Unsupported audio type " << audio_type
    +
    377  << " in stsd box.";
    +
    378  return false;
    +
    379  }
    +
    380  num_channels = entry.esds.aac_audio_specific_config.num_channels();
    +
    381  // For dts audio in esds, current supported number of channels is 6
    +
    382  // as the only supported channel layout is 5.1.
    +
    383  if (num_channels != kDtsAudioNumChannels) {
    +
    384  LOG(ERROR) << "Unsupported channel count " << num_channels
    +
    385  << " for audio type " << audio_type << ".";
    +
    386  return false;
    +
    387  }
    +
    388  sampling_frequency = entry.samplerate;
    +
    389  max_bitrate = entry.esds.es_descriptor.max_bitrate();
    +
    390  avg_bitrate = entry.esds.es_descriptor.avg_bitrate();
    +
    391  } else {
    +
    392  LOG(ERROR) << "Unsupported audio format 0x" << std::hex
    +
    393  << actual_format << " in stsd box.";
    +
    394  return false;
    +
    395  }
    +
    396  case FOURCC_DTSC:
    +
    397  case FOURCC_DTSH:
    +
    398  case FOURCC_DTSL:
    +
    399  case FOURCC_DTSE:
    +
    400  case FOURCC_DTSM:
    +
    401  extra_data = entry.ddts.extra_data;
    +
    402  max_bitrate = entry.ddts.max_bitrate;
    +
    403  avg_bitrate = entry.ddts.avg_bitrate;
    +
    404  num_channels = entry.channelcount;
    +
    405  sampling_frequency = entry.samplerate;
    +
    406  break;
    +
    407  case FOURCC_EAC3:
    +
    408  num_channels = entry.channelcount;
    +
    409  sampling_frequency = entry.samplerate;
    +
    410  break;
    +
    411  default:
    +
    412  LOG(ERROR) << "Unsupported audio format 0x" << std::hex
    +
    413  << actual_format << " in stsd box.";
    +
    414  return false;
    +
    415  }
    +
    416 
    +
    417  bool is_encrypted = entry.sinf.info.track_encryption.is_encrypted;
    +
    418  DVLOG(1) << "is_audio_track_encrypted_: " << is_encrypted;
    +
    419  streams.push_back(new AudioStreamInfo(
    +
    420  track->header.track_id,
    +
    421  timescale,
    +
    422  duration,
    +
    423  codec,
    +
    424  AudioStreamInfo::GetCodecString(codec, audio_object_type),
    +
    425  track->media.header.language,
    +
    426  entry.samplesize,
    +
    427  num_channels,
    +
    428  sampling_frequency,
    +
    429  max_bitrate,
    +
    430  avg_bitrate,
    +
    431  vector_as_array(&extra_data),
    +
    432  extra_data.size(),
    +
    433  is_encrypted));
    +
    434  }
    +
    435 
    +
    436  if (track->media.handler.type == kVideo) {
    +
    437  RCHECK(!samp_descr.video_entries.empty());
    +
    438  if (desc_idx >= samp_descr.video_entries.size())
    +
    439  desc_idx = 0;
    +
    440  const VideoSampleEntry& entry = samp_descr.video_entries[desc_idx];
    +
    441 
    +
    442  uint32_t coded_width = entry.width;
    +
    443  uint32_t coded_height = entry.height;
    +
    444  uint32_t pixel_width = entry.pixel_aspect.h_spacing;
    +
    445  uint32_t pixel_height = entry.pixel_aspect.v_spacing;
    +
    446  if (pixel_width == 0 && pixel_height == 0) {
    +
    447  pixel_width = 1;
    +
    448  pixel_height = 1;
    +
    449  }
    +
    450  std::string codec_string;
    +
    451  uint8_t nalu_length_size = 0;
    +
    452 
    +
    453  const FourCC actual_format = entry.GetActualFormat();
    +
    454  const VideoCodec video_codec = FourCCToVideoCodec(actual_format);
    +
    455  switch (actual_format) {
    +
    456  case FOURCC_AVC1: {
    +
    457  AVCDecoderConfiguration avc_config;
    +
    458  if (!avc_config.Parse(entry.codec_config_record.data)) {
    +
    459  LOG(ERROR) << "Failed to parse avcc.";
    +
    460  return false;
    +
    461  }
    +
    462  codec_string = avc_config.GetCodecString();
    +
    463  nalu_length_size = avc_config.length_size();
    +
    464 
    +
    465  if (coded_width != avc_config.coded_width() ||
    +
    466  coded_height != avc_config.coded_height()) {
    +
    467  LOG(WARNING) << "Resolution in VisualSampleEntry (" << coded_width
    +
    468  << "," << coded_height
    +
    469  << ") does not match with resolution in "
    +
    470  "AVCDecoderConfigurationRecord ("
    +
    471  << avc_config.coded_width() << ","
    +
    472  << avc_config.coded_height()
    +
    473  << "). Use AVCDecoderConfigurationRecord.";
    +
    474  coded_width = avc_config.coded_width();
    +
    475  coded_height = avc_config.coded_height();
    +
    476  }
    +
    477 
    +
    478  if (pixel_width != avc_config.pixel_width() ||
    +
    479  pixel_height != avc_config.pixel_height()) {
    +
    480  LOG_IF(WARNING, pixel_width != 1 || pixel_height != 1)
    +
    481  << "Pixel aspect ratio in PASP box (" << pixel_width << ","
    +
    482  << pixel_height
    +
    483  << ") does not match with SAR in AVCDecoderConfigurationRecord "
    +
    484  "("
    +
    485  << avc_config.pixel_width() << "," << avc_config.pixel_height()
    +
    486  << "). Use AVCDecoderConfigurationRecord.";
    +
    487  pixel_width = avc_config.pixel_width();
    +
    488  pixel_height = avc_config.pixel_height();
    +
    489  }
    +
    490  break;
    +
    491  }
    +
    492  case FOURCC_HEV1:
    +
    493  case FOURCC_HVC1: {
    +
    494  HEVCDecoderConfiguration hevc_config;
    +
    495  if (!hevc_config.Parse(entry.codec_config_record.data)) {
    +
    496  LOG(ERROR) << "Failed to parse hevc.";
    +
    497  return false;
    +
    498  }
    +
    499  codec_string = hevc_config.GetCodecString(video_codec);
    +
    500  nalu_length_size = hevc_config.length_size();
    +
    501  break;
    +
    502  }
    +
    503  case FOURCC_VP08:
    +
    504  case FOURCC_VP09:
    +
    505  case FOURCC_VP10: {
    +
    506  VPCodecConfiguration vp_config;
    +
    507  if (!vp_config.Parse(entry.codec_config_record.data)) {
    +
    508  LOG(ERROR) << "Failed to parse vpcc.";
    +
    509  return false;
    +
    510  }
    +
    511  codec_string = vp_config.GetCodecString(video_codec);
    +
    512  break;
    +
    513  }
    +
    514  default:
    +
    515  LOG(ERROR) << "Unsupported video format "
    +
    516  << FourCCToString(actual_format) << " in stsd box.";
    +
    517  return false;
    +
    518  }
    +
    519 
    +
    520  bool is_encrypted = entry.sinf.info.track_encryption.is_encrypted;
    +
    521  DVLOG(1) << "is_video_track_encrypted_: " << is_encrypted;
    +
    522  streams.push_back(new VideoStreamInfo(
    +
    523  track->header.track_id, timescale, duration, video_codec,
    +
    524  codec_string, track->media.header.language, coded_width, coded_height,
    +
    525  pixel_width, pixel_height,
    +
    526  0, // trick_play_rate
    +
    527  nalu_length_size, vector_as_array(&entry.codec_config_record.data),
    +
    528  entry.codec_config_record.data.size(), is_encrypted));
    +
    529  }
    +
    530  }
    +
    531 
    +
    532  init_cb_.Run(streams);
    +
    533  if (!FetchKeysIfNecessary(moov_->pssh))
    +
    534  return false;
    +
    535  runs_.reset(new TrackRunIterator(moov_.get()));
    +
    536  RCHECK(runs_->Init());
    +
    537  ChangeState(kEmittingSamples);
    +
    538  return true;
    +
    539 }
    540 
    -
    541  LOG(ERROR) << "No viable 'pssh' box found for content decryption.";
    -
    542  return false;
    -
    543 }
    -
    544 
    -
    545 bool MP4MediaParser::EnqueueSample(bool* err) {
    -
    546  if (!runs_->IsRunValid()) {
    -
    547  // Remain in kEnqueueingSamples state, discarding data, until the end of
    -
    548  // the current 'mdat' box has been appended to the queue.
    -
    549  if (!queue_.Trim(mdat_tail_))
    -
    550  return false;
    -
    551 
    -
    552  ChangeState(kParsingBoxes);
    -
    553  return true;
    -
    554  }
    -
    555 
    -
    556  if (!runs_->IsSampleValid()) {
    -
    557  runs_->AdvanceRun();
    +
    541 bool MP4MediaParser::ParseMoof(BoxReader* reader) {
    +
    542  // Must already have initialization segment.
    +
    543  RCHECK(moov_.get());
    +
    544  MovieFragment moof;
    +
    545  RCHECK(moof.Parse(reader));
    +
    546  if (!runs_)
    +
    547  runs_.reset(new TrackRunIterator(moov_.get()));
    +
    548  RCHECK(runs_->Init(moof));
    +
    549  if (!FetchKeysIfNecessary(moof.pssh))
    +
    550  return false;
    +
    551  ChangeState(kEmittingSamples);
    +
    552  return true;
    +
    553 }
    +
    554 
    +
    555 bool MP4MediaParser::FetchKeysIfNecessary(
    +
    556  const std::vector<ProtectionSystemSpecificHeader>& headers) {
    +
    557  if (headers.empty())
    558  return true;
    -
    559  }
    -
    560 
    -
    561  DCHECK(!(*err));
    -
    562 
    -
    563  const uint8_t* buf;
    -
    564  int buf_size;
    -
    565  queue_.Peek(&buf, &buf_size);
    -
    566  if (!buf_size)
    -
    567  return false;
    -
    568 
    -
    569  // Skip this entire track if it is not audio nor video.
    -
    570  if (!runs_->is_audio() && !runs_->is_video())
    -
    571  runs_->AdvanceRun();
    -
    572 
    -
    573  // Attempt to cache the auxiliary information first. Aux info is usually
    -
    574  // placed in a contiguous block before the sample data, rather than being
    -
    575  // interleaved. If we didn't cache it, this would require that we retain the
    -
    576  // start of the segment buffer while reading samples. Aux info is typically
    -
    577  // quite small compared to sample data, so this pattern is useful on
    -
    578  // memory-constrained devices where the source buffer consumes a substantial
    -
    579  // portion of the total system memory.
    -
    580  if (runs_->AuxInfoNeedsToBeCached()) {
    -
    581  queue_.PeekAt(runs_->aux_info_offset() + moof_head_, &buf, &buf_size);
    -
    582  if (buf_size < runs_->aux_info_size())
    -
    583  return false;
    -
    584  *err = !runs_->CacheAuxInfo(buf, buf_size);
    -
    585  return !*err;
    -
    586  }
    -
    587 
    -
    588  int64_t sample_offset = runs_->sample_offset() + moof_head_;
    -
    589  queue_.PeekAt(sample_offset, &buf, &buf_size);
    -
    590  if (buf_size < runs_->sample_size()) {
    -
    591  if (sample_offset < queue_.head()) {
    -
    592  LOG(ERROR) << "Incorrect sample offset " << sample_offset
    -
    593  << " < " << queue_.head();
    -
    594  *err = true;
    -
    595  }
    -
    596  return false;
    -
    597  }
    -
    598 
    -
    599  scoped_refptr<MediaSample> stream_sample(MediaSample::CopyFrom(
    -
    600  buf, runs_->sample_size(), runs_->is_keyframe()));
    -
    601  if (runs_->is_encrypted()) {
    -
    602  scoped_ptr<DecryptConfig> decrypt_config = runs_->GetDecryptConfig();
    -
    603  if (!decrypt_config ||
    -
    604  !DecryptSampleBuffer(decrypt_config.get(),
    -
    605  stream_sample->writable_data(),
    -
    606  stream_sample->data_size())) {
    -
    607  *err = true;
    -
    608  LOG(ERROR) << "Cannot decrypt samples.";
    -
    609  return false;
    -
    610  }
    -
    611  }
    -
    612 
    -
    613  stream_sample->set_dts(runs_->dts());
    -
    614  stream_sample->set_pts(runs_->cts());
    -
    615  stream_sample->set_duration(runs_->duration());
    -
    616 
    -
    617  DVLOG(3) << "Pushing frame: "
    -
    618  << ", key=" << runs_->is_keyframe()
    -
    619  << ", dur=" << runs_->duration()
    -
    620  << ", dts=" << runs_->dts()
    -
    621  << ", cts=" << runs_->cts()
    -
    622  << ", size=" << runs_->sample_size();
    -
    623 
    -
    624  if (!new_sample_cb_.Run(runs_->track_id(), stream_sample)) {
    -
    625  *err = true;
    -
    626  LOG(ERROR) << "Failed to process the sample.";
    -
    627  return false;
    -
    628  }
    -
    629 
    -
    630  runs_->AdvanceSample();
    -
    631  return true;
    -
    632 }
    -
    633 
    -
    634 bool MP4MediaParser::DecryptSampleBuffer(const DecryptConfig* decrypt_config,
    -
    635  uint8_t* buffer,
    -
    636  size_t buffer_size) {
    -
    637  DCHECK(decrypt_config);
    -
    638  DCHECK(buffer);
    -
    639 
    -
    640  if (!decryption_key_source_) {
    -
    641  LOG(ERROR) << "Encrypted media sample encountered, but decryption is not "
    -
    642  "enabled";
    -
    643  return false;
    -
    644  }
    -
    645 
    -
    646  // Get the encryptor object.
    -
    647  AesCtrEncryptor* encryptor;
    -
    648  DecryptorMap::iterator found = decryptor_map_.find(decrypt_config->key_id());
    -
    649  if (found == decryptor_map_.end()) {
    -
    650  // Create new AesCtrEncryptor
    -
    651  EncryptionKey key;
    -
    652  Status status(decryption_key_source_->GetKey(decrypt_config->key_id(),
    -
    653  &key));
    -
    654  if (!status.ok()) {
    -
    655  LOG(ERROR) << "Error retrieving decryption key: " << status;
    -
    656  return false;
    -
    657  }
    -
    658  scoped_ptr<AesCtrEncryptor> new_encryptor(new AesCtrEncryptor);
    -
    659  if (!new_encryptor->InitializeWithIv(key.key, decrypt_config->iv())) {
    -
    660  LOG(ERROR) << "Failed to initialize AesCtrEncryptor for decryption.";
    -
    661  return false;
    -
    662  }
    -
    663  encryptor = new_encryptor.release();
    -
    664  decryptor_map_[decrypt_config->key_id()] = encryptor;
    -
    665  } else {
    -
    666  encryptor = found->second;
    +
    559 
    +
    560  // An error will be returned later if the samples need to be decrypted.
    +
    561  if (!decryption_key_source_)
    +
    562  return true;
    +
    563 
    +
    564  // TODO(tinskip): Pass in raw 'pssh' boxes to FetchKeys. This will allow
    +
    565  // supporting multiple keysystems. Move this to KeySource.
    +
    566  std::vector<uint8_t> widevine_system_id;
    +
    567  base::HexStringToBytes(kWidevineKeySystemId, &widevine_system_id);
    +
    568  for (std::vector<ProtectionSystemSpecificHeader>::const_iterator iter =
    +
    569  headers.begin(); iter != headers.end(); ++iter) {
    +
    570  if (iter->system_id == widevine_system_id) {
    +
    571  Status status = decryption_key_source_->FetchKeys(iter->data);
    +
    572  if (!status.ok()) {
    +
    573  LOG(ERROR) << "Error fetching decryption keys: " << status;
    +
    574  return false;
    +
    575  }
    +
    576  return true;
    +
    577  }
    +
    578  }
    +
    579 
    +
    580  LOG(ERROR) << "No viable 'pssh' box found for content decryption.";
    +
    581  return false;
    +
    582 }
    +
    583 
    +
    584 bool MP4MediaParser::EnqueueSample(bool* err) {
    +
    585  if (!runs_->IsRunValid()) {
    +
    586  // Remain in kEnqueueingSamples state, discarding data, until the end of
    +
    587  // the current 'mdat' box has been appended to the queue.
    +
    588  if (!queue_.Trim(mdat_tail_))
    +
    589  return false;
    +
    590 
    +
    591  ChangeState(kParsingBoxes);
    +
    592  return true;
    +
    593  }
    +
    594 
    +
    595  if (!runs_->IsSampleValid()) {
    +
    596  runs_->AdvanceRun();
    +
    597  return true;
    +
    598  }
    +
    599 
    +
    600  DCHECK(!(*err));
    +
    601 
    +
    602  const uint8_t* buf;
    +
    603  int buf_size;
    +
    604  queue_.Peek(&buf, &buf_size);
    +
    605  if (!buf_size)
    +
    606  return false;
    +
    607 
    +
    608  // Skip this entire track if it is not audio nor video.
    +
    609  if (!runs_->is_audio() && !runs_->is_video())
    +
    610  runs_->AdvanceRun();
    +
    611 
    +
    612  // Attempt to cache the auxiliary information first. Aux info is usually
    +
    613  // placed in a contiguous block before the sample data, rather than being
    +
    614  // interleaved. If we didn't cache it, this would require that we retain the
    +
    615  // start of the segment buffer while reading samples. Aux info is typically
    +
    616  // quite small compared to sample data, so this pattern is useful on
    +
    617  // memory-constrained devices where the source buffer consumes a substantial
    +
    618  // portion of the total system memory.
    +
    619  if (runs_->AuxInfoNeedsToBeCached()) {
    +
    620  queue_.PeekAt(runs_->aux_info_offset() + moof_head_, &buf, &buf_size);
    +
    621  if (buf_size < runs_->aux_info_size())
    +
    622  return false;
    +
    623  *err = !runs_->CacheAuxInfo(buf, buf_size);
    +
    624  return !*err;
    +
    625  }
    +
    626 
    +
    627  int64_t sample_offset = runs_->sample_offset() + moof_head_;
    +
    628  queue_.PeekAt(sample_offset, &buf, &buf_size);
    +
    629  if (buf_size < runs_->sample_size()) {
    +
    630  if (sample_offset < queue_.head()) {
    +
    631  LOG(ERROR) << "Incorrect sample offset " << sample_offset
    +
    632  << " < " << queue_.head();
    +
    633  *err = true;
    +
    634  }
    +
    635  return false;
    +
    636  }
    +
    637 
    +
    638  scoped_refptr<MediaSample> stream_sample(MediaSample::CopyFrom(
    +
    639  buf, runs_->sample_size(), runs_->is_keyframe()));
    +
    640  if (runs_->is_encrypted()) {
    +
    641  scoped_ptr<DecryptConfig> decrypt_config = runs_->GetDecryptConfig();
    +
    642  if (!decrypt_config ||
    +
    643  !DecryptSampleBuffer(decrypt_config.get(),
    +
    644  stream_sample->writable_data(),
    +
    645  stream_sample->data_size())) {
    +
    646  *err = true;
    +
    647  LOG(ERROR) << "Cannot decrypt samples.";
    +
    648  return false;
    +
    649  }
    +
    650  }
    +
    651 
    +
    652  stream_sample->set_dts(runs_->dts());
    +
    653  stream_sample->set_pts(runs_->cts());
    +
    654  stream_sample->set_duration(runs_->duration());
    +
    655 
    +
    656  DVLOG(3) << "Pushing frame: "
    +
    657  << ", key=" << runs_->is_keyframe()
    +
    658  << ", dur=" << runs_->duration()
    +
    659  << ", dts=" << runs_->dts()
    +
    660  << ", cts=" << runs_->cts()
    +
    661  << ", size=" << runs_->sample_size();
    +
    662 
    +
    663  if (!new_sample_cb_.Run(runs_->track_id(), stream_sample)) {
    +
    664  *err = true;
    +
    665  LOG(ERROR) << "Failed to process the sample.";
    +
    666  return false;
    667  }
    -
    668  if (!encryptor->SetIv(decrypt_config->iv())) {
    -
    669  LOG(ERROR) << "Invalid initialization vector.";
    -
    670  return false;
    -
    671  }
    +
    668 
    +
    669  runs_->AdvanceSample();
    +
    670  return true;
    +
    671 }
    672 
    -
    673  if (decrypt_config->subsamples().empty()) {
    -
    674  // Sample not encrypted using subsample encryption. Decrypt whole.
    -
    675  if (!encryptor->Decrypt(buffer, buffer_size, buffer)) {
    -
    676  LOG(ERROR) << "Error during bulk sample decryption.";
    -
    677  return false;
    -
    678  }
    -
    679  return true;
    -
    680  }
    -
    681 
    -
    682  // Subsample decryption.
    -
    683  const std::vector<SubsampleEntry>& subsamples = decrypt_config->subsamples();
    -
    684  uint8_t* current_ptr = buffer;
    -
    685  const uint8_t* buffer_end = buffer + buffer_size;
    -
    686  current_ptr += decrypt_config->data_offset();
    -
    687  if (current_ptr > buffer_end) {
    -
    688  LOG(ERROR) << "Subsample data_offset too large.";
    -
    689  return false;
    -
    690  }
    -
    691  for (std::vector<SubsampleEntry>::const_iterator iter = subsamples.begin();
    -
    692  iter != subsamples.end();
    -
    693  ++iter) {
    -
    694  if ((current_ptr + iter->clear_bytes + iter->cipher_bytes) > buffer_end) {
    -
    695  LOG(ERROR) << "Subsamples overflow sample buffer.";
    -
    696  return false;
    -
    697  }
    -
    698  current_ptr += iter->clear_bytes;
    -
    699  if (!encryptor->Decrypt(current_ptr, iter->cipher_bytes, current_ptr)) {
    -
    700  LOG(ERROR) << "Error decrypting subsample buffer.";
    -
    701  return false;
    -
    702  }
    -
    703  current_ptr += iter->cipher_bytes;
    -
    704  }
    -
    705  return true;
    -
    706 }
    -
    707 
    -
    708 bool MP4MediaParser::ReadAndDiscardMDATsUntil(const int64_t offset) {
    -
    709  bool err = false;
    -
    710  while (mdat_tail_ < offset) {
    -
    711  const uint8_t* buf;
    -
    712  int size;
    -
    713  queue_.PeekAt(mdat_tail_, &buf, &size);
    -
    714 
    -
    715  FourCC type;
    -
    716  uint64_t box_sz;
    -
    717  if (!BoxReader::StartTopLevelBox(buf, size, &type, &box_sz, &err))
    -
    718  break;
    -
    719 
    -
    720  mdat_tail_ += box_sz;
    -
    721  }
    -
    722  queue_.Trim(std::min(mdat_tail_, offset));
    -
    723  return !err;
    -
    724 }
    -
    725 
    -
    726 void MP4MediaParser::ChangeState(State new_state) {
    -
    727  DVLOG(2) << "Changing state: " << new_state;
    -
    728  state_ = new_state;
    -
    729 }
    -
    730 
    -
    731 } // namespace mp4
    -
    732 } // namespace media
    -
    733 } // namespace edash_packager
    +
    673 bool MP4MediaParser::DecryptSampleBuffer(const DecryptConfig* decrypt_config,
    +
    674  uint8_t* buffer,
    +
    675  size_t buffer_size) {
    +
    676  DCHECK(decrypt_config);
    +
    677  DCHECK(buffer);
    +
    678 
    +
    679  if (!decryption_key_source_) {
    +
    680  LOG(ERROR) << "Encrypted media sample encountered, but decryption is not "
    +
    681  "enabled";
    +
    682  return false;
    +
    683  }
    +
    684 
    +
    685  // Get the encryptor object.
    +
    686  AesCtrEncryptor* encryptor;
    +
    687  DecryptorMap::iterator found = decryptor_map_.find(decrypt_config->key_id());
    +
    688  if (found == decryptor_map_.end()) {
    +
    689  // Create new AesCtrEncryptor
    +
    690  EncryptionKey key;
    +
    691  Status status(decryption_key_source_->GetKey(decrypt_config->key_id(),
    +
    692  &key));
    +
    693  if (!status.ok()) {
    +
    694  LOG(ERROR) << "Error retrieving decryption key: " << status;
    +
    695  return false;
    +
    696  }
    +
    697  scoped_ptr<AesCtrEncryptor> new_encryptor(new AesCtrEncryptor);
    +
    698  if (!new_encryptor->InitializeWithIv(key.key, decrypt_config->iv())) {
    +
    699  LOG(ERROR) << "Failed to initialize AesCtrEncryptor for decryption.";
    +
    700  return false;
    +
    701  }
    +
    702  encryptor = new_encryptor.release();
    +
    703  decryptor_map_[decrypt_config->key_id()] = encryptor;
    +
    704  } else {
    +
    705  encryptor = found->second;
    +
    706  }
    +
    707  if (!encryptor->SetIv(decrypt_config->iv())) {
    +
    708  LOG(ERROR) << "Invalid initialization vector.";
    +
    709  return false;
    +
    710  }
    +
    711 
    +
    712  if (decrypt_config->subsamples().empty()) {
    +
    713  // Sample not encrypted using subsample encryption. Decrypt whole.
    +
    714  if (!encryptor->Decrypt(buffer, buffer_size, buffer)) {
    +
    715  LOG(ERROR) << "Error during bulk sample decryption.";
    +
    716  return false;
    +
    717  }
    +
    718  return true;
    +
    719  }
    +
    720 
    +
    721  // Subsample decryption.
    +
    722  const std::vector<SubsampleEntry>& subsamples = decrypt_config->subsamples();
    +
    723  uint8_t* current_ptr = buffer;
    +
    724  const uint8_t* buffer_end = buffer + buffer_size;
    +
    725  current_ptr += decrypt_config->data_offset();
    +
    726  if (current_ptr > buffer_end) {
    +
    727  LOG(ERROR) << "Subsample data_offset too large.";
    +
    728  return false;
    +
    729  }
    +
    730  for (std::vector<SubsampleEntry>::const_iterator iter = subsamples.begin();
    +
    731  iter != subsamples.end();
    +
    732  ++iter) {
    +
    733  if ((current_ptr + iter->clear_bytes + iter->cipher_bytes) > buffer_end) {
    +
    734  LOG(ERROR) << "Subsamples overflow sample buffer.";
    +
    735  return false;
    +
    736  }
    +
    737  current_ptr += iter->clear_bytes;
    +
    738  if (!encryptor->Decrypt(current_ptr, iter->cipher_bytes, current_ptr)) {
    +
    739  LOG(ERROR) << "Error decrypting subsample buffer.";
    +
    740  return false;
    +
    741  }
    +
    742  current_ptr += iter->cipher_bytes;
    +
    743  }
    +
    744  return true;
    +
    745 }
    +
    746 
    +
    747 bool MP4MediaParser::ReadAndDiscardMDATsUntil(const int64_t offset) {
    +
    748  bool err = false;
    +
    749  while (mdat_tail_ < offset) {
    +
    750  const uint8_t* buf;
    +
    751  int size;
    +
    752  queue_.PeekAt(mdat_tail_, &buf, &size);
    +
    753 
    +
    754  FourCC type;
    +
    755  uint64_t box_sz;
    +
    756  if (!BoxReader::StartTopLevelBox(buf, size, &type, &box_sz, &err))
    +
    757  break;
    +
    758 
    +
    759  mdat_tail_ += box_sz;
    +
    760  }
    +
    761  queue_.Trim(std::min(mdat_tail_, offset));
    +
    762  return !err;
    +
    763 }
    +
    764 
    +
    765 void MP4MediaParser::ChangeState(State new_state) {
    +
    766  DVLOG(2) << "Changing state: " << new_state;
    +
    767  state_ = new_state;
    +
    768 }
    +
    769 
    +
    770 } // namespace mp4
    +
    771 } // namespace media
    +
    772 } // namespace edash_packager
    static BoxReader * ReadTopLevelBox(const uint8_t *buf, const size_t buf_size, bool *err)
    Definition: box_reader.cc:37
    virtual Status GetKey(TrackType track_type, EncryptionKey *key)
    Definition: key_source.cc:46
    -
    bool Parse(const uint8_t *buf, int size) override
    +
    bool Parse(const uint8_t *buf, int size) override
    static scoped_refptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
    Definition: media_sample.cc:45
    void PeekAt(int64_t offset, const uint8_t **buf, int *size)
    - -
    bool LoadMoov(const std::string &file_path)
    + +
    bool LoadMoov(const std::string &file_path)
    virtual Status FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy)
    Definition: key_source.cc:30
    KeySource is responsible for encryption key acquisition.
    Definition: key_source.h:29
    static bool StartTopLevelBox(const uint8_t *buf, const size_t buf_size, FourCC *type, uint64_t *box_size, bool *err) WARN_UNUSED_RESULT
    Definition: box_reader.cc:60
    -
    void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) override
    +
    void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) override
    static File * OpenWithNoBuffering(const char *file_name, const char *mode)
    Definition: file.cc:151
    -
    static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
    +
    static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
    diff --git a/docs/d7/df1/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex-members.html b/docs/d7/df1/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex-members.html index 27a9ad788e..0e25a8fde1 100644 --- a/docs/d7/df1/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex-members.html +++ b/docs/d7/df1/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/df3/classedash__packager_1_1media_1_1File-members.html b/docs/d7/df3/classedash__packager_1_1media_1_1File-members.html index e44dc3acb7..dfb6802349 100644 --- a/docs/d7/df3/classedash__packager_1_1media_1_1File-members.html +++ b/docs/d7/df3/classedash__packager_1_1media_1_1File-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/df9/byte__queue_8cc_source.html b/docs/d7/df9/byte__queue_8cc_source.html index 9ad6419dce..521a04a87f 100644 --- a/docs/d7/df9/byte__queue_8cc_source.html +++ b/docs/d7/df9/byte__queue_8cc_source.html @@ -182,7 +182,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dfa/classedash__packager_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter.html b/docs/d7/dfa/classedash__packager_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter.html index 20cc869739..9ca1fac395 100644 --- a/docs/d7/dfa/classedash__packager_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter.html +++ b/docs/d7/dfa/classedash__packager_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter.html @@ -214,7 +214,7 @@ double cluster_length_sec< diff --git a/docs/d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html b/docs/d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html index 2895cff9d6..9fb8d949b2 100644 --- a/docs/d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html +++ b/docs/d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html @@ -155,7 +155,7 @@ track_id, const scoped_refptr

    Implements edash_packager::media::MediaParser.

    -

    Definition at line 115 of file mp4_media_parser.cc.

    +

    Definition at line 117 of file mp4_media_parser.cc.

    @@ -207,7 +207,7 @@ track_id, const scoped_refptr

    Implements edash_packager::media::MediaParser.

    -

    Definition at line 94 of file mp4_media_parser.cc.

    +

    Definition at line 96 of file mp4_media_parser.cc.

    @@ -233,7 +233,7 @@ track_id, const scoped_refptr
    Returns
    true if successful, false otherwise.
    -

    Definition at line 155 of file mp4_media_parser.cc.

    +

    Definition at line 157 of file mp4_media_parser.cc.

    @@ -273,7 +273,7 @@ track_id, const scoped_refptr

    Implements edash_packager::media::MediaParser.

    -

    Definition at line 121 of file mp4_media_parser.cc.

    +

    Definition at line 123 of file mp4_media_parser.cc.

    @@ -284,7 +284,7 @@ track_id, const scoped_refptr
    diff --git a/docs/d8/d0d/media__sample_8cc_source.html b/docs/d8/d0d/media__sample_8cc_source.html index a36cceca03..fb16f86513 100644 --- a/docs/d8/d0d/media__sample_8cc_source.html +++ b/docs/d8/d0d/media__sample_8cc_source.html @@ -195,7 +195,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d19/bandwidth__estimator_8h_source.html b/docs/d8/d19/bandwidth__estimator_8h_source.html index 8f7466a63b..84994b8168 100644 --- a/docs/d8/d19/bandwidth__estimator_8h_source.html +++ b/docs/d8/d19/bandwidth__estimator_8h_source.html @@ -133,7 +133,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html b/docs/d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html index 7b84dab708..8f444ef965 100644 --- a/docs/d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html +++ b/docs/d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html @@ -374,7 +374,7 @@ void set_encryption_key diff --git a/docs/d8/d21/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo.html b/docs/d8/d21/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo.html index bb3db8686a..1e9f0bae87 100644 --- a/docs/d8/d21/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo.html +++ b/docs/d8/d21/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo.html @@ -108,14 +108,14 @@ uint32_t sample_descriptio

    Detailed Description

    -

    Definition at line 350 of file box_definitions.h.

    +

    Definition at line 354 of file box_definitions.h.


    The documentation for this struct was generated from the following file: diff --git a/docs/d8/d22/classedash__packager_1_1media_1_1HttpKeyFetcher-members.html b/docs/d8/d22/classedash__packager_1_1media_1_1HttpKeyFetcher-members.html index a29813c0b5..fe7531dde0 100644 --- a/docs/d8/d22/classedash__packager_1_1media_1_1HttpKeyFetcher-members.html +++ b/docs/d8/d22/classedash__packager_1_1media_1_1HttpKeyFetcher-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d25/classedash__packager_1_1media_1_1ProducerConsumerQueue-members.html b/docs/d8/d25/classedash__packager_1_1media_1_1ProducerConsumerQueue-members.html index 48a721d928..bdc9794f89 100644 --- a/docs/d8/d25/classedash__packager_1_1media_1_1ProducerConsumerQueue-members.html +++ b/docs/d8/d25/classedash__packager_1_1media_1_1ProducerConsumerQueue-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d26/structedash__packager_1_1media_1_1mp4_1_1SegmentType-members.html b/docs/d8/d26/structedash__packager_1_1media_1_1mp4_1_1SegmentType-members.html index dbc79126fa..5ab8a7c92c 100644 --- a/docs/d8/d26/structedash__packager_1_1media_1_1mp4_1_1SegmentType-members.html +++ b/docs/d8/d26/structedash__packager_1_1media_1_1mp4_1_1SegmentType-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html b/docs/d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html index 19d030f215..b539dad712 100644 --- a/docs/d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html +++ b/docs/d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html @@ -177,7 +177,7 @@ void  diff --git a/docs/d8/d32/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize-members.html b/docs/d8/d32/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize-members.html index 8351c55273..479a997656 100644 --- a/docs/d8/d32/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize-members.html +++ b/docs/d8/d32/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d33/webm__content__encodings__client_8h_source.html b/docs/d8/d33/webm__content__encodings__client_8h_source.html index 0fe975a756..4e06dd7e4f 100644 --- a/docs/d8/d33/webm__content__encodings__client_8h_source.html +++ b/docs/d8/d33/webm__content__encodings__client_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d34/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html b/docs/d8/d34/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html index cf02e8c36c..606ab4d288 100644 --- a/docs/d8/d34/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html +++ b/docs/d8/d34/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html b/docs/d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html index ac9a3e67b3..3d8a9455ed 100644 --- a/docs/d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html +++ b/docs/d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html @@ -171,7 +171,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 902 of file box_definitions.cc.

    +

    Definition at line 918 of file box_definitions.cc.

    @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d8/d6a/classedash__packager_1_1media_1_1AudioStreamInfo-members.html b/docs/d8/d6a/classedash__packager_1_1media_1_1AudioStreamInfo-members.html index 9f96f18980..3ed9769f61 100644 --- a/docs/d8/d6a/classedash__packager_1_1media_1_1AudioStreamInfo-members.html +++ b/docs/d8/d6a/classedash__packager_1_1media_1_1AudioStreamInfo-members.html @@ -93,16 +93,18 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');

    This is the complete list of members for edash_packager::media::AudioStreamInfo, including all inherited members.

    - - - - - - - - - - + + + + + + + + + + + + @@ -122,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)edash_packager::media::AudioStreamInfo
    bytes_per_frame() const (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
    codec() const (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
    codec_string() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
    duration() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
    extra_data() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
    GetCodecString(AudioCodec codec, uint8_t audio_object_type)edash_packager::media::AudioStreamInfostatic
    is_encrypted() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
    IsValidConfig() const overrideedash_packager::media::AudioStreamInfovirtual
    language() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
    AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, uint32_t max_bitrate, uint32_t avg_bitrate, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)edash_packager::media::AudioStreamInfo
    avg_bitrate() const (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
    bytes_per_frame() const (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
    codec() const (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
    codec_string() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
    duration() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
    extra_data() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
    GetCodecString(AudioCodec codec, uint8_t audio_object_type)edash_packager::media::AudioStreamInfostatic
    is_encrypted() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
    IsValidConfig() const overrideedash_packager::media::AudioStreamInfovirtual
    language() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
    max_bitrate() const (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
    num_channels() const (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
    sample_bits() const (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
    sample_bytes() const (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
    diff --git a/docs/d8/d6c/classedash__packager_1_1media_1_1MediaSample.html b/docs/d8/d6c/classedash__packager_1_1media_1_1MediaSample.html index 0bf80ec0b8..91c9239dc5 100644 --- a/docs/d8/d6c/classedash__packager_1_1media_1_1MediaSample.html +++ b/docs/d8/d6c/classedash__packager_1_1media_1_1MediaSample.html @@ -408,7 +408,7 @@ class base::RefCountedThre diff --git a/docs/d8/d6f/classedash__packager_1_1MockAdaptationSet-members.html b/docs/d8/d6f/classedash__packager_1_1MockAdaptationSet-members.html index ca16b7d84c..b24ea1cbba 100644 --- a/docs/d8/d6f/classedash__packager_1_1MockAdaptationSet-members.html +++ b/docs/d8/d6f/classedash__packager_1_1MockAdaptationSet-members.html @@ -126,7 +126,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d6f/structedash__packager_1_1media_1_1mp4_1_1TrackFragment-members.html b/docs/d8/d6f/structedash__packager_1_1media_1_1mp4_1_1TrackFragment-members.html index 80bbd95355..e36ccf95cc 100644 --- a/docs/d8/d6f/structedash__packager_1_1media_1_1mp4_1_1TrackFragment-members.html +++ b/docs/d8/d6f/structedash__packager_1_1media_1_1mp4_1_1TrackFragment-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html b/docs/d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html index ef51e7404a..789e181313 100644 --- a/docs/d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html +++ b/docs/d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html @@ -320,7 +320,7 @@ Public Member Functions diff --git a/docs/d8/d74/classedash__packager_1_1Representation-members.html b/docs/d8/d74/classedash__packager_1_1Representation-members.html index 6b8d476462..ca9c7c3b2b 100644 --- a/docs/d8/d74/classedash__packager_1_1Representation-members.html +++ b/docs/d8/d74/classedash__packager_1_1Representation-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d75/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html b/docs/d8/d75/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html index 05da481794..402d6a355a 100644 --- a/docs/d8/d75/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html +++ b/docs/d8/d75/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d78/classedash__packager_1_1MockAdaptationSet.html b/docs/d8/d78/classedash__packager_1_1MockAdaptationSet.html index f1a24b2ccb..faa4134a6f 100644 --- a/docs/d8/d78/classedash__packager_1_1MockAdaptationSet.html +++ b/docs/d8/d78/classedash__packager_1_1MockAdaptationSet.html @@ -183,7 +183,7 @@ Additional Inherited Members diff --git a/docs/d8/d78/classedash__packager_1_1media_1_1WebMContentEncodingsClient.html b/docs/d8/d78/classedash__packager_1_1media_1_1WebMContentEncodingsClient.html index cd8aefb9d3..6fbc5c9b85 100644 --- a/docs/d8/d78/classedash__packager_1_1media_1_1WebMContentEncodingsClient.html +++ b/docs/d8/d78/classedash__packager_1_1media_1_1WebMContentEncodingsClient.html @@ -152,7 +152,7 @@ Additional Inherited Members diff --git a/docs/d8/d82/classedash__packager_1_1media_1_1MpdNotifyMuxerListener-members.html b/docs/d8/d82/classedash__packager_1_1media_1_1MpdNotifyMuxerListener-members.html index cb1356d23b..dd59149209 100644 --- a/docs/d8/d82/classedash__packager_1_1media_1_1MpdNotifyMuxerListener-members.html +++ b/docs/d8/d82/classedash__packager_1_1media_1_1MpdNotifyMuxerListener-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.html b/docs/d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.html index 0c3644c5f1..ccb56c7794 100644 --- a/docs/d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.html +++ b/docs/d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.html @@ -141,7 +141,7 @@ virtual void Reset ()= diff --git a/docs/d8/d94/adts__constants_8cc_source.html b/docs/d8/d94/adts__constants_8cc_source.html index 4204cc57f4..d5a659fc80 100644 --- a/docs/d8/d94/adts__constants_8cc_source.html +++ b/docs/d8/d94/adts__constants_8cc_source.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d97/structedash__packager_1_1ContentProtectionElement-members.html b/docs/d8/d97/structedash__packager_1_1ContentProtectionElement-members.html index a0d6e90ed5..5b0ec27594 100644 --- a/docs/d8/d97/structedash__packager_1_1ContentProtectionElement-members.html +++ b/docs/d8/d97/structedash__packager_1_1ContentProtectionElement-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d9a/fragmenter_8cc_source.html b/docs/d8/d9a/fragmenter_8cc_source.html index e7dca5c40e..2721b9b169 100644 --- a/docs/d8/d9a/fragmenter_8cc_source.html +++ b/docs/d8/d9a/fragmenter_8cc_source.html @@ -240,15 +240,15 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    virtual Status InitializeFragment(int64_t first_sample_dts)
    Definition: fragmenter.cc:73
    virtual Status AddSample(scoped_refptr< MediaSample > sample)
    Definition: fragmenter.cc:36
    - +
    bool OptimizeSampleEntries(std::vector< T > *entries, T *default_value)
    Definition: fragmenter.h:89
    - +
    virtual void FinalizeFragment()
    Finalize and optimize the fragment.
    Definition: fragmenter.cc:90
    diff --git a/docs/d8/d9c/webm__tracks__parser_8cc_source.html b/docs/d8/d9c/webm__tracks__parser_8cc_source.html index 4727c358bb..4c2b0c1266 100644 --- a/docs/d8/d9c/webm__tracks__parser_8cc_source.html +++ b/docs/d8/d9c/webm__tracks__parser_8cc_source.html @@ -440,7 +440,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d9f/udp__file_8h_source.html b/docs/d8/d9f/udp__file_8h_source.html index 2bc5276cf4..da37520cc0 100644 --- a/docs/d8/d9f/udp__file_8h_source.html +++ b/docs/d8/d9f/udp__file_8h_source.html @@ -147,7 +147,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html b/docs/d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html index 8e1be08b22..9b22a52f43 100644 --- a/docs/d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html +++ b/docs/d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html @@ -255,7 +255,7 @@ track_id, const scoped_refptr
    diff --git a/docs/d8/da1/classedash__packager_1_1media_1_1WidevineKeySource-members.html b/docs/d8/da1/classedash__packager_1_1media_1_1WidevineKeySource-members.html index 2072fbf11f..f452edd5fb 100644 --- a/docs/d8/da1/classedash__packager_1_1media_1_1WidevineKeySource-members.html +++ b/docs/d8/da1/classedash__packager_1_1media_1_1WidevineKeySource-members.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/da6/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader-members.html b/docs/d8/da6/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader-members.html index ef5fefa76a..2966a62c60 100644 --- a/docs/d8/da6/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader-members.html +++ b/docs/d8/da6/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/daa/stream__info_8h_source.html b/docs/d8/daa/stream__info_8h_source.html index 08a310b2f5..2fc462fe33 100644 --- a/docs/d8/daa/stream__info_8h_source.html +++ b/docs/d8/daa/stream__info_8h_source.html @@ -185,7 +185,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/db0/structedash__packager_1_1media_1_1H264SPS.html b/docs/d8/db0/structedash__packager_1_1media_1_1H264SPS.html index 54dcfc15f4..a8144966da 100644 --- a/docs/d8/db0/structedash__packager_1_1media_1_1H264SPS.html +++ b/docs/d8/db0/structedash__packager_1_1media_1_1H264SPS.html @@ -242,7 +242,7 @@ int chroma_array_type< diff --git a/docs/d8/dbb/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData-members.html b/docs/d8/dbb/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData-members.html index 4b3395157f..7d69d1ea9e 100644 --- a/docs/d8/dbb/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData-members.html +++ b/docs/d8/dbb/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dc7/classedash__packager_1_1media_1_1UdpFile.html b/docs/d8/dc7/classedash__packager_1_1media_1_1UdpFile.html index b3586b0014..9d010ec487 100644 --- a/docs/d8/dc7/classedash__packager_1_1media_1_1UdpFile.html +++ b/docs/d8/dc7/classedash__packager_1_1media_1_1UdpFile.html @@ -463,7 +463,7 @@ Additional Inherited Members diff --git a/docs/d8/dca/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor-members.html b/docs/d8/dca/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor-members.html index e4f08ad232..747e73a72c 100644 --- a/docs/d8/dca/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor-members.html +++ b/docs/d8/dca/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html b/docs/d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html index 27d060d76f..f17ac6c715 100644 --- a/docs/d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html +++ b/docs/d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html @@ -188,7 +188,7 @@ Additional Inherited Members diff --git a/docs/d8/dcf/classedash__packager_1_1media_1_1RsaRequestSigner-members.html b/docs/d8/dcf/classedash__packager_1_1media_1_1RsaRequestSigner-members.html index 77bbd54300..e892f16038 100644 --- a/docs/d8/dcf/classedash__packager_1_1media_1_1RsaRequestSigner-members.html +++ b/docs/d8/dcf/classedash__packager_1_1media_1_1RsaRequestSigner-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/de5/structedash__packager_1_1media_1_1mp4_1_1SampleEncryptionEntry.html b/docs/d8/de5/structedash__packager_1_1media_1_1mp4_1_1SampleEncryptionEntry.html index a11b39b359..00d481deb7 100644 --- a/docs/d8/de5/structedash__packager_1_1media_1_1mp4_1_1SampleEncryptionEntry.html +++ b/docs/d8/de5/structedash__packager_1_1media_1_1mp4_1_1SampleEncryptionEntry.html @@ -133,7 +133,7 @@ std::vector<
    Returns
    The size of the structure in bytes when it is stored.
    -

    Definition at line 244 of file box_definitions.cc.

    +

    Definition at line 260 of file box_definitions.cc.

    @@ -151,7 +151,7 @@ std::vector<
    Returns
    The accumulated size of subsamples. Returns 0 if there is no subsamples.
    -

    Definition at line 253 of file box_definitions.cc.

    +

    Definition at line 269 of file box_definitions.cc.

    @@ -195,7 +195,7 @@ std::vector<
    Returns
    true on success, false otherwise.
    -

    Definition at line 219 of file box_definitions.cc.

    +

    Definition at line 235 of file box_definitions.cc.

    @@ -239,7 +239,7 @@ std::vector<
    Returns
    true on success, false otherwise.
    -

    Definition at line 195 of file box_definitions.cc.

    +

    Definition at line 211 of file box_definitions.cc.

    @@ -250,7 +250,7 @@ std::vector< diff --git a/docs/d8/de6/webm__crypto__helpers_8h_source.html b/docs/d8/de6/webm__crypto__helpers_8h_source.html index 31f27a8a46..5cd3f09a0b 100644 --- a/docs/d8/de6/webm__crypto__helpers_8h_source.html +++ b/docs/d8/de6/webm__crypto__helpers_8h_source.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/df0/webm_2single__segment__segmenter_8cc_source.html b/docs/d8/df0/webm_2single__segment__segmenter_8cc_source.html index 5b1ba1be91..b50f2274e0 100644 --- a/docs/d8/df0/webm_2single__segment__segmenter_8cc_source.html +++ b/docs/d8/df0/webm_2single__segment__segmenter_8cc_source.html @@ -179,7 +179,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/df1/classedash__packager_1_1MpdWriter-members.html b/docs/d8/df1/classedash__packager_1_1MpdWriter-members.html index 673089602d..7494bb60d9 100644 --- a/docs/d8/df1/classedash__packager_1_1MpdWriter-members.html +++ b/docs/d8/df1/classedash__packager_1_1MpdWriter-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dfd/structedash__packager_1_1media_1_1VPxFrameInfo.html b/docs/d8/dfd/structedash__packager_1_1media_1_1VPxFrameInfo.html index bf3c1c1e70..62d13eeba8 100644 --- a/docs/d8/dfd/structedash__packager_1_1media_1_1VPxFrameInfo.html +++ b/docs/d8/dfd/structedash__packager_1_1media_1_1VPxFrameInfo.html @@ -121,7 +121,7 @@ uint32_t height diff --git a/docs/d9/d01/mp4_2single__segment__segmenter_8h_source.html b/docs/d9/d01/mp4_2single__segment__segmenter_8h_source.html index 4b78819535..43525352f0 100644 --- a/docs/d9/d01/mp4_2single__segment__segmenter_8h_source.html +++ b/docs/d9/d01/mp4_2single__segment__segmenter_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d08/mock__mpd__builder_8h_source.html b/docs/d9/d08/mock__mpd__builder_8h_source.html index a63ab4a1dd..fa2f2e80ee 100644 --- a/docs/d9/d08/mock__mpd__builder_8h_source.html +++ b/docs/d9/d08/mock__mpd__builder_8h_source.html @@ -180,7 +180,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d15/key__rotation__fragmenter_8cc_source.html b/docs/d9/d15/key__rotation__fragmenter_8cc_source.html index e25e943efa..cfdf14de47 100644 --- a/docs/d9/d15/key__rotation__fragmenter_8cc_source.html +++ b/docs/d9/d15/key__rotation__fragmenter_8cc_source.html @@ -222,15 +222,15 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    virtual std::string UUID()
    Definition: key_source.cc:92
    KeySource is responsible for encryption key acquisition.
    Definition: key_source.h:29
    - - + +
    KeyRotationFragmenter(MovieFragment *moof, TrackFragment *traf, KeySource *encryption_key_source, KeySource::TrackType track_type, int64_t crypto_period_duration, int64_t clear_time, VideoCodec video_codec, uint8_t nalu_length_size, MuxerListener *muxer_listener)
    virtual std::string SystemName()
    Definition: key_source.cc:96
    virtual void FinalizeFragmentForEncryption()
    Finalize current fragment for encryption.
    diff --git a/docs/d9/d17/classedash__packager_1_1DashIopMpdNotifier-members.html b/docs/d9/d17/classedash__packager_1_1DashIopMpdNotifier-members.html index 7dd3776a19..bec0d189c0 100644 --- a/docs/d9/d17/classedash__packager_1_1DashIopMpdNotifier-members.html +++ b/docs/d9/d17/classedash__packager_1_1DashIopMpdNotifier-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html b/docs/d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html index 58c9a217e1..4148c080d6 100644 --- a/docs/d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html +++ b/docs/d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html @@ -145,7 +145,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 393 of file box_definitions.h.

    +

    Definition at line 397 of file box_definitions.h.

    Member Function Documentation

    @@ -171,7 +171,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 828 of file box_definitions.cc.

    +

    Definition at line 844 of file box_definitions.cc.

    @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d9/d2c/classedash__packager_1_1media_1_1ProgressListener.html b/docs/d9/d2c/classedash__packager_1_1media_1_1ProgressListener.html index 389b26fdcd..0ea704c9ab 100644 --- a/docs/d9/d2c/classedash__packager_1_1media_1_1ProgressListener.html +++ b/docs/d9/d2c/classedash__packager_1_1media_1_1ProgressListener.html @@ -146,7 +146,7 @@ Public Member Functions diff --git a/docs/d9/d3b/classedash__packager_1_1media_1_1MemoryFile-members.html b/docs/d9/d3b/classedash__packager_1_1media_1_1MemoryFile-members.html index 4d3e8d044e..5a81a72976 100644 --- a/docs/d9/d3b/classedash__packager_1_1media_1_1MemoryFile-members.html +++ b/docs/d9/d3b/classedash__packager_1_1media_1_1MemoryFile-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d3b/webm__content__encodings_8h_source.html b/docs/d9/d3b/webm__content__encodings_8h_source.html index 97913dec81..f80273405b 100644 --- a/docs/d9/d3b/webm__content__encodings_8h_source.html +++ b/docs/d9/d3b/webm__content__encodings_8h_source.html @@ -179,7 +179,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d46/classedash__packager_1_1media_1_1BufferReader.html b/docs/d9/d46/classedash__packager_1_1media_1_1BufferReader.html index d94c661593..5345c94a69 100644 --- a/docs/d9/d46/classedash__packager_1_1media_1_1BufferReader.html +++ b/docs/d9/d46/classedash__packager_1_1media_1_1BufferReader.html @@ -276,7 +276,7 @@ bool ReadNBytesInto8s diff --git a/docs/d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html b/docs/d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html index c1c472c8ff..1017e3df43 100644 --- a/docs/d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html +++ b/docs/d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html @@ -185,7 +185,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 535 of file box_definitions.h.

    +

    Definition at line 539 of file box_definitions.h.

    Member Function Documentation

    @@ -211,7 +211,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 1739 of file box_definitions.cc.

    +

    Definition at line 1767 of file box_definitions.cc.

    @@ -222,7 +222,7 @@ Additional Inherited Members diff --git a/docs/d9/d5b/structedash__packager_1_1SegmentInfo-members.html b/docs/d9/d5b/structedash__packager_1_1SegmentInfo-members.html index 115538b0f6..14a7d88809 100644 --- a/docs/d9/d5b/structedash__packager_1_1SegmentInfo-members.html +++ b/docs/d9/d5b/structedash__packager_1_1SegmentInfo-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d65/classedash__packager_1_1media_1_1TextTrack-members.html b/docs/d9/d65/classedash__packager_1_1media_1_1TextTrack-members.html index 1a96169199..ca8e4a9c3d 100644 --- a/docs/d9/d65/classedash__packager_1_1media_1_1TextTrack-members.html +++ b/docs/d9/d65/classedash__packager_1_1media_1_1TextTrack-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d76/structedash__packager_1_1media_1_1H264ModificationOfPicNum.html b/docs/d9/d76/structedash__packager_1_1media_1_1H264ModificationOfPicNum.html index f12ac572d6..740e836f09 100644 --- a/docs/d9/d76/structedash__packager_1_1media_1_1H264ModificationOfPicNum.html +++ b/docs/d9/d76/structedash__packager_1_1media_1_1H264ModificationOfPicNum.html @@ -119,7 +119,7 @@ union { diff --git a/docs/d9/d7b/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData.html b/docs/d9/d7b/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData.html index 7764550335..596d9663f5 100644 --- a/docs/d9/d7b/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData.html +++ b/docs/d9/d7b/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData.html @@ -132,7 +132,7 @@ int64_t video_sample_durat diff --git a/docs/d9/d86/limits_8h_source.html b/docs/d9/d86/limits_8h_source.html index 613b9da41d..ea8faa1243 100644 --- a/docs/d9/d86/limits_8h_source.html +++ b/docs/d9/d86/limits_8h_source.html @@ -141,7 +141,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d8b/classedash__packager_1_1media_1_1KeySource.html b/docs/d9/d8b/classedash__packager_1_1media_1_1KeySource.html index 8de575d90b..a280fd7f8d 100644 --- a/docs/d9/d8b/classedash__packager_1_1media_1_1KeySource.html +++ b/docs/d9/d8b/classedash__packager_1_1media_1_1KeySource.html @@ -582,7 +582,7 @@ Static Protected Member Functions diff --git a/docs/d9/d90/text__track_8h_source.html b/docs/d9/d90/text__track_8h_source.html index 9b0514816c..3bf213dab3 100644 --- a/docs/d9/d90/text__track_8h_source.html +++ b/docs/d9/d90/text__track_8h_source.html @@ -134,7 +134,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d91/h264__bit__reader_8h_source.html b/docs/d9/d91/h264__bit__reader_8h_source.html index f966f5fa84..80fa7b1ea7 100644 --- a/docs/d9/d91/h264__bit__reader_8h_source.html +++ b/docs/d9/d91/h264__bit__reader_8h_source.html @@ -170,7 +170,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d93/media__stream_8h_source.html b/docs/d9/d93/media__stream_8h_source.html index a993cf18dc..11c36d9814 100644 --- a/docs/d9/d93/media__stream_8h_source.html +++ b/docs/d9/d93/media__stream_8h_source.html @@ -170,7 +170,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d95/classedash__packager_1_1media_1_1MediaStream-members.html b/docs/d9/d95/classedash__packager_1_1media_1_1MediaStream-members.html index fa86f2ba77..78a414b97c 100644 --- a/docs/d9/d95/classedash__packager_1_1media_1_1MediaStream-members.html +++ b/docs/d9/d95/classedash__packager_1_1media_1_1MediaStream-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d99/classedash__packager_1_1media_1_1DecryptConfig-members.html b/docs/d9/d99/classedash__packager_1_1media_1_1DecryptConfig-members.html index d3cc10169b..e4c61de073 100644 --- a/docs/d9/d99/classedash__packager_1_1media_1_1DecryptConfig-members.html +++ b/docs/d9/d99/classedash__packager_1_1media_1_1DecryptConfig-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d9b/structedash__packager_1_1SegmentInfo.html b/docs/d9/d9b/structedash__packager_1_1SegmentInfo.html index 07efee3ef6..e23fc58e97 100644 --- a/docs/d9/d9b/structedash__packager_1_1SegmentInfo.html +++ b/docs/d9/d9b/structedash__packager_1_1SegmentInfo.html @@ -118,7 +118,7 @@ uint64_t repeat diff --git a/docs/d9/da4/stream__descriptor_8h_source.html b/docs/d9/da4/stream__descriptor_8h_source.html index 6d17c3e8af..af2e5fa37d 100644 --- a/docs/d9/da4/stream__descriptor_8h_source.html +++ b/docs/d9/da4/stream__descriptor_8h_source.html @@ -141,7 +141,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html b/docs/d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html index 721cff1b8d..5a44624955 100644 --- a/docs/d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html +++ b/docs/d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html @@ -252,7 +252,7 @@ Additional Inherited Members diff --git a/docs/d9/db9/content__protection__element_8cc_source.html b/docs/d9/db9/content__protection__element_8cc_source.html index 927e97c292..d577a0997f 100644 --- a/docs/d9/db9/content__protection__element_8cc_source.html +++ b/docs/d9/db9/content__protection__element_8cc_source.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/db9/muxer_8cc_source.html b/docs/d9/db9/muxer_8cc_source.html index 2c4c2a83c0..71609d3b24 100644 --- a/docs/d9/db9/muxer_8cc_source.html +++ b/docs/d9/db9/muxer_8cc_source.html @@ -214,7 +214,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/dbf/classedash__packager_1_1media_1_1TextStreamInfo-members.html b/docs/d9/dbf/classedash__packager_1_1media_1_1TextStreamInfo-members.html index f29ead382b..8a25e15fb3 100644 --- a/docs/d9/dbf/classedash__packager_1_1media_1_1TextStreamInfo-members.html +++ b/docs/d9/dbf/classedash__packager_1_1media_1_1TextStreamInfo-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/dc8/webm__constants_8cc_source.html b/docs/d9/dc8/webm__constants_8cc_source.html index 8e1974b720..2adb34440d 100644 --- a/docs/d9/dc8/webm__constants_8cc_source.html +++ b/docs/d9/dc8/webm__constants_8cc_source.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html b/docs/d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html index f2eafca8bb..029f00984b 100644 --- a/docs/d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html +++ b/docs/d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html @@ -174,7 +174,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 1167 of file box_definitions.cc.

    +

    Definition at line 1183 of file box_definitions.cc.

    @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/d9/dcc/webm__video__client_8h_source.html b/docs/d9/dcc/webm__video__client_8h_source.html index fc8c5452ef..9bb643fbed 100644 --- a/docs/d9/dcc/webm__video__client_8h_source.html +++ b/docs/d9/dcc/webm__video__client_8h_source.html @@ -149,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/de3/muxer__listener__internal_8cc_source.html b/docs/d9/de3/muxer__listener__internal_8cc_source.html index 36f3168aed..c70b0d27ce 100644 --- a/docs/d9/de3/muxer__listener__internal_8cc_source.html +++ b/docs/d9/de3/muxer__listener__internal_8cc_source.html @@ -326,7 +326,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/dec/classedash__packager_1_1media_1_1RequestSigner-members.html b/docs/d9/dec/classedash__packager_1_1media_1_1RequestSigner-members.html index a598ea7725..b22cb52586 100644 --- a/docs/d9/dec/classedash__packager_1_1media_1_1RequestSigner-members.html +++ b/docs/d9/dec/classedash__packager_1_1media_1_1RequestSigner-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/ded/aac__audio__specific__config_8cc_source.html b/docs/d9/ded/aac__audio__specific__config_8cc_source.html index 21047d5ad3..014b7533e7 100644 --- a/docs/d9/ded/aac__audio__specific__config_8cc_source.html +++ b/docs/d9/ded/aac__audio__specific__config_8cc_source.html @@ -357,7 +357,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d00/structedash__packager_1_1media_1_1mp4_1_1SubtitleMediaHeader-members.html b/docs/da/d00/structedash__packager_1_1media_1_1mp4_1_1SubtitleMediaHeader-members.html index 88757e7c1d..2e37280708 100644 --- a/docs/da/d00/structedash__packager_1_1media_1_1mp4_1_1SubtitleMediaHeader-members.html +++ b/docs/da/d00/structedash__packager_1_1media_1_1mp4_1_1SubtitleMediaHeader-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d02/structedash__packager_1_1media_1_1H264WeightingFactors-members.html b/docs/da/d02/structedash__packager_1_1media_1_1H264WeightingFactors-members.html index e74abe0f1b..097afffda9 100644 --- a/docs/da/d02/structedash__packager_1_1media_1_1H264WeightingFactors-members.html +++ b/docs/da/d02/structedash__packager_1_1media_1_1H264WeightingFactors-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d02/structedash__packager_1_1media_1_1mp4_1_1SyncSample-members.html b/docs/da/d02/structedash__packager_1_1media_1_1mp4_1_1SyncSample-members.html index db82a21fa8..e03f2410fb 100644 --- a/docs/da/d02/structedash__packager_1_1media_1_1mp4_1_1SyncSample-members.html +++ b/docs/da/d02/structedash__packager_1_1media_1_1mp4_1_1SyncSample-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d04/audio__stream__info_8cc_source.html b/docs/da/d04/audio__stream__info_8cc_source.html index 3a4939359a..6bfc897671 100644 --- a/docs/da/d04/audio__stream__info_8cc_source.html +++ b/docs/da/d04/audio__stream__info_8cc_source.html @@ -151,7 +151,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    62 }
    63 } // namespace
    64 
    - +
    66  uint32_t time_scale,
    67  uint64_t duration,
    68  AudioCodec codec,
    @@ -160,81 +160,84 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    71  uint8_t sample_bits,
    72  uint8_t num_channels,
    73  uint32_t sampling_frequency,
    -
    74  const uint8_t* extra_data,
    -
    75  size_t extra_data_size,
    -
    76  bool is_encrypted)
    -
    77  : StreamInfo(kStreamAudio,
    -
    78  track_id,
    -
    79  time_scale,
    -
    80  duration,
    -
    81  codec_string,
    -
    82  language,
    -
    83  extra_data,
    -
    84  extra_data_size,
    -
    85  is_encrypted),
    -
    86  codec_(codec),
    -
    87  sample_bits_(sample_bits),
    -
    88  num_channels_(num_channels),
    -
    89  sampling_frequency_(sampling_frequency) {
    -
    90 }
    -
    91 
    -
    92 AudioStreamInfo::~AudioStreamInfo() {}
    -
    93 
    - -
    95  return codec_ != kUnknownAudioCodec && num_channels_ != 0 &&
    -
    96  num_channels_ <= limits::kMaxChannels && sample_bits_ > 0 &&
    -
    97  sample_bits_ <= limits::kMaxBitsPerSample &&
    -
    98  sampling_frequency_ > 0 &&
    -
    99  sampling_frequency_ <= limits::kMaxSampleRate;
    -
    100 }
    -
    101 
    -
    102 std::string AudioStreamInfo::ToString() const {
    -
    103  return base::StringPrintf(
    -
    104  "%s codec: %s\n sample_bits: %d\n num_channels: %d\n "
    -
    105  "sampling_frequency: %d\n language: %s\n",
    -
    106  StreamInfo::ToString().c_str(), AudioCodecToString(codec_).c_str(),
    -
    107  sample_bits_, num_channels_, sampling_frequency_, language().c_str());
    -
    108 }
    -
    109 
    -
    110 std::string AudioStreamInfo::GetCodecString(AudioCodec codec,
    -
    111  uint8_t audio_object_type) {
    -
    112  switch (codec) {
    -
    113  case kCodecVorbis:
    -
    114  return "vorbis";
    -
    115  case kCodecOpus:
    -
    116  return "opus";
    -
    117  case kCodecAAC:
    -
    118  return "mp4a.40." + base::UintToString(audio_object_type);
    -
    119  case kCodecDTSC:
    -
    120  return "dtsc";
    -
    121  case kCodecDTSH:
    -
    122  return "dtsh";
    -
    123  case kCodecDTSL:
    -
    124  return "dtsl";
    -
    125  case kCodecDTSE:
    -
    126  return "dtse";
    -
    127  case kCodecDTSP:
    -
    128  return "dts+";
    -
    129  case kCodecDTSM:
    -
    130  return "dts-";
    -
    131  default:
    -
    132  NOTIMPLEMENTED() << "Codec: " << codec;
    -
    133  return "unknown";
    -
    134  }
    -
    135 }
    -
    136 
    -
    137 } // namespace media
    -
    138 } // namespace edash_packager
    -
    std::string ToString() const override
    +
    74  uint32_t max_bitrate,
    +
    75  uint32_t avg_bitrate,
    +
    76  const uint8_t* extra_data,
    +
    77  size_t extra_data_size,
    +
    78  bool is_encrypted)
    +
    79  : StreamInfo(kStreamAudio,
    +
    80  track_id,
    +
    81  time_scale,
    +
    82  duration,
    +
    83  codec_string,
    +
    84  language,
    +
    85  extra_data,
    +
    86  extra_data_size,
    +
    87  is_encrypted),
    +
    88  codec_(codec),
    +
    89  sample_bits_(sample_bits),
    +
    90  num_channels_(num_channels),
    +
    91  sampling_frequency_(sampling_frequency),
    +
    92  max_bitrate_(max_bitrate),
    +
    93  avg_bitrate_(avg_bitrate) {}
    +
    94 
    +
    95 AudioStreamInfo::~AudioStreamInfo() {}
    +
    96 
    + +
    98  return codec_ != kUnknownAudioCodec && num_channels_ != 0 &&
    +
    99  num_channels_ <= limits::kMaxChannels && sample_bits_ > 0 &&
    +
    100  sample_bits_ <= limits::kMaxBitsPerSample &&
    +
    101  sampling_frequency_ > 0 &&
    +
    102  sampling_frequency_ <= limits::kMaxSampleRate;
    +
    103 }
    +
    104 
    +
    105 std::string AudioStreamInfo::ToString() const {
    +
    106  return base::StringPrintf(
    +
    107  "%s codec: %s\n sample_bits: %d\n num_channels: %d\n "
    +
    108  "sampling_frequency: %d\n language: %s\n",
    +
    109  StreamInfo::ToString().c_str(), AudioCodecToString(codec_).c_str(),
    +
    110  sample_bits_, num_channels_, sampling_frequency_, language().c_str());
    +
    111 }
    +
    112 
    +
    113 std::string AudioStreamInfo::GetCodecString(AudioCodec codec,
    +
    114  uint8_t audio_object_type) {
    +
    115  switch (codec) {
    +
    116  case kCodecVorbis:
    +
    117  return "vorbis";
    +
    118  case kCodecOpus:
    +
    119  return "opus";
    +
    120  case kCodecAAC:
    +
    121  return "mp4a.40." + base::UintToString(audio_object_type);
    +
    122  case kCodecDTSC:
    +
    123  return "dtsc";
    +
    124  case kCodecDTSH:
    +
    125  return "dtsh";
    +
    126  case kCodecDTSL:
    +
    127  return "dtsl";
    +
    128  case kCodecDTSE:
    +
    129  return "dtse";
    +
    130  case kCodecDTSP:
    +
    131  return "dts+";
    +
    132  case kCodecDTSM:
    +
    133  return "dts-";
    +
    134  default:
    +
    135  NOTIMPLEMENTED() << "Codec: " << codec;
    +
    136  return "unknown";
    +
    137  }
    +
    138 }
    +
    139 
    +
    140 } // namespace media
    +
    141 } // namespace edash_packager
    +
    std::string ToString() const override
    Abstract class holds stream information.
    Definition: stream_info.h:26
    -
    AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)
    Construct an initialized audio stream info object.
    +
    AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, uint32_t max_bitrate, uint32_t avg_bitrate, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)
    Construct an initialized audio stream info object.
    virtual std::string ToString() const
    Definition: stream_info.cc:40
    - -
    static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
    + +
    static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
    diff --git a/docs/da/d14/classedash__packager_1_1media_1_1webm_1_1Segmenter.html b/docs/da/d14/classedash__packager_1_1media_1_1webm_1_1Segmenter.html index c7cb86d1f1..150017f913 100644 --- a/docs/da/d14/classedash__packager_1_1media_1_1webm_1_1Segmenter.html +++ b/docs/da/d14/classedash__packager_1_1media_1_1webm_1_1Segmenter.html @@ -413,7 +413,7 @@ virtual diff --git a/docs/da/d15/structedash__packager_1_1media_1_1mp4_1_1HandlerReference-members.html b/docs/da/d15/structedash__packager_1_1media_1_1mp4_1_1HandlerReference-members.html index 892153a202..78b2943d29 100644 --- a/docs/da/d15/structedash__packager_1_1media_1_1mp4_1_1HandlerReference-members.html +++ b/docs/da/d15/structedash__packager_1_1media_1_1mp4_1_1HandlerReference-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html b/docs/da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html index 9bbbccb815..d710032253 100644 --- a/docs/da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html +++ b/docs/da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html @@ -145,7 +145,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 491 of file box_definitions.h.

    +

    Definition at line 495 of file box_definitions.h.

    Member Function Documentation

    @@ -171,7 +171,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 1598 of file box_definitions.cc.

    +

    Definition at line 1626 of file box_definitions.cc.

    @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/da/d1e/classedash__packager_1_1media_1_1StreamInfo-members.html b/docs/da/d1e/classedash__packager_1_1media_1_1StreamInfo-members.html index 14510fcbf5..2bf3ab0f88 100644 --- a/docs/da/d1e/classedash__packager_1_1media_1_1StreamInfo-members.html +++ b/docs/da/d1e/classedash__packager_1_1media_1_1StreamInfo-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d22/key__rotation__fragmenter_8h_source.html b/docs/da/d22/key__rotation__fragmenter_8h_source.html index 221f16936d..73706d2759 100644 --- a/docs/da/d22/key__rotation__fragmenter_8h_source.html +++ b/docs/da/d22/key__rotation__fragmenter_8h_source.html @@ -149,13 +149,13 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    KeySource is responsible for encryption key acquisition.
    Definition: key_source.h:29
    - - + +
    KeyRotationFragmenter(MovieFragment *moof, TrackFragment *traf, KeySource *encryption_key_source, KeySource::TrackType track_type, int64_t crypto_period_duration, int64_t clear_time, VideoCodec video_codec, uint8_t nalu_length_size, MuxerListener *muxer_listener)
    diff --git a/docs/da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html b/docs/da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html index b729b7080b..92e1a5f40f 100644 --- a/docs/da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html +++ b/docs/da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html @@ -111,10 +111,10 @@ Inheritance diagram for edash_packager::media::AudioStreamInfo: - - - + + + @@ -133,6 +133,12 @@ uint32_t  + + + + @@ -234,7 +240,7 @@ Static Public Member Functions
    Returns
    The codec string.
    -

    Definition at line 110 of file audio_stream_info.cc.

    +

    Definition at line 113 of file audio_stream_info.cc.

    @@ -262,7 +268,7 @@ Static Public Member Functions

    Implements edash_packager::media::StreamInfo.

    -

    Definition at line 94 of file audio_stream_info.cc.

    +

    Definition at line 97 of file audio_stream_info.cc.

    @@ -290,7 +296,7 @@ Static Public Member Functions

    Reimplemented from edash_packager::media::StreamInfo.

    -

    Definition at line 102 of file audio_stream_info.cc.

    +

    Definition at line 105 of file audio_stream_info.cc.

    @@ -301,7 +307,7 @@ Static Public Member Functions diff --git a/docs/da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html b/docs/da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html index e350414893..c87b6084f3 100644 --- a/docs/da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html +++ b/docs/da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html @@ -177,7 +177,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 105 of file box_definitions.cc.

    +

    Definition at line 121 of file box_definitions.cc.

    @@ -188,7 +188,7 @@ Additional Inherited Members diff --git a/docs/da/d2a/text__stream__info_8h_source.html b/docs/da/d2a/text__stream__info_8h_source.html index daa4c6460d..9f72cd4f94 100644 --- a/docs/da/d2a/text__stream__info_8h_source.html +++ b/docs/da/d2a/text__stream__info_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d37/classedash__packager_1_1media_1_1IoCache-members.html b/docs/da/d37/classedash__packager_1_1media_1_1IoCache-members.html index b21facc925..8d49127e16 100644 --- a/docs/da/d37/classedash__packager_1_1media_1_1IoCache-members.html +++ b/docs/da/d37/classedash__packager_1_1media_1_1IoCache-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');

    Public Member Functions

    AudioStreamInfo (int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)
     Construct an initialized audio stream info object.
     
    AudioStreamInfo (int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, uint32_t max_bitrate, uint32_t avg_bitrate, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)
     Construct an initialized audio stream info object.
     
    AudioCodec codec () const
     
    sampling_frequenc
    uint32_t bytes_per_frame () const
     
    +uint32_t max_bitrate () const
     
    +uint32_t avg_bitrate () const
     
    void set_codec (AudioCodec codec)
     
    diff --git a/docs/da/d38/classedash__packager_1_1MpdNotifier.html b/docs/da/d38/classedash__packager_1_1MpdNotifier.html index b38d384571..de4aa465f0 100644 --- a/docs/da/d38/classedash__packager_1_1MpdNotifier.html +++ b/docs/da/d38/classedash__packager_1_1MpdNotifier.html @@ -472,7 +472,7 @@ Public Member Functions diff --git a/docs/da/d40/classedash__packager_1_1media_1_1RsaPrivateKey-members.html b/docs/da/d40/classedash__packager_1_1media_1_1RsaPrivateKey-members.html index 95df56d5d5..79a258a8bc 100644 --- a/docs/da/d40/classedash__packager_1_1media_1_1RsaPrivateKey-members.html +++ b/docs/da/d40/classedash__packager_1_1media_1_1RsaPrivateKey-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d41/mp4_2multi__segment__segmenter_8h_source.html b/docs/da/d41/mp4_2multi__segment__segmenter_8h_source.html index 318b389cda..9bc0fbe687 100644 --- a/docs/da/d41/mp4_2multi__segment__segmenter_8h_source.html +++ b/docs/da/d41/mp4_2multi__segment__segmenter_8h_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d47/structedash__packager_1_1media_1_1H264PPS-members.html b/docs/da/d47/structedash__packager_1_1media_1_1H264PPS-members.html index ebdce967ef..40aec5aafa 100644 --- a/docs/da/d47/structedash__packager_1_1media_1_1H264PPS-members.html +++ b/docs/da/d47/structedash__packager_1_1media_1_1H264PPS-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d49/classedash__packager_1_1DashIopMpdNotifier.html b/docs/da/d49/classedash__packager_1_1DashIopMpdNotifier.html index 14af97a7de..a5fd3de58d 100644 --- a/docs/da/d49/classedash__packager_1_1DashIopMpdNotifier.html +++ b/docs/da/d49/classedash__packager_1_1DashIopMpdNotifier.html @@ -473,7 +473,7 @@ class DashIopMpdNotifierTe diff --git a/docs/da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html b/docs/da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html index cbadf293e9..279b7a9b5f 100644 --- a/docs/da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html +++ b/docs/da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html @@ -162,7 +162,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 331 of file box_definitions.cc.

    +

    Definition at line 347 of file box_definitions.cc.

    @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html b/docs/da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html index bffcaf2aa0..6aa1d2561d 100644 --- a/docs/da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html +++ b/docs/da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html @@ -145,7 +145,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 344 of file box_definitions.h.

    +

    Definition at line 348 of file box_definitions.h.

    Member Function Documentation

    @@ -171,7 +171,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 616 of file box_definitions.cc.

    +

    Definition at line 632 of file box_definitions.cc.

    @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/da/d5c/widevine__key__source_8h_source.html b/docs/da/d5c/widevine__key__source_8h_source.html index 04dbbd1cd8..3096cb6b06 100644 --- a/docs/da/d5c/widevine__key__source_8h_source.html +++ b/docs/da/d5c/widevine__key__source_8h_source.html @@ -217,7 +217,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d5f/classedash__packager_1_1media_1_1VP9Parser.html b/docs/da/d5f/classedash__packager_1_1media_1_1VP9Parser.html index 8c9e74e1f3..c9b28e8986 100644 --- a/docs/da/d5f/classedash__packager_1_1media_1_1VP9Parser.html +++ b/docs/da/d5f/classedash__packager_1_1media_1_1VP9Parser.html @@ -238,7 +238,7 @@ Additional Inherited Members diff --git a/docs/da/d60/structedash__packager_1_1media_1_1EncryptionKey-members.html b/docs/da/d60/structedash__packager_1_1media_1_1EncryptionKey-members.html index 384125dd38..595a4a37d2 100644 --- a/docs/da/d60/structedash__packager_1_1media_1_1EncryptionKey-members.html +++ b/docs/da/d60/structedash__packager_1_1media_1_1EncryptionKey-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d72/classedash__packager_1_1media_1_1mp2t_1_1EsParser-members.html b/docs/da/d72/classedash__packager_1_1media_1_1mp2t_1_1EsParser-members.html index 50620d6611..b3376d9d9b 100644 --- a/docs/da/d72/classedash__packager_1_1media_1_1mp2t_1_1EsParser-members.html +++ b/docs/da/d72/classedash__packager_1_1media_1_1mp2t_1_1EsParser-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html b/docs/da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html index 20c67f3d26..c57f0ab7fc 100644 --- a/docs/da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html +++ b/docs/da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html @@ -259,7 +259,7 @@ void set_progress_target diff --git a/docs/da/d7a/classedash__packager_1_1media_1_1AVCDecoderConfiguration-members.html b/docs/da/d7a/classedash__packager_1_1media_1_1AVCDecoderConfiguration-members.html index f95a339b85..53358da8dc 100644 --- a/docs/da/d7a/classedash__packager_1_1media_1_1AVCDecoderConfiguration-members.html +++ b/docs/da/d7a/classedash__packager_1_1media_1_1AVCDecoderConfiguration-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d7a/fixed__key__encryption__flags_8h_source.html b/docs/da/d7a/fixed__key__encryption__flags_8h_source.html index 9a4fd7c3e5..db820186e0 100644 --- a/docs/da/d7a/fixed__key__encryption__flags_8h_source.html +++ b/docs/da/d7a/fixed__key__encryption__flags_8h_source.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d7d/classedash__packager_1_1media_1_1StreamDescriptorCompareFn.html b/docs/da/d7d/classedash__packager_1_1media_1_1StreamDescriptorCompareFn.html index 5b444edf55..d29f4f7182 100644 --- a/docs/da/d7d/classedash__packager_1_1media_1_1StreamDescriptorCompareFn.html +++ b/docs/da/d7d/classedash__packager_1_1media_1_1StreamDescriptorCompareFn.html @@ -109,7 +109,7 @@ bool operator() (const diff --git a/docs/da/d7f/hevc__decoder__configuration_8h_source.html b/docs/da/d7f/hevc__decoder__configuration_8h_source.html index e080a2a8c0..b34a019a39 100644 --- a/docs/da/d7f/hevc__decoder__configuration_8h_source.html +++ b/docs/da/d7f/hevc__decoder__configuration_8h_source.html @@ -141,7 +141,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html b/docs/da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html index be94816e00..52d6aca52e 100644 --- a/docs/da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html +++ b/docs/da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html @@ -146,7 +146,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 381 of file box_definitions.h.

    +

    Definition at line 385 of file box_definitions.h.

    Member Function Documentation

    @@ -174,7 +174,7 @@ Additional Inherited Members

    Reimplemented in edash_packager::media::mp4::ChunkOffset.

    -

    Definition at line 792 of file box_definitions.cc.

    +

    Definition at line 808 of file box_definitions.cc.

    @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/da/d88/mp4__muxer_8cc_source.html b/docs/da/d88/mp4__muxer_8cc_source.html index 891af7a1e1..59afb9b66b 100644 --- a/docs/da/d88/mp4__muxer_8cc_source.html +++ b/docs/da/d88/mp4__muxer_8cc_source.html @@ -129,7 +129,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    40  *end = *start + static_cast<uint32_t>(size) - 1;
    41 }
    42 
    -
    43 FourCC CodecToFourCC(VideoCodec codec) {
    +
    43 FourCC VideoCodecToFourCC(VideoCodec codec) {
    44  switch (codec) {
    45  case kCodecH264:
    46  return FOURCC_AVC1;
    @@ -148,302 +148,314 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    59  }
    60 }
    61 
    -
    62 } // namespace
    -
    63 
    -
    64 MP4Muxer::MP4Muxer(const MuxerOptions& options) : Muxer(options) {}
    -
    65 MP4Muxer::~MP4Muxer() {}
    -
    66 
    -
    67 Status MP4Muxer::Initialize() {
    -
    68  DCHECK(!streams().empty());
    -
    69 
    -
    70  scoped_ptr<FileType> ftyp(new FileType);
    -
    71  scoped_ptr<Movie> moov(new Movie);
    -
    72 
    -
    73  ftyp->major_brand = FOURCC_DASH;
    -
    74  ftyp->compatible_brands.push_back(FOURCC_ISO6);
    -
    75  ftyp->compatible_brands.push_back(FOURCC_MP41);
    -
    76  if (streams().size() == 1 &&
    -
    77  streams()[0]->info()->stream_type() == kStreamVideo) {
    -
    78  const FourCC codec_fourcc = CodecToFourCC(
    -
    79  static_cast<VideoStreamInfo*>(streams()[0]->info().get())->codec());
    -
    80  if (codec_fourcc != FOURCC_NULL)
    -
    81  ftyp->compatible_brands.push_back(codec_fourcc);
    -
    82  }
    -
    83 
    -
    84  moov->header.creation_time = IsoTimeNow();
    -
    85  moov->header.modification_time = IsoTimeNow();
    -
    86  moov->header.next_track_id = streams().size() + 1;
    -
    87 
    -
    88  moov->tracks.resize(streams().size());
    -
    89  moov->extends.tracks.resize(streams().size());
    -
    90 
    -
    91  // Initialize tracks.
    -
    92  for (uint32_t i = 0; i < streams().size(); ++i) {
    -
    93  Track& trak = moov->tracks[i];
    -
    94  trak.header.track_id = i + 1;
    -
    95 
    -
    96  TrackExtends& trex = moov->extends.tracks[i];
    -
    97  trex.track_id = trak.header.track_id;
    -
    98  trex.default_sample_description_index = 1;
    -
    99 
    -
    100  switch (streams()[i]->info()->stream_type()) {
    -
    101  case kStreamVideo:
    -
    102  GenerateVideoTrak(
    -
    103  static_cast<VideoStreamInfo*>(streams()[i]->info().get()),
    -
    104  &trak,
    -
    105  i + 1);
    -
    106  break;
    -
    107  case kStreamAudio:
    -
    108  GenerateAudioTrak(
    -
    109  static_cast<AudioStreamInfo*>(streams()[i]->info().get()),
    -
    110  &trak,
    -
    111  i + 1);
    -
    112  break;
    -
    113  default:
    -
    114  NOTIMPLEMENTED() << "Not implemented for stream type: "
    -
    115  << streams()[i]->info()->stream_type();
    -
    116  }
    -
    117  }
    +
    62 FourCC AudioCodecToFourCC(AudioCodec codec) {
    +
    63  switch (codec) {
    +
    64  case kCodecAAC:
    +
    65  return FOURCC_MP4A;
    +
    66  case kCodecDTSC:
    +
    67  return FOURCC_DTSC;
    +
    68  case kCodecDTSH:
    +
    69  return FOURCC_DTSH;
    +
    70  case kCodecDTSL:
    +
    71  return FOURCC_DTSL;
    +
    72  case kCodecDTSE:
    +
    73  return FOURCC_DTSE;
    +
    74  case kCodecDTSM:
    +
    75  return FOURCC_DTSM;
    +
    76  default:
    +
    77  return FOURCC_NULL;
    +
    78  }
    +
    79 }
    +
    80 
    +
    81 } // namespace
    +
    82 
    +
    83 MP4Muxer::MP4Muxer(const MuxerOptions& options) : Muxer(options) {}
    +
    84 MP4Muxer::~MP4Muxer() {}
    +
    85 
    +
    86 Status MP4Muxer::Initialize() {
    +
    87  DCHECK(!streams().empty());
    +
    88 
    +
    89  scoped_ptr<FileType> ftyp(new FileType);
    +
    90  scoped_ptr<Movie> moov(new Movie);
    +
    91 
    +
    92  ftyp->major_brand = FOURCC_DASH;
    +
    93  ftyp->compatible_brands.push_back(FOURCC_ISO6);
    +
    94  ftyp->compatible_brands.push_back(FOURCC_MP41);
    +
    95  if (streams().size() == 1 &&
    +
    96  streams()[0]->info()->stream_type() == kStreamVideo) {
    +
    97  const FourCC codec_fourcc = VideoCodecToFourCC(
    +
    98  static_cast<VideoStreamInfo*>(streams()[0]->info().get())->codec());
    +
    99  if (codec_fourcc != FOURCC_NULL)
    +
    100  ftyp->compatible_brands.push_back(codec_fourcc);
    +
    101  }
    +
    102 
    +
    103  moov->header.creation_time = IsoTimeNow();
    +
    104  moov->header.modification_time = IsoTimeNow();
    +
    105  moov->header.next_track_id = streams().size() + 1;
    +
    106 
    +
    107  moov->tracks.resize(streams().size());
    +
    108  moov->extends.tracks.resize(streams().size());
    +
    109 
    +
    110  // Initialize tracks.
    +
    111  for (uint32_t i = 0; i < streams().size(); ++i) {
    +
    112  Track& trak = moov->tracks[i];
    +
    113  trak.header.track_id = i + 1;
    +
    114 
    +
    115  TrackExtends& trex = moov->extends.tracks[i];
    +
    116  trex.track_id = trak.header.track_id;
    +
    117  trex.default_sample_description_index = 1;
    118 
    -
    119  if (options().single_segment) {
    -
    120  segmenter_.reset(
    -
    121  new SingleSegmentSegmenter(options(), ftyp.Pass(), moov.Pass()));
    -
    122  } else {
    -
    123  segmenter_.reset(
    -
    124  new MultiSegmentSegmenter(options(), ftyp.Pass(), moov.Pass()));
    -
    125  }
    -
    126 
    -
    127  Status segmenter_initialized =
    -
    128  segmenter_->Initialize(streams(),
    -
    129  muxer_listener(),
    -
    130  progress_listener(),
    -
    131  encryption_key_source(),
    -
    132  max_sd_pixels(),
    -
    133  clear_lead_in_seconds(),
    -
    134  crypto_period_duration_in_seconds());
    -
    135 
    -
    136  if (!segmenter_initialized.ok())
    -
    137  return segmenter_initialized;
    -
    138 
    -
    139  FireOnMediaStartEvent();
    -
    140  return Status::OK;
    -
    141 }
    -
    142 
    -
    143 Status MP4Muxer::Finalize() {
    -
    144  DCHECK(segmenter_);
    -
    145  Status segmenter_finalized = segmenter_->Finalize();
    -
    146 
    -
    147  if (!segmenter_finalized.ok())
    -
    148  return segmenter_finalized;
    -
    149 
    -
    150  FireOnMediaEndEvent();
    -
    151  LOG(INFO) << "MP4 file '" << options().output_file_name << "' finalized.";
    -
    152  return Status::OK;
    -
    153 }
    +
    119  switch (streams()[i]->info()->stream_type()) {
    +
    120  case kStreamVideo:
    +
    121  GenerateVideoTrak(
    +
    122  static_cast<VideoStreamInfo*>(streams()[i]->info().get()),
    +
    123  &trak,
    +
    124  i + 1);
    +
    125  break;
    +
    126  case kStreamAudio:
    +
    127  GenerateAudioTrak(
    +
    128  static_cast<AudioStreamInfo*>(streams()[i]->info().get()),
    +
    129  &trak,
    +
    130  i + 1);
    +
    131  break;
    +
    132  default:
    +
    133  NOTIMPLEMENTED() << "Not implemented for stream type: "
    +
    134  << streams()[i]->info()->stream_type();
    +
    135  }
    +
    136  }
    +
    137 
    +
    138  if (options().single_segment) {
    +
    139  segmenter_.reset(
    +
    140  new SingleSegmentSegmenter(options(), ftyp.Pass(), moov.Pass()));
    +
    141  } else {
    +
    142  segmenter_.reset(
    +
    143  new MultiSegmentSegmenter(options(), ftyp.Pass(), moov.Pass()));
    +
    144  }
    +
    145 
    +
    146  Status segmenter_initialized =
    +
    147  segmenter_->Initialize(streams(),
    +
    148  muxer_listener(),
    +
    149  progress_listener(),
    +
    150  encryption_key_source(),
    +
    151  max_sd_pixels(),
    +
    152  clear_lead_in_seconds(),
    +
    153  crypto_period_duration_in_seconds());
    154 
    -
    155 Status MP4Muxer::DoAddSample(const MediaStream* stream,
    -
    156  scoped_refptr<MediaSample> sample) {
    -
    157  DCHECK(segmenter_);
    -
    158  return segmenter_->AddSample(stream, sample);
    -
    159 }
    -
    160 
    -
    161 void MP4Muxer::InitializeTrak(const StreamInfo* info, Track* trak) {
    -
    162  int64_t now = IsoTimeNow();
    -
    163  trak->header.creation_time = now;
    -
    164  trak->header.modification_time = now;
    -
    165  trak->header.duration = 0;
    -
    166  trak->media.header.creation_time = now;
    -
    167  trak->media.header.modification_time = now;
    -
    168  trak->media.header.timescale = info->time_scale();
    -
    169  trak->media.header.duration = 0;
    -
    170  if (!info->language().empty()) {
    -
    171  const size_t language_size = arraysize(trak->media.header.language) - 1;
    -
    172  if (info->language().size() != language_size) {
    -
    173  LOG(WARNING) << "'" << info->language() << "' is not a valid ISO-639-2 "
    -
    174  << "language code, ignoring.";
    -
    175  } else {
    -
    176  memcpy(trak->media.header.language, info->language().c_str(),
    -
    177  language_size + 1);
    -
    178  }
    -
    179  }
    -
    180 }
    -
    181 
    -
    182 void MP4Muxer::GenerateVideoTrak(const VideoStreamInfo* video_info,
    -
    183  Track* trak,
    -
    184  uint32_t track_id) {
    -
    185  InitializeTrak(video_info, trak);
    -
    186 
    -
    187  // width and height specify the track's visual presentation size as
    -
    188  // fixed-point 16.16 values.
    -
    189  uint32_t pixel_width = video_info->pixel_width();
    -
    190  uint32_t pixel_height = video_info->pixel_height();
    -
    191  if (pixel_width == 0 || pixel_height == 0) {
    -
    192  LOG(WARNING) << "pixel width/height are not set. Assuming 1:1.";
    -
    193  pixel_width = 1;
    -
    194  pixel_height = 1;
    -
    195  }
    -
    196  const double sample_aspect_ratio =
    -
    197  static_cast<double>(pixel_width) / pixel_height;
    -
    198  trak->header.width = video_info->width() * sample_aspect_ratio * 0x10000;
    -
    199  trak->header.height = video_info->height() * 0x10000;
    +
    155  if (!segmenter_initialized.ok())
    +
    156  return segmenter_initialized;
    +
    157 
    +
    158  FireOnMediaStartEvent();
    +
    159  return Status::OK;
    +
    160 }
    +
    161 
    +
    162 Status MP4Muxer::Finalize() {
    +
    163  DCHECK(segmenter_);
    +
    164  Status segmenter_finalized = segmenter_->Finalize();
    +
    165 
    +
    166  if (!segmenter_finalized.ok())
    +
    167  return segmenter_finalized;
    +
    168 
    +
    169  FireOnMediaEndEvent();
    +
    170  LOG(INFO) << "MP4 file '" << options().output_file_name << "' finalized.";
    +
    171  return Status::OK;
    +
    172 }
    +
    173 
    +
    174 Status MP4Muxer::DoAddSample(const MediaStream* stream,
    +
    175  scoped_refptr<MediaSample> sample) {
    +
    176  DCHECK(segmenter_);
    +
    177  return segmenter_->AddSample(stream, sample);
    +
    178 }
    +
    179 
    +
    180 void MP4Muxer::InitializeTrak(const StreamInfo* info, Track* trak) {
    +
    181  int64_t now = IsoTimeNow();
    +
    182  trak->header.creation_time = now;
    +
    183  trak->header.modification_time = now;
    +
    184  trak->header.duration = 0;
    +
    185  trak->media.header.creation_time = now;
    +
    186  trak->media.header.modification_time = now;
    +
    187  trak->media.header.timescale = info->time_scale();
    +
    188  trak->media.header.duration = 0;
    +
    189  if (!info->language().empty()) {
    +
    190  const size_t language_size = arraysize(trak->media.header.language) - 1;
    +
    191  if (info->language().size() != language_size) {
    +
    192  LOG(WARNING) << "'" << info->language() << "' is not a valid ISO-639-2 "
    +
    193  << "language code, ignoring.";
    +
    194  } else {
    +
    195  memcpy(trak->media.header.language, info->language().c_str(),
    +
    196  language_size + 1);
    +
    197  }
    +
    198  }
    +
    199 }
    200 
    -
    201  trak->media.handler.type = kVideo;
    -
    202 
    -
    203  VideoSampleEntry video;
    -
    204  video.format = CodecToFourCC(video_info->codec());
    -
    205  video.width = video_info->width();
    -
    206  video.height = video_info->height();
    -
    207  video.codec_config_record.data = video_info->extra_data();
    -
    208  if (pixel_width != 1 || pixel_height != 1) {
    -
    209  video.pixel_aspect.h_spacing = pixel_width;
    -
    210  video.pixel_aspect.v_spacing = pixel_height;
    -
    211  }
    -
    212 
    -
    213  SampleDescription& sample_description =
    -
    214  trak->media.information.sample_table.description;
    -
    215  sample_description.type = kVideo;
    -
    216  sample_description.video_entries.push_back(video);
    -
    217 }
    -
    218 
    -
    219 void MP4Muxer::GenerateAudioTrak(const AudioStreamInfo* audio_info,
    -
    220  Track* trak,
    -
    221  uint32_t track_id) {
    -
    222  InitializeTrak(audio_info, trak);
    -
    223 
    -
    224  trak->header.volume = 0x100;
    -
    225  trak->media.handler.type = kAudio;
    -
    226 
    -
    227  AudioSampleEntry audio;
    -
    228  switch(audio_info->codec()){
    -
    229  case kCodecAAC:
    -
    230  audio.format = FOURCC_MP4A;
    -
    231  audio.esds.es_descriptor.set_object_type(kISO_14496_3); // MPEG4 AAC.
    -
    232  audio.esds.es_descriptor.set_esid(track_id);
    -
    233  audio.esds.es_descriptor.set_decoder_specific_info(
    -
    234  audio_info->extra_data());
    -
    235  break;
    -
    236  case kCodecDTSC:
    -
    237  audio.format = FOURCC_DTSC;
    -
    238  audio.ddts.data = audio_info->extra_data();
    -
    239  break;
    -
    240  case kCodecDTSH:
    -
    241  audio.format = FOURCC_DTSH;
    -
    242  audio.ddts.data = audio_info->extra_data();
    -
    243  break;
    -
    244  case kCodecDTSL:
    -
    245  audio.format = FOURCC_DTSL;
    -
    246  audio.ddts.data = audio_info->extra_data();
    -
    247  break;
    -
    248  case kCodecDTSE:
    -
    249  audio.format = FOURCC_DTSE;
    -
    250  audio.ddts.data = audio_info->extra_data();
    -
    251  break;
    -
    252  case kCodecDTSM:
    -
    253  audio.format = FOURCC_DTSM;
    -
    254  audio.ddts.data = audio_info->extra_data();
    -
    255  break;
    -
    256  default:
    -
    257  NOTIMPLEMENTED();
    -
    258  break;
    -
    259  }
    -
    260 
    -
    261  audio.channelcount = audio_info->num_channels();
    -
    262  audio.samplesize = audio_info->sample_bits();
    -
    263  audio.samplerate = audio_info->sampling_frequency();
    -
    264  SampleDescription& sample_description =
    -
    265  trak->media.information.sample_table.description;
    -
    266  sample_description.type = kAudio;
    -
    267  sample_description.audio_entries.push_back(audio);
    -
    268 }
    -
    269 
    -
    270 bool MP4Muxer::GetInitRangeStartAndEnd(uint32_t* start, uint32_t* end) {
    -
    271  DCHECK(start && end);
    -
    272  size_t range_offset = 0;
    -
    273  size_t range_size = 0;
    -
    274  const bool has_range = segmenter_->GetInitRange(&range_offset, &range_size);
    -
    275 
    -
    276  if (!has_range)
    -
    277  return false;
    -
    278 
    -
    279  SetStartAndEndFromOffsetAndSize(range_offset, range_size, start, end);
    -
    280  return true;
    -
    281 }
    -
    282 
    -
    283 bool MP4Muxer::GetIndexRangeStartAndEnd(uint32_t* start, uint32_t* end) {
    -
    284  DCHECK(start && end);
    -
    285  size_t range_offset = 0;
    -
    286  size_t range_size = 0;
    -
    287  const bool has_range = segmenter_->GetIndexRange(&range_offset, &range_size);
    -
    288 
    -
    289  if (!has_range)
    -
    290  return false;
    -
    291 
    -
    292  SetStartAndEndFromOffsetAndSize(range_offset, range_size, start, end);
    -
    293  return true;
    -
    294 }
    -
    295 
    -
    296 void MP4Muxer::FireOnMediaStartEvent() {
    -
    297  if (!muxer_listener())
    -
    298  return;
    -
    299 
    -
    300  if (streams().size() > 1) {
    -
    301  LOG(ERROR) << "MuxerListener cannot take more than 1 stream.";
    -
    302  return;
    -
    303  }
    -
    304  DCHECK(!streams().empty()) << "Media started without a stream.";
    -
    305 
    -
    306  const uint32_t timescale = segmenter_->GetReferenceTimeScale();
    -
    307  muxer_listener()->OnMediaStart(options(),
    -
    308  *streams().front()->info(),
    -
    309  timescale,
    -
    310  MuxerListener::kContainerMp4);
    -
    311 }
    -
    312 
    -
    313 void MP4Muxer::FireOnMediaEndEvent() {
    -
    314  if (!muxer_listener())
    -
    315  return;
    -
    316 
    -
    317  uint32_t init_range_start = 0;
    -
    318  uint32_t init_range_end = 0;
    -
    319  const bool has_init_range =
    -
    320  GetInitRangeStartAndEnd(&init_range_start, &init_range_end);
    -
    321 
    -
    322  uint32_t index_range_start = 0;
    -
    323  uint32_t index_range_end = 0;
    -
    324  const bool has_index_range =
    -
    325  GetIndexRangeStartAndEnd(&index_range_start, &index_range_end);
    -
    326 
    -
    327  const float duration_seconds = static_cast<float>(segmenter_->GetDuration());
    +
    201 void MP4Muxer::GenerateVideoTrak(const VideoStreamInfo* video_info,
    +
    202  Track* trak,
    +
    203  uint32_t track_id) {
    +
    204  InitializeTrak(video_info, trak);
    +
    205 
    +
    206  // width and height specify the track's visual presentation size as
    +
    207  // fixed-point 16.16 values.
    +
    208  uint32_t pixel_width = video_info->pixel_width();
    +
    209  uint32_t pixel_height = video_info->pixel_height();
    +
    210  if (pixel_width == 0 || pixel_height == 0) {
    +
    211  LOG(WARNING) << "pixel width/height are not set. Assuming 1:1.";
    +
    212  pixel_width = 1;
    +
    213  pixel_height = 1;
    +
    214  }
    +
    215  const double sample_aspect_ratio =
    +
    216  static_cast<double>(pixel_width) / pixel_height;
    +
    217  trak->header.width = video_info->width() * sample_aspect_ratio * 0x10000;
    +
    218  trak->header.height = video_info->height() * 0x10000;
    +
    219 
    +
    220  trak->media.handler.type = kVideo;
    +
    221 
    +
    222  VideoSampleEntry video;
    +
    223  video.format = VideoCodecToFourCC(video_info->codec());
    +
    224  video.width = video_info->width();
    +
    225  video.height = video_info->height();
    +
    226  video.codec_config_record.data = video_info->extra_data();
    +
    227  if (pixel_width != 1 || pixel_height != 1) {
    +
    228  video.pixel_aspect.h_spacing = pixel_width;
    +
    229  video.pixel_aspect.v_spacing = pixel_height;
    +
    230  }
    +
    231 
    +
    232  SampleDescription& sample_description =
    +
    233  trak->media.information.sample_table.description;
    +
    234  sample_description.type = kVideo;
    +
    235  sample_description.video_entries.push_back(video);
    +
    236 }
    +
    237 
    +
    238 void MP4Muxer::GenerateAudioTrak(const AudioStreamInfo* audio_info,
    +
    239  Track* trak,
    +
    240  uint32_t track_id) {
    +
    241  InitializeTrak(audio_info, trak);
    +
    242 
    +
    243  trak->header.volume = 0x100;
    +
    244  trak->media.handler.type = kAudio;
    +
    245 
    +
    246  AudioSampleEntry audio;
    +
    247  audio.format = AudioCodecToFourCC(audio_info->codec());
    +
    248  switch(audio_info->codec()){
    +
    249  case kCodecAAC:
    +
    250  audio.esds.es_descriptor.set_object_type(kISO_14496_3); // MPEG4 AAC.
    +
    251  audio.esds.es_descriptor.set_esid(track_id);
    +
    252  audio.esds.es_descriptor.set_decoder_specific_info(
    +
    253  audio_info->extra_data());
    +
    254  audio.esds.es_descriptor.set_max_bitrate(audio_info->max_bitrate());
    +
    255  audio.esds.es_descriptor.set_avg_bitrate(audio_info->avg_bitrate());
    +
    256  break;
    +
    257  case kCodecDTSC:
    +
    258  case kCodecDTSH:
    +
    259  case kCodecDTSL:
    +
    260  case kCodecDTSE:
    +
    261  case kCodecDTSM:
    +
    262  audio.ddts.extra_data = audio_info->extra_data();
    +
    263  audio.ddts.max_bitrate = audio_info->max_bitrate();
    +
    264  audio.ddts.avg_bitrate = audio_info->avg_bitrate();
    +
    265  audio.ddts.sampling_frequency = audio_info->sampling_frequency();
    +
    266  audio.ddts.pcm_sample_depth = audio_info->sample_bits();
    +
    267  break;
    +
    268  default:
    +
    269  NOTIMPLEMENTED();
    +
    270  break;
    +
    271  }
    +
    272 
    +
    273  audio.channelcount = audio_info->num_channels();
    +
    274  audio.samplesize = audio_info->sample_bits();
    +
    275  audio.samplerate = audio_info->sampling_frequency();
    +
    276  SampleDescription& sample_description =
    +
    277  trak->media.information.sample_table.description;
    +
    278  sample_description.type = kAudio;
    +
    279  sample_description.audio_entries.push_back(audio);
    +
    280 }
    +
    281 
    +
    282 bool MP4Muxer::GetInitRangeStartAndEnd(uint32_t* start, uint32_t* end) {
    +
    283  DCHECK(start && end);
    +
    284  size_t range_offset = 0;
    +
    285  size_t range_size = 0;
    +
    286  const bool has_range = segmenter_->GetInitRange(&range_offset, &range_size);
    +
    287 
    +
    288  if (!has_range)
    +
    289  return false;
    +
    290 
    +
    291  SetStartAndEndFromOffsetAndSize(range_offset, range_size, start, end);
    +
    292  return true;
    +
    293 }
    +
    294 
    +
    295 bool MP4Muxer::GetIndexRangeStartAndEnd(uint32_t* start, uint32_t* end) {
    +
    296  DCHECK(start && end);
    +
    297  size_t range_offset = 0;
    +
    298  size_t range_size = 0;
    +
    299  const bool has_range = segmenter_->GetIndexRange(&range_offset, &range_size);
    +
    300 
    +
    301  if (!has_range)
    +
    302  return false;
    +
    303 
    +
    304  SetStartAndEndFromOffsetAndSize(range_offset, range_size, start, end);
    +
    305  return true;
    +
    306 }
    +
    307 
    +
    308 void MP4Muxer::FireOnMediaStartEvent() {
    +
    309  if (!muxer_listener())
    +
    310  return;
    +
    311 
    +
    312  if (streams().size() > 1) {
    +
    313  LOG(ERROR) << "MuxerListener cannot take more than 1 stream.";
    +
    314  return;
    +
    315  }
    +
    316  DCHECK(!streams().empty()) << "Media started without a stream.";
    +
    317 
    +
    318  const uint32_t timescale = segmenter_->GetReferenceTimeScale();
    +
    319  muxer_listener()->OnMediaStart(options(),
    +
    320  *streams().front()->info(),
    +
    321  timescale,
    +
    322  MuxerListener::kContainerMp4);
    +
    323 }
    +
    324 
    +
    325 void MP4Muxer::FireOnMediaEndEvent() {
    +
    326  if (!muxer_listener())
    +
    327  return;
    328 
    -
    329  const int64_t file_size =
    -
    330  File::GetFileSize(options().output_file_name.c_str());
    -
    331  if (file_size <= 0) {
    -
    332  LOG(ERROR) << "Invalid file size: " << file_size;
    -
    333  return;
    -
    334  }
    -
    335 
    -
    336  muxer_listener()->OnMediaEnd(has_init_range,
    -
    337  init_range_start,
    -
    338  init_range_end,
    -
    339  has_index_range,
    -
    340  index_range_start,
    -
    341  index_range_end,
    -
    342  duration_seconds,
    -
    343  file_size);
    -
    344 }
    -
    345 
    -
    346 uint64_t MP4Muxer::IsoTimeNow() {
    -
    347  // Time in seconds from Jan. 1, 1904 to epoch time, i.e. Jan. 1, 1970.
    -
    348  const uint64_t kIsomTimeOffset = 2082844800l;
    -
    349  return kIsomTimeOffset +
    -
    350  (clock() ? clock()->Now() : base::Time::Now()).ToDoubleT();
    -
    351 }
    -
    352 
    -
    353 } // namespace mp4
    -
    354 } // namespace media
    -
    355 } // namespace edash_packager
    +
    329  uint32_t init_range_start = 0;
    +
    330  uint32_t init_range_end = 0;
    +
    331  const bool has_init_range =
    +
    332  GetInitRangeStartAndEnd(&init_range_start, &init_range_end);
    +
    333 
    +
    334  uint32_t index_range_start = 0;
    +
    335  uint32_t index_range_end = 0;
    +
    336  const bool has_index_range =
    +
    337  GetIndexRangeStartAndEnd(&index_range_start, &index_range_end);
    +
    338 
    +
    339  const float duration_seconds = static_cast<float>(segmenter_->GetDuration());
    +
    340 
    +
    341  const int64_t file_size =
    +
    342  File::GetFileSize(options().output_file_name.c_str());
    +
    343  if (file_size <= 0) {
    +
    344  LOG(ERROR) << "Invalid file size: " << file_size;
    +
    345  return;
    +
    346  }
    +
    347 
    +
    348  muxer_listener()->OnMediaEnd(has_init_range,
    +
    349  init_range_start,
    +
    350  init_range_end,
    +
    351  has_index_range,
    +
    352  index_range_start,
    +
    353  index_range_end,
    +
    354  duration_seconds,
    +
    355  file_size);
    +
    356 }
    +
    357 
    +
    358 uint64_t MP4Muxer::IsoTimeNow() {
    +
    359  // Time in seconds from Jan. 1, 1904 to epoch time, i.e. Jan. 1, 1970.
    +
    360  const uint64_t kIsomTimeOffset = 2082844800l;
    +
    361  return kIsomTimeOffset +
    +
    362  (clock() ? clock()->Now() : base::Time::Now()).ToDoubleT();
    +
    363 }
    +
    364 
    +
    365 } // namespace mp4
    +
    366 } // namespace media
    +
    367 } // namespace edash_packager
    -
    MP4Muxer(const MuxerOptions &options)
    Create a MP4Muxer object from MuxerOptions.
    Definition: mp4_muxer.cc:64
    +
    MP4Muxer(const MuxerOptions &options)
    Create a MP4Muxer object from MuxerOptions.
    Definition: mp4_muxer.cc:83
    This structure contains the list of configuration options for Muxer.
    Definition: muxer_options.h:18
    @@ -451,7 +463,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d8e/container__names_8cc_source.html b/docs/da/d8e/container__names_8cc_source.html index b6ca74a1ee..cb4492d815 100644 --- a/docs/da/d8e/container__names_8cc_source.html +++ b/docs/da/d8e/container__names_8cc_source.html @@ -1840,7 +1840,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d95/classedash__packager_1_1media_1_1MkvWriter-members.html b/docs/da/d95/classedash__packager_1_1media_1_1MkvWriter-members.html index 5338ea7b4c..22aa93026b 100644 --- a/docs/da/d95/classedash__packager_1_1media_1_1MkvWriter-members.html +++ b/docs/da/d95/classedash__packager_1_1media_1_1MkvWriter-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html b/docs/da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html index 11b1704bcf..8f95587d91 100644 --- a/docs/da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html +++ b/docs/da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html @@ -145,7 +145,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 434 of file box_definitions.h.

    +

    Definition at line 438 of file box_definitions.h.

    Member Function Documentation

    @@ -171,7 +171,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 1419 of file box_definitions.cc.

    +

    Definition at line 1447 of file box_definitions.cc.

    @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/da/dc3/status_8cc_source.html b/docs/da/dc3/status_8cc_source.html index b6e4deed6c..08883da9fa 100644 --- a/docs/da/dc3/status_8cc_source.html +++ b/docs/da/dc3/status_8cc_source.html @@ -168,7 +168,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dcb/es__descriptor_8h_source.html b/docs/da/dcb/es__descriptor_8h_source.html index 403cf937f3..68a3a198ee 100644 --- a/docs/da/dcb/es__descriptor_8h_source.html +++ b/docs/da/dcb/es__descriptor_8h_source.html @@ -113,65 +113,81 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    24  kForbidden = 0,
    25  kISO_14496_3 = 0x40, // MPEG4 AAC
    26  kISO_13818_7_AAC_LC = 0x67, // MPEG2 AAC-LC
    -
    27 };
    -
    28 
    -
    32 class ESDescriptor {
    -
    33  public:
    -
    34  ESDescriptor();
    -
    35  ~ESDescriptor();
    -
    36 
    -
    37  bool Parse(const std::vector<uint8_t>& data);
    -
    38  void Write(BufferWriter* writer) const;
    -
    39  size_t ComputeSize() const;
    +
    27  kDTSC = 0xA9, // DTS Coherent Acoustics audio
    +
    28  kDTSE = 0xAC, // DTS Express low bit rate audio
    +
    29  kDTSH = 0xAA, // DTS-HD High Resolution Audio
    +
    30  kDTSL = 0xAB, // DTS-HD Master Audio
    +
    31 };
    +
    32 
    +
    36 class ESDescriptor {
    +
    37  public:
    +
    38  ESDescriptor();
    +
    39  ~ESDescriptor();
    40 
    -
    41  uint16_t esid() const { return esid_; }
    -
    42  void set_esid(uint16_t esid) { esid_ = esid; }
    -
    43 
    -
    44  ObjectType object_type() const { return object_type_; }
    -
    45  void set_object_type(ObjectType object_type) { object_type_ = object_type; }
    -
    46 
    -
    47  const std::vector<uint8_t>& decoder_specific_info() const {
    -
    48  return decoder_specific_info_;
    -
    49  }
    -
    50  void set_decoder_specific_info(
    -
    51  const std::vector<uint8_t>& decoder_specific_info) {
    -
    52  decoder_specific_info_ = decoder_specific_info;
    -
    53  }
    -
    54 
    -
    56  bool IsAAC() const {
    -
    57  return object_type_ == kISO_14496_3 || object_type_ == kISO_13818_7_AAC_LC;
    -
    58  }
    -
    59 
    -
    60  private:
    -
    61  enum Tag {
    -
    62  kESDescrTag = 0x03,
    -
    63  kDecoderConfigDescrTag = 0x04,
    -
    64  kDecoderSpecificInfoTag = 0x05,
    -
    65  kSLConfigTag = 0x06,
    -
    66  };
    -
    67 
    -
    68  bool ParseDecoderConfigDescriptor(BitReader* reader);
    -
    69  bool ParseDecoderSpecificInfo(BitReader* reader);
    -
    70 
    -
    71  uint16_t esid_; // Elementary Stream ID.
    -
    72  ObjectType object_type_;
    -
    73  std::vector<uint8_t> decoder_specific_info_;
    -
    74 };
    -
    75 
    -
    76 } // namespace mp4
    -
    77 
    -
    78 } // namespace media
    -
    79 } // namespace edash_packager
    -
    80 
    -
    81 #endif // MEDIA_FORMATS_MP4_ES_DESCRIPTOR_H_
    -
    A class to read bit streams.
    Definition: bit_reader.h:17
    - - +
    41  bool Parse(const std::vector<uint8_t>& data);
    +
    42  void Write(BufferWriter* writer) const;
    +
    43  size_t ComputeSize() const;
    +
    44 
    +
    45  uint16_t esid() const { return esid_; }
    +
    46  void set_esid(uint16_t esid) { esid_ = esid; }
    +
    47 
    +
    48  uint32_t max_bitrate() const {return max_bitrate_; }
    +
    49  void set_max_bitrate(uint32_t max_bitrate) { max_bitrate_ = max_bitrate; }
    +
    50 
    +
    51  uint32_t avg_bitrate() const { return avg_bitrate_; }
    +
    52  void set_avg_bitrate(uint32_t avg_bitrate) { avg_bitrate_ = avg_bitrate; }
    +
    53 
    +
    54  ObjectType object_type() const { return object_type_; }
    +
    55  void set_object_type(ObjectType object_type) { object_type_ = object_type; }
    +
    56 
    +
    57  const std::vector<uint8_t>& decoder_specific_info() const {
    +
    58  return decoder_specific_info_;
    +
    59  }
    +
    60  void set_decoder_specific_info(
    +
    61  const std::vector<uint8_t>& decoder_specific_info) {
    +
    62  decoder_specific_info_ = decoder_specific_info;
    +
    63  }
    +
    64 
    +
    66  bool IsAAC() const {
    +
    67  return object_type_ == kISO_14496_3 || object_type_ == kISO_13818_7_AAC_LC;
    +
    68  }
    +
    69 
    +
    70  bool IsDTS() const {
    +
    71  return object_type_ == kDTSC || object_type_ == kDTSE ||
    +
    72  object_type_ == kDTSH || object_type_ == kDTSL;
    +
    73  }
    +
    74 
    +
    75  private:
    +
    76  enum Tag {
    +
    77  kESDescrTag = 0x03,
    +
    78  kDecoderConfigDescrTag = 0x04,
    +
    79  kDecoderSpecificInfoTag = 0x05,
    +
    80  kSLConfigTag = 0x06,
    +
    81  };
    +
    82 
    +
    83  bool ParseDecoderConfigDescriptor(BitReader* reader);
    +
    84  bool ParseDecoderSpecificInfo(BitReader* reader);
    +
    85 
    +
    86  uint16_t esid_; // Elementary Stream ID.
    +
    87  ObjectType object_type_;
    +
    88  uint32_t max_bitrate_;
    +
    89  uint32_t avg_bitrate_;
    +
    90  std::vector<uint8_t> decoder_specific_info_;
    +
    91 };
    +
    92 
    +
    93 } // namespace mp4
    +
    94 
    +
    95 } // namespace media
    +
    96 } // namespace edash_packager
    +
    97 
    +
    98 #endif // MEDIA_FORMATS_MP4_ES_DESCRIPTOR_H_
    + + diff --git a/docs/da/dd0/webm__info__parser_8h_source.html b/docs/da/dd0/webm__info__parser_8h_source.html index d02f91d089..3c4c328f7d 100644 --- a/docs/da/dd0/webm__info__parser_8h_source.html +++ b/docs/da/dd0/webm__info__parser_8h_source.html @@ -138,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dd1/fragmenter_8h_source.html b/docs/da/dd1/fragmenter_8h_source.html index d30e5f2123..2523218155 100644 --- a/docs/da/dd1/fragmenter_8h_source.html +++ b/docs/da/dd1/fragmenter_8h_source.html @@ -189,15 +189,15 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    virtual Status InitializeFragment(int64_t first_sample_dts)
    Definition: fragmenter.cc:73
    virtual Status AddSample(scoped_refptr< MediaSample > sample)
    Definition: fragmenter.cc:36
    - +
    bool OptimizeSampleEntries(std::vector< T > *entries, T *default_value)
    Definition: fragmenter.h:89
    - +
    virtual void FinalizeFragment()
    Finalize and optimize the fragment.
    Definition: fragmenter.cc:90
    diff --git a/docs/da/de2/mock__mpd__builder_8cc_source.html b/docs/da/de2/mock__mpd__builder_8cc_source.html index 498ba17e05..92db2b2358 100644 --- a/docs/da/de2/mock__mpd__builder_8cc_source.html +++ b/docs/da/de2/mock__mpd__builder_8cc_source.html @@ -123,7 +123,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/de4/classedash__packager_1_1media_1_1AudioTimestampHelper.html b/docs/da/de4/classedash__packager_1_1media_1_1AudioTimestampHelper.html index 6f4f9de7aa..683bb626b7 100644 --- a/docs/da/de4/classedash__packager_1_1media_1_1AudioTimestampHelper.html +++ b/docs/da/de4/classedash__packager_1_1media_1_1AudioTimestampHelper.html @@ -131,7 +131,7 @@ int64_t GetFramesToTarget< diff --git a/docs/da/dfe/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset.html b/docs/da/dfe/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset.html index acadef334c..2e18ffdff4 100644 --- a/docs/da/dfe/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset.html +++ b/docs/da/dfe/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset.html @@ -105,14 +105,14 @@ int64_t sample_offset<

    Detailed Description

    -

    Definition at line 335 of file box_definitions.h.

    +

    Definition at line 339 of file box_definitions.h.


    The documentation for this struct was generated from the following file: diff --git a/docs/db/d01/avc__decoder__configuration_8cc_source.html b/docs/db/d01/avc__decoder__configuration_8cc_source.html index 9fb02f856c..4e85184c33 100644 --- a/docs/db/d01/avc__decoder__configuration_8cc_source.html +++ b/docs/db/d01/avc__decoder__configuration_8cc_source.html @@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html b/docs/db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html index 181e1c06c9..274aca92f6 100644 --- a/docs/db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html +++ b/docs/db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html @@ -177,7 +177,7 @@ Public Member Functions diff --git a/docs/db/d09/namespaceedash__packager.html b/docs/db/d09/namespaceedash__packager.html index c48d211cb4..b7e12d6a42 100644 --- a/docs/db/d09/namespaceedash__packager.html +++ b/docs/db/d09/namespaceedash__packager.html @@ -550,7 +550,7 @@ const char kEncryptedMp4Va diff --git a/docs/db/d11/classedash__packager_1_1media_1_1ContentEncoding-members.html b/docs/db/d11/classedash__packager_1_1media_1_1ContentEncoding-members.html index 156728f919..7251177799 100644 --- a/docs/db/d11/classedash__packager_1_1media_1_1ContentEncoding-members.html +++ b/docs/db/d11/classedash__packager_1_1media_1_1ContentEncoding-members.html @@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d15/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html b/docs/db/d15/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html index 1c7fac4f61..2e4189ff8a 100644 --- a/docs/db/d15/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html +++ b/docs/db/d15/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d23/classedash__packager_1_1media_1_1WebMTracksParser.html b/docs/db/d23/classedash__packager_1_1media_1_1WebMTracksParser.html index d0d9126715..2377b0b8d3 100644 --- a/docs/db/d23/classedash__packager_1_1media_1_1WebMTracksParser.html +++ b/docs/db/d23/classedash__packager_1_1media_1_1WebMTracksParser.html @@ -225,7 +225,7 @@ The number of bytes parsed on success. diff --git a/docs/db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html b/docs/db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html index c55a7501f3..ad113cd5e8 100644 --- a/docs/db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html +++ b/docs/db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html @@ -412,7 +412,7 @@ bool is_keyframe () co diff --git a/docs/db/d2e/classedash__packager_1_1MockMpdBuilder.html b/docs/db/d2e/classedash__packager_1_1MockMpdBuilder.html index 7b8c5b9465..d9fa8116aa 100644 --- a/docs/db/d2e/classedash__packager_1_1MockMpdBuilder.html +++ b/docs/db/d2e/classedash__packager_1_1MockMpdBuilder.html @@ -149,7 +149,7 @@ Additional Inherited Members diff --git a/docs/db/d31/track__run__iterator_8cc_source.html b/docs/db/d31/track__run__iterator_8cc_source.html index 39442f76a2..887e8e4c2c 100644 --- a/docs/db/d31/track__run__iterator_8cc_source.html +++ b/docs/db/d31/track__run__iterator_8cc_source.html @@ -701,9 +701,9 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - +
    scoped_ptr< DecryptConfig > GetDecryptConfig()
    -
    bool ParseFromSampleEncryptionData(size_t iv_size, std::vector< SampleEncryptionEntry > *sample_encryption_entries) const
    +
    bool ParseFromSampleEncryptionData(size_t iv_size, std::vector< SampleEncryptionEntry > *sample_encryption_entries) const
    bool CacheAuxInfo(const uint8_t *buf, int size)
    @@ -714,12 +714,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - +
    uint32_t NumSamples(uint32_t start_chunk, uint32_t end_chunk) const
    - + @@ -728,26 +728,26 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - - + + - + - + - - + + diff --git a/docs/db/d44/structedash__packager_1_1media_1_1mp4_1_1DataReference-members.html b/docs/db/d44/structedash__packager_1_1media_1_1mp4_1_1DataReference-members.html index 23ee695959..01f63099a6 100644 --- a/docs/db/d44/structedash__packager_1_1media_1_1mp4_1_1DataReference-members.html +++ b/docs/db/d44/structedash__packager_1_1media_1_1mp4_1_1DataReference-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d45/mpd__notify__muxer__listener_8h_source.html b/docs/db/d45/mpd__notify__muxer__listener_8h_source.html index 8ec59b1179..08e7437d7d 100644 --- a/docs/db/d45/mpd__notify__muxer__listener_8h_source.html +++ b/docs/db/d45/mpd__notify__muxer__listener_8h_source.html @@ -186,7 +186,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.html b/docs/db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.html index aa30542757..f84d5b6151 100644 --- a/docs/db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.html +++ b/docs/db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.html @@ -147,7 +147,7 @@ Additional Inherited Members diff --git a/docs/db/d51/mp2t__media__parser_8h_source.html b/docs/db/d51/mp2t__media__parser_8h_source.html index 3b422ae6f0..75e014e3e8 100644 --- a/docs/db/d51/mp2t__media__parser_8h_source.html +++ b/docs/db/d51/mp2t__media__parser_8h_source.html @@ -195,7 +195,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d51/two__pass__single__segment__segmenter_8h_source.html b/docs/db/d51/two__pass__single__segment__segmenter_8h_source.html index 57e2c87729..fac977f9d0 100644 --- a/docs/db/d51/two__pass__single__segment__segmenter_8h_source.html +++ b/docs/db/d51/two__pass__single__segment__segmenter_8h_source.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d56/classedash__packager_1_1SimpleMpdNotifier.html b/docs/db/d56/classedash__packager_1_1SimpleMpdNotifier.html index 02a0756efa..c7d172b671 100644 --- a/docs/db/d56/classedash__packager_1_1SimpleMpdNotifier.html +++ b/docs/db/d56/classedash__packager_1_1SimpleMpdNotifier.html @@ -471,7 +471,7 @@ class SimpleMpdNotifierTes diff --git a/docs/db/d5a/structedash__packager_1_1media_1_1mp4_1_1SampleEncryptionEntry-members.html b/docs/db/d5a/structedash__packager_1_1media_1_1mp4_1_1SampleEncryptionEntry-members.html index b5c1c053d3..762ef3dec6 100644 --- a/docs/db/d5a/structedash__packager_1_1media_1_1mp4_1_1SampleEncryptionEntry-members.html +++ b/docs/db/d5a/structedash__packager_1_1media_1_1mp4_1_1SampleEncryptionEntry-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d5b/classedash__packager_1_1media_1_1HEVCDecoderConfiguration-members.html b/docs/db/d5b/classedash__packager_1_1media_1_1HEVCDecoderConfiguration-members.html index 554fffef4d..bafdedc85e 100644 --- a/docs/db/d5b/classedash__packager_1_1media_1_1HEVCDecoderConfiguration-members.html +++ b/docs/db/d5b/classedash__packager_1_1media_1_1HEVCDecoderConfiguration-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d60/mpd__options_8h_source.html b/docs/db/d60/mpd__options_8h_source.html index 62ea33c432..662ea4850d 100644 --- a/docs/db/d60/mpd__options_8h_source.html +++ b/docs/db/d60/mpd__options_8h_source.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d61/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html b/docs/db/d61/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html index a98a094ec6..b05a80f2d8 100644 --- a/docs/db/d61/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html +++ b/docs/db/d61/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d64/webvtt__media__parser_8h_source.html b/docs/db/d64/webvtt__media__parser_8h_source.html index 96278befb4..1a67cea0fd 100644 --- a/docs/db/d64/webvtt__media__parser_8h_source.html +++ b/docs/db/d64/webvtt__media__parser_8h_source.html @@ -180,7 +180,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html b/docs/db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html index d30f705bda..9c6814c096 100644 --- a/docs/db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html +++ b/docs/db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html @@ -336,7 +336,7 @@ Static Public Member Functions diff --git a/docs/db/d6b/structedash__packager_1_1media_1_1mp4_1_1VTTAdditionalTextBox.html b/docs/db/d6b/structedash__packager_1_1media_1_1mp4_1_1VTTAdditionalTextBox.html index 941e275da8..870fa4e7bf 100644 --- a/docs/db/d6b/structedash__packager_1_1media_1_1mp4_1_1VTTAdditionalTextBox.html +++ b/docs/db/d6b/structedash__packager_1_1media_1_1mp4_1_1VTTAdditionalTextBox.html @@ -136,7 +136,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 709 of file box_definitions.h.

    +

    Definition at line 713 of file box_definitions.h.

    Member Function Documentation

    @@ -162,7 +162,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 2292 of file box_definitions.cc.

    +

    Definition at line 2320 of file box_definitions.cc.

    @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html b/docs/db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html index 0c6dcf7f4f..dac83b8778 100644 --- a/docs/db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html +++ b/docs/db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html @@ -497,7 +497,7 @@ template<typename T > diff --git a/docs/db/d71/http__key__fetcher_8h_source.html b/docs/db/d71/http__key__fetcher_8h_source.html index 9cc2a54efd..0cc54315d8 100644 --- a/docs/db/d71/http__key__fetcher_8h_source.html +++ b/docs/db/d71/http__key__fetcher_8h_source.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d79/structedash__packager_1_1media_1_1mp4_1_1EditListEntry-members.html b/docs/db/d79/structedash__packager_1_1media_1_1mp4_1_1EditListEntry-members.html index 21ec6d797f..a86de08e81 100644 --- a/docs/db/d79/structedash__packager_1_1media_1_1mp4_1_1EditListEntry-members.html +++ b/docs/db/d79/structedash__packager_1_1media_1_1mp4_1_1EditListEntry-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d7e/muxer__options_8cc_source.html b/docs/db/d7e/muxer__options_8cc_source.html index e9b3508f6f..b2660caffd 100644 --- a/docs/db/d7e/muxer__options_8cc_source.html +++ b/docs/db/d7e/muxer__options_8cc_source.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html b/docs/db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html index 89a293faf0..76d91d3252 100644 --- a/docs/db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html +++ b/docs/db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html @@ -148,7 +148,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 373 of file box_definitions.h.

    +

    Definition at line 377 of file box_definitions.h.

    Member Function Documentation

    @@ -174,7 +174,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 718 of file box_definitions.cc.

    +

    Definition at line 734 of file box_definitions.cc.

    @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/db/d8f/mp4__muxer_8h_source.html b/docs/db/d8f/mp4__muxer_8h_source.html index 835158df7c..f80b7b02a6 100644 --- a/docs/db/d8f/mp4__muxer_8h_source.html +++ b/docs/db/d8f/mp4__muxer_8h_source.html @@ -162,20 +162,20 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    76 } // namespace edash_packager
    77 
    78 #endif // MEDIA_FORMATS_MP4_MP4_MUXER_H_
    -
    MP4Muxer(const MuxerOptions &options)
    Create a MP4Muxer object from MuxerOptions.
    Definition: mp4_muxer.cc:64
    +
    MP4Muxer(const MuxerOptions &options)
    Create a MP4Muxer object from MuxerOptions.
    Definition: mp4_muxer.cc:83
    Holds audio stream information.
    Abstract class holds stream information.
    Definition: stream_info.h:26
    Holds video stream information.
    - +
    This structure contains the list of configuration options for Muxer.
    Definition: muxer_options.h:18
    diff --git a/docs/db/d96/wvm__media__parser_8h_source.html b/docs/db/d96/wvm__media__parser_8h_source.html index 95ec7f9dd8..1ec2ca3c45 100644 --- a/docs/db/d96/wvm__media__parser_8h_source.html +++ b/docs/db/d96/wvm__media__parser_8h_source.html @@ -365,7 +365,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d97/classedash__packager_1_1media_1_1WebMContentEncodingsClient-members.html b/docs/db/d97/classedash__packager_1_1media_1_1WebMContentEncodingsClient-members.html index 64e046af1a..effb96e960 100644 --- a/docs/db/d97/classedash__packager_1_1media_1_1WebMContentEncodingsClient-members.html +++ b/docs/db/d97/classedash__packager_1_1media_1_1WebMContentEncodingsClient-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/da0/classedash__packager_1_1media_1_1WebMClusterParser.html b/docs/db/da0/classedash__packager_1_1media_1_1WebMClusterParser.html index c5c8c43ae5..5815af0ac0 100644 --- a/docs/db/da0/classedash__packager_1_1media_1_1WebMClusterParser.html +++ b/docs/db/da0/classedash__packager_1_1media_1_1WebMClusterParser.html @@ -292,7 +292,7 @@ The number of bytes parsed on success. diff --git a/docs/db/da4/classBandwidthEstimator-members.html b/docs/db/da4/classBandwidthEstimator-members.html index 0a5bae3051..65b93f1963 100644 --- a/docs/db/da4/classBandwidthEstimator-members.html +++ b/docs/db/da4/classBandwidthEstimator-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html b/docs/db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html index eb0b956461..894544ab41 100644 --- a/docs/db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html +++ b/docs/db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html @@ -559,7 +559,7 @@ static std::string  diff --git a/docs/db/da5/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html b/docs/db/da5/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html index 70895b1a50..d8ee69bd4c 100644 --- a/docs/db/da5/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html +++ b/docs/db/da5/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/da6/memory__file_8h_source.html b/docs/db/da6/memory__file_8h_source.html index 60040f269c..5bffa66ada 100644 --- a/docs/db/da6/memory__file_8h_source.html +++ b/docs/db/da6/memory__file_8h_source.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html b/docs/db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html index 149541f285..075a09ebb4 100644 --- a/docs/db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html +++ b/docs/db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html @@ -299,7 +299,7 @@ template<typename T > diff --git a/docs/db/dc8/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt-members.html b/docs/db/dc8/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt-members.html index 52246a0204..0f13c8fdf5 100644 --- a/docs/db/dc8/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt-members.html +++ b/docs/db/dc8/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dd1/structedash__packager_1_1media_1_1mp4_1_1SampleEncryption-members.html b/docs/db/dd1/structedash__packager_1_1media_1_1mp4_1_1SampleEncryption-members.html index 3eb6dd6ad9..6abe823427 100644 --- a/docs/db/dd1/structedash__packager_1_1media_1_1mp4_1_1SampleEncryption-members.html +++ b/docs/db/dd1/structedash__packager_1_1media_1_1mp4_1_1SampleEncryption-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dd2/chunk__info__iterator_8h_source.html b/docs/db/dd2/chunk__info__iterator_8h_source.html index 895de10346..de21af49a3 100644 --- a/docs/db/dd2/chunk__info__iterator_8h_source.html +++ b/docs/db/dd2/chunk__info__iterator_8h_source.html @@ -148,7 +148,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    74 
    75 #endif // MEDIA_FORMATS_MP4_CHUNK_INFO_ITERATOR_H_
    - +
    uint32_t NumSamples(uint32_t start_chunk, uint32_t end_chunk) const
    @@ -161,7 +161,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dd9/sync__sample__iterator_8h_source.html b/docs/db/dd9/sync__sample__iterator_8h_source.html index 71925dba00..e2914751be 100644 --- a/docs/db/dd9/sync__sample__iterator_8h_source.html +++ b/docs/db/dd9/sync__sample__iterator_8h_source.html @@ -133,14 +133,14 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    51 
    52 #endif // MEDIA_FORMATS_MP4_SYNC_SAMPLE_ITERATOR_H_
    SyncSampleIterator(const SyncSample &sync_sample)
    Create a new SyncSampleIterator from sync sample box.
    - + diff --git a/docs/db/de4/classedash__packager_1_1AdaptationSet.html b/docs/db/de4/classedash__packager_1_1AdaptationSet.html index 108ef4ac62..79cf29612a 100644 --- a/docs/db/de4/classedash__packager_1_1AdaptationSet.html +++ b/docs/db/de4/classedash__packager_1_1AdaptationSet.html @@ -582,7 +582,7 @@ template<MpdBuilder::MpdType type> diff --git a/docs/db/de9/classedash__packager_1_1media_1_1StreamDescriptorCompareFn-members.html b/docs/db/de9/classedash__packager_1_1media_1_1StreamDescriptorCompareFn-members.html index 6eca59b109..90e796b063 100644 --- a/docs/db/de9/classedash__packager_1_1media_1_1StreamDescriptorCompareFn-members.html +++ b/docs/db/de9/classedash__packager_1_1media_1_1StreamDescriptorCompareFn-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dec/audio__timestamp__helper_8cc_source.html b/docs/db/dec/audio__timestamp__helper_8cc_source.html index 07b622ac3b..b22beef478 100644 --- a/docs/db/dec/audio__timestamp__helper_8cc_source.html +++ b/docs/db/dec/audio__timestamp__helper_8cc_source.html @@ -165,7 +165,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/ded/opus__packet__builder_8cc_source.html b/docs/db/ded/opus__packet__builder_8cc_source.html index 6c0063cc47..e6dbfd113f 100644 --- a/docs/db/ded/opus__packet__builder_8cc_source.html +++ b/docs/db/ded/opus__packet__builder_8cc_source.html @@ -182,7 +182,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.html b/docs/db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.html index f0e141f488..6938cedbce 100644 --- a/docs/db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.html +++ b/docs/db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.html @@ -144,7 +144,7 @@ uint32_t pid () diff --git a/docs/db/df6/muxer_8h_source.html b/docs/db/df6/muxer_8h_source.html index 958385cfa0..53d87cc4bd 100644 --- a/docs/db/df6/muxer_8h_source.html +++ b/docs/db/df6/muxer_8h_source.html @@ -208,7 +208,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/df7/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi-members.html b/docs/db/df7/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi-members.html index 16feb6cb41..2a30f6bd9c 100644 --- a/docs/db/df7/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi-members.html +++ b/docs/db/df7/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html b/docs/db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html index 8fb6135b1a..eed261bb6b 100644 --- a/docs/db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html +++ b/docs/db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html @@ -154,7 +154,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 425 of file box_definitions.h.

    +

    Definition at line 429 of file box_definitions.h.

    Member Function Documentation

    @@ -180,7 +180,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 1402 of file box_definitions.cc.

    +

    Definition at line 1430 of file box_definitions.cc.

    @@ -191,7 +191,7 @@ Additional Inherited Members diff --git a/docs/db/dfb/mpd__utils_8cc_source.html b/docs/db/dfb/mpd__utils_8cc_source.html index f461bafe70..31c1565699 100644 --- a/docs/db/dfb/mpd__utils_8cc_source.html +++ b/docs/db/dfb/mpd__utils_8cc_source.html @@ -373,7 +373,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dfc/mpd__notify__muxer__listener_8cc_source.html b/docs/db/dfc/mpd__notify__muxer__listener_8cc_source.html index 3121be0a3a..1966dfc3d9 100644 --- a/docs/db/dfc/mpd__notify__muxer__listener_8cc_source.html +++ b/docs/db/dfc/mpd__notify__muxer__listener_8cc_source.html @@ -265,7 +265,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html b/docs/db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html index 6458510adc..1d6b26dd2e 100644 --- a/docs/db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html +++ b/docs/db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html @@ -209,7 +209,7 @@ const std::vector< uint8_t > &  diff --git a/docs/dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html b/docs/dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html index f09e16c262..b193d89809 100644 --- a/docs/dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html +++ b/docs/dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html @@ -286,7 +286,7 @@ Additional Inherited Members diff --git a/docs/dc/d0c/classedash__packager_1_1media_1_1WebMVideoClient.html b/docs/dc/d0c/classedash__packager_1_1media_1_1WebMVideoClient.html index 8211945d59..1d9aa9d1b0 100644 --- a/docs/dc/d0c/classedash__packager_1_1media_1_1WebMVideoClient.html +++ b/docs/dc/d0c/classedash__packager_1_1media_1_1WebMVideoClient.html @@ -190,7 +190,7 @@ An empty scoped_refptr if there was unexpected values in the provided parameters diff --git a/docs/dc/d0d/structedash__packager_1_1media_1_1mp4_1_1EditListEntry.html b/docs/dc/d0d/structedash__packager_1_1media_1_1mp4_1_1EditListEntry.html index 61b3847e35..fbef605934 100644 --- a/docs/dc/d0d/structedash__packager_1_1media_1_1mp4_1_1EditListEntry.html +++ b/docs/dc/d0d/structedash__packager_1_1media_1_1mp4_1_1EditListEntry.html @@ -118,7 +118,7 @@ int16_t media_rate_fractio diff --git a/docs/dc/d0e/structedash__packager_1_1media_1_1mp4_1_1WVTTSampleEntry.html b/docs/dc/d0e/structedash__packager_1_1media_1_1mp4_1_1WVTTSampleEntry.html index efc4d9cb9e..e69a81652c 100644 --- a/docs/dc/d0e/structedash__packager_1_1media_1_1mp4_1_1WVTTSampleEntry.html +++ b/docs/dc/d0e/structedash__packager_1_1media_1_1mp4_1_1WVTTSampleEntry.html @@ -142,7 +142,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 302 of file box_definitions.h.

    +

    Definition at line 306 of file box_definitions.h.

    Member Function Documentation

    @@ -168,7 +168,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 1322 of file box_definitions.cc.

    +

    Definition at line 1350 of file box_definitions.cc.

    @@ -179,7 +179,7 @@ Additional Inherited Members diff --git a/docs/dc/d19/box_8h_source.html b/docs/dc/d19/box_8h_source.html index 7694122c1c..58783db73a 100644 --- a/docs/dc/d19/box_8h_source.html +++ b/docs/dc/d19/box_8h_source.html @@ -184,7 +184,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d22/dash__iop__mpd__notifier_8cc_source.html b/docs/dc/d22/dash__iop__mpd__notifier_8cc_source.html index 8eb477a8d8..cba4af8ce6 100644 --- a/docs/dc/d22/dash__iop__mpd__notifier_8cc_source.html +++ b/docs/dc/d22/dash__iop__mpd__notifier_8cc_source.html @@ -407,7 +407,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d23/classedash__packager_1_1MockMpdNotifier-members.html b/docs/dc/d23/classedash__packager_1_1MockMpdNotifier-members.html index 6ab0bf4631..7666315491 100644 --- a/docs/dc/d23/classedash__packager_1_1MockMpdNotifier-members.html +++ b/docs/dc/d23/classedash__packager_1_1MockMpdNotifier-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d2f/classedash__packager_1_1media_1_1KeySource-members.html b/docs/dc/d2f/classedash__packager_1_1media_1_1KeySource-members.html index 69d344604b..ef329771db 100644 --- a/docs/dc/d2f/classedash__packager_1_1media_1_1KeySource-members.html +++ b/docs/dc/d2f/classedash__packager_1_1media_1_1KeySource-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d31/classedash__packager_1_1media_1_1ClusterBuilder-members.html b/docs/dc/d31/classedash__packager_1_1media_1_1ClusterBuilder-members.html index 1f6802c3e3..0d5d00adc7 100644 --- a/docs/dc/d31/classedash__packager_1_1media_1_1ClusterBuilder-members.html +++ b/docs/dc/d31/classedash__packager_1_1media_1_1ClusterBuilder-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d35/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html b/docs/dc/d35/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html index eae0213cf7..063e201c31 100644 --- a/docs/dc/d35/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html +++ b/docs/dc/d35/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d3b/fixed__key__encryption__flags_8cc_source.html b/docs/dc/d3b/fixed__key__encryption__flags_8cc_source.html index 5a3ee9cab9..27e7f61eeb 100644 --- a/docs/dc/d3b/fixed__key__encryption__flags_8cc_source.html +++ b/docs/dc/d3b/fixed__key__encryption__flags_8cc_source.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d3c/webm__cluster__parser_8h_source.html b/docs/dc/d3c/webm__cluster__parser_8h_source.html index 3931744b16..1d6a801dd5 100644 --- a/docs/dc/d3c/webm__cluster__parser_8h_source.html +++ b/docs/dc/d3c/webm__cluster__parser_8h_source.html @@ -315,7 +315,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d3f/key__source_8h_source.html b/docs/dc/d3f/key__source_8h_source.html index 6f48a96b0d..2e074ab321 100644 --- a/docs/dc/d3f/key__source_8h_source.html +++ b/docs/dc/d3f/key__source_8h_source.html @@ -189,7 +189,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d41/classedash__packager_1_1xml_1_1RepresentationXmlNode-members.html b/docs/dc/d41/classedash__packager_1_1xml_1_1RepresentationXmlNode-members.html index 616cc699a3..ba2ae608ac 100644 --- a/docs/dc/d41/classedash__packager_1_1xml_1_1RepresentationXmlNode-members.html +++ b/docs/dc/d41/classedash__packager_1_1xml_1_1RepresentationXmlNode-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d44/classedash__packager_1_1xml_1_1XmlNode-members.html b/docs/dc/d44/classedash__packager_1_1xml_1_1XmlNode-members.html index f3b0c2aac9..62123590d5 100644 --- a/docs/dc/d44/classedash__packager_1_1xml_1_1XmlNode-members.html +++ b/docs/dc/d44/classedash__packager_1_1xml_1_1XmlNode-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d46/classedash__packager_1_1media_1_1Cluster-members.html b/docs/dc/d46/classedash__packager_1_1media_1_1Cluster-members.html index 8a8369c560..8befb4eb6e 100644 --- a/docs/dc/d46/classedash__packager_1_1media_1_1Cluster-members.html +++ b/docs/dc/d46/classedash__packager_1_1media_1_1Cluster-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d48/classedash__packager_1_1media_1_1MediaParser.html b/docs/dc/d48/classedash__packager_1_1media_1_1MediaParser.html index 0962d51f26..27fc6ecb9d 100644 --- a/docs/dc/d48/classedash__packager_1_1media_1_1MediaParser.html +++ b/docs/dc/d48/classedash__packager_1_1media_1_1MediaParser.html @@ -297,7 +297,7 @@ Public Member Functions diff --git a/docs/dc/d4a/structedash__packager_1_1media_1_1mp4_1_1WebVTTConfigurationBox-members.html b/docs/dc/d4a/structedash__packager_1_1media_1_1mp4_1_1WebVTTConfigurationBox-members.html index 71c17945bc..dcd5f3335c 100644 --- a/docs/dc/d4a/structedash__packager_1_1media_1_1mp4_1_1WebVTTConfigurationBox-members.html +++ b/docs/dc/d4a/structedash__packager_1_1media_1_1mp4_1_1WebVTTConfigurationBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d51/structedash__packager_1_1media_1_1mp4_1_1WVTTSampleEntry-members.html b/docs/dc/d51/structedash__packager_1_1media_1_1mp4_1_1WVTTSampleEntry-members.html index 314796ebb3..7eda3ef289 100644 --- a/docs/dc/d51/structedash__packager_1_1media_1_1mp4_1_1WVTTSampleEntry-members.html +++ b/docs/dc/d51/structedash__packager_1_1media_1_1mp4_1_1WVTTSampleEntry-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d52/decoding__time__iterator_8h_source.html b/docs/dc/d52/decoding__time__iterator_8h_source.html index 0846f8239c..ba6f830443 100644 --- a/docs/dc/d52/decoding__time__iterator_8h_source.html +++ b/docs/dc/d52/decoding__time__iterator_8h_source.html @@ -142,12 +142,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - +
    uint64_t Duration(uint32_t start_sample, uint32_t end_sample) const
    diff --git a/docs/dc/d53/webm_2segmenter_8cc_source.html b/docs/dc/d53/webm_2segmenter_8cc_source.html index 586415c992..a3c664c971 100644 --- a/docs/dc/d53/webm_2segmenter_8cc_source.html +++ b/docs/dc/d53/webm_2segmenter_8cc_source.html @@ -386,7 +386,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d55/structedash__packager_1_1media_1_1H264SEIMessage-members.html b/docs/dc/d55/structedash__packager_1_1media_1_1H264SEIMessage-members.html index 5e1020087b..e356a2c9e5 100644 --- a/docs/dc/d55/structedash__packager_1_1media_1_1H264SEIMessage-members.html +++ b/docs/dc/d55/structedash__packager_1_1media_1_1H264SEIMessage-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d58/webm__media__parser_8h_source.html b/docs/dc/d58/webm__media__parser_8h_source.html index 1bf3728bd7..a27866d678 100644 --- a/docs/dc/d58/webm__media__parser_8h_source.html +++ b/docs/dc/d58/webm__media__parser_8h_source.html @@ -177,7 +177,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d73/classedash__packager_1_1media_1_1RequestSigner.html b/docs/dc/d73/classedash__packager_1_1media_1_1RequestSigner.html index fcbb55a85c..9160d4ffc3 100644 --- a/docs/dc/d73/classedash__packager_1_1media_1_1RequestSigner.html +++ b/docs/dc/d73/classedash__packager_1_1media_1_1RequestSigner.html @@ -180,7 +180,7 @@ Protected Member Functions diff --git a/docs/dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html b/docs/dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html index b8eebc263c..3f4af7585d 100644 --- a/docs/dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html +++ b/docs/dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html @@ -259,7 +259,7 @@ void set_progress_target diff --git a/docs/dc/d7b/closure__thread_8cc_source.html b/docs/dc/d7b/closure__thread_8cc_source.html index fe9f932f1e..beb52fc402 100644 --- a/docs/dc/d7b/closure__thread_8cc_source.html +++ b/docs/dc/d7b/closure__thread_8cc_source.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d7b/h264__parser_8cc_source.html b/docs/dc/d7b/h264__parser_8cc_source.html index 7a604c571f..279242d7aa 100644 --- a/docs/dc/d7b/h264__parser_8cc_source.html +++ b/docs/dc/d7b/h264__parser_8cc_source.html @@ -1446,7 +1446,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d81/classedash__packager_1_1MpdWriter.html b/docs/dc/d81/classedash__packager_1_1MpdWriter.html index 7f72234160..c92f970e51 100644 --- a/docs/dc/d81/classedash__packager_1_1MpdWriter.html +++ b/docs/dc/d81/classedash__packager_1_1MpdWriter.html @@ -123,7 +123,7 @@ class MpdWriterTest diff --git a/docs/dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html b/docs/dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html index 91788f4079..a9b466d841 100644 --- a/docs/dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html +++ b/docs/dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html @@ -303,7 +303,7 @@ void set_encryption_key diff --git a/docs/dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html b/docs/dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html index 2364341487..7e933883d4 100644 --- a/docs/dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html +++ b/docs/dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html @@ -255,7 +255,7 @@ track_id, const scoped_refptr
    diff --git a/docs/dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html b/docs/dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html index 99d18d4b38..01cd6a26c2 100644 --- a/docs/dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html +++ b/docs/dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html @@ -145,7 +145,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 329 of file box_definitions.h.

    +

    Definition at line 333 of file box_definitions.h.

    Member Function Documentation

    @@ -171,7 +171,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 594 of file box_definitions.cc.

    +

    Definition at line 610 of file box_definitions.cc.

    @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/dc/dbf/box__buffer_8h_source.html b/docs/dc/dbf/box__buffer_8h_source.html index ad755b5fd8..4037be3c76 100644 --- a/docs/dc/dbf/box__buffer_8h_source.html +++ b/docs/dc/dbf/box__buffer_8h_source.html @@ -294,7 +294,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html b/docs/dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html index 5232cde100..91345d2f3f 100644 --- a/docs/dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html +++ b/docs/dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html @@ -313,7 +313,7 @@ static const size_t  diff --git a/docs/dc/dc8/classedash__packager_1_1media_1_1WebMWebVTTParser.html b/docs/dc/dc8/classedash__packager_1_1media_1_1WebMWebVTTParser.html index d666e4bd9a..2932a6638c 100644 --- a/docs/dc/dc8/classedash__packager_1_1media_1_1WebMWebVTTParser.html +++ b/docs/dc/dc8/classedash__packager_1_1media_1_1WebMWebVTTParser.html @@ -111,7 +111,7 @@ static void  diff --git a/docs/dc/dd4/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html b/docs/dc/dd4/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html index 04d5753a90..8989b8a51c 100644 --- a/docs/dc/dd4/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html +++ b/docs/dc/dd4/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/dd9/rsa__key_8cc_source.html b/docs/dc/dd9/rsa__key_8cc_source.html index cf66d3fcd6..e914b6811b 100644 --- a/docs/dc/dd9/rsa__key_8cc_source.html +++ b/docs/dc/dd9/rsa__key_8cc_source.html @@ -350,7 +350,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/ddf/classedash__packager_1_1media_1_1WebMInfoParser-members.html b/docs/dc/ddf/classedash__packager_1_1media_1_1WebMInfoParser-members.html index 46ede226d3..af6a37d248 100644 --- a/docs/dc/ddf/classedash__packager_1_1media_1_1WebMInfoParser-members.html +++ b/docs/dc/ddf/classedash__packager_1_1media_1_1WebMInfoParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/ddf/udp__file__posix_8cc_source.html b/docs/dc/ddf/udp__file__posix_8cc_source.html index dd4505a476..ff249e593b 100644 --- a/docs/dc/ddf/udp__file__posix_8cc_source.html +++ b/docs/dc/ddf/udp__file__posix_8cc_source.html @@ -322,7 +322,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html b/docs/dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html index 69f90ebb47..497e57a61d 100644 --- a/docs/dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html +++ b/docs/dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html @@ -423,7 +423,7 @@ void set_progress_target diff --git a/docs/dc/dec/ts__section__pmt_8cc_source.html b/docs/dc/dec/ts__section__pmt_8cc_source.html index 060e93fdd5..6cea54de0b 100644 --- a/docs/dc/dec/ts__section__pmt_8cc_source.html +++ b/docs/dc/dec/ts__section__pmt_8cc_source.html @@ -207,7 +207,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/def/structedash__packager_1_1media_1_1mp4_1_1DataInformation-members.html b/docs/dc/def/structedash__packager_1_1media_1_1mp4_1_1DataInformation-members.html index 509bd257e5..10f28b98d8 100644 --- a/docs/dc/def/structedash__packager_1_1media_1_1mp4_1_1DataInformation-members.html +++ b/docs/dc/def/structedash__packager_1_1media_1_1mp4_1_1DataInformation-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/df1/classedash__packager_1_1media_1_1DecryptorSource.html b/docs/dc/df1/classedash__packager_1_1media_1_1DecryptorSource.html index ee7bd11073..a99c3e29e8 100644 --- a/docs/dc/df1/classedash__packager_1_1media_1_1DecryptorSource.html +++ b/docs/dc/df1/classedash__packager_1_1media_1_1DecryptorSource.html @@ -158,7 +158,7 @@ Public Member Functions diff --git a/docs/dc/df8/closure__thread_8h_source.html b/docs/dc/df8/closure__thread_8h_source.html index 9bac3ed54b..e2257e2949 100644 --- a/docs/dc/df8/closure__thread_8h_source.html +++ b/docs/dc/df8/closure__thread_8h_source.html @@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html b/docs/dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html index d1d9744c22..f124f33db6 100644 --- a/docs/dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html +++ b/docs/dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html @@ -444,7 +444,7 @@ Additional Inherited Members diff --git a/docs/dc/dfc/classedash__packager_1_1media_1_1Muxer-members.html b/docs/dc/dfc/classedash__packager_1_1media_1_1Muxer-members.html index 91cd2f9cfe..8954f13fbd 100644 --- a/docs/dc/dfc/classedash__packager_1_1media_1_1Muxer-members.html +++ b/docs/dc/dfc/classedash__packager_1_1media_1_1Muxer-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.html b/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.html index 8fe68dcb9a..6d3f2d94d8 100644 --- a/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.html +++ b/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.html @@ -149,7 +149,7 @@ const scoped_refptr
    diff --git a/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.html b/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.html index 8922adaf5b..4c7b18342a 100644 --- a/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.html +++ b/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.html @@ -155,7 +155,7 @@ void Reset () override diff --git a/docs/dd/d11/mpd__builder_8cc_source.html b/docs/dd/d11/mpd__builder_8cc_source.html index d88339f98e..9bec7858ae 100644 --- a/docs/dd/d11/mpd__builder_8cc_source.html +++ b/docs/dd/d11/mpd__builder_8cc_source.html @@ -1458,7 +1458,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d12/mpd__writer_8cc_source.html b/docs/dd/d12/mpd__writer_8cc_source.html index aa20987e73..90ce8a5933 100644 --- a/docs/dd/d12/mpd__writer_8cc_source.html +++ b/docs/dd/d12/mpd__writer_8cc_source.html @@ -224,7 +224,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d12/structedash__packager_1_1media_1_1mp4_1_1CueTimeBox.html b/docs/dd/d12/structedash__packager_1_1media_1_1mp4_1_1CueTimeBox.html index 5f92f11336..e611d278ed 100644 --- a/docs/dd/d12/structedash__packager_1_1media_1_1mp4_1_1CueTimeBox.html +++ b/docs/dd/d12/structedash__packager_1_1media_1_1mp4_1_1CueTimeBox.html @@ -136,7 +136,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 685 of file box_definitions.h.

    +

    Definition at line 689 of file box_definitions.h.

    Member Function Documentation

    @@ -162,7 +162,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 2202 of file box_definitions.cc.

    +

    Definition at line 2230 of file box_definitions.cc.

    @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html b/docs/dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html index 794c807efe..ada375f40e 100644 --- a/docs/dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html +++ b/docs/dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html @@ -189,7 +189,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 441 of file box_definitions.cc.

    +

    Definition at line 457 of file box_definitions.cc.

    @@ -200,7 +200,7 @@ Additional Inherited Members diff --git a/docs/dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html b/docs/dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html index f1e1bfd3df..d16aecf9f1 100644 --- a/docs/dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html +++ b/docs/dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html @@ -204,7 +204,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 484 of file box_definitions.cc.

    +

    Definition at line 500 of file box_definitions.cc.

    @@ -215,7 +215,7 @@ Additional Inherited Members diff --git a/docs/dd/d18/es__parser__adts_8h_source.html b/docs/dd/d18/es__parser__adts_8h_source.html index 5d4bd4f043..cec0242eaf 100644 --- a/docs/dd/d18/es__parser__adts_8h_source.html +++ b/docs/dd/d18/es__parser__adts_8h_source.html @@ -172,7 +172,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d19/video__stream__info_8cc_source.html b/docs/dd/d19/video__stream__info_8cc_source.html index 42c5b3e439..f294b17f00 100644 --- a/docs/dd/d19/video__stream__info_8cc_source.html +++ b/docs/dd/d19/video__stream__info_8cc_source.html @@ -197,7 +197,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d1a/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter-members.html b/docs/dd/d1a/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter-members.html index ca9fc512e7..2ae5ac3e4b 100644 --- a/docs/dd/d1a/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter-members.html +++ b/docs/dd/d1a/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html b/docs/dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html index e10109a1d2..b6dddc88ea 100644 --- a/docs/dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html +++ b/docs/dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html @@ -179,7 +179,7 @@ void  diff --git a/docs/dd/d30/wvm__media__parser_8cc_source.html b/docs/dd/d30/wvm__media__parser_8cc_source.html index c7b620c0a9..7900215a03 100644 --- a/docs/dd/d30/wvm__media__parser_8cc_source.html +++ b/docs/dd/d30/wvm__media__parser_8cc_source.html @@ -839,426 +839,427 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    750  }
    751  if (has_audio) {
    752  AudioCodec audio_codec = kCodecAAC;
    -
    753  stream_infos_.push_back(new AudioStreamInfo(
    -
    754  stream_id_count_, time_scale, track_duration, audio_codec,
    -
    755  std::string(), std::string(), kAacSampleSizeBits, num_channels,
    -
    756  sampling_frequency, vector_as_array(&audio_codec_config),
    -
    757  audio_codec_config.size(), true));
    -
    758  program_demux_stream_map_[base::UintToString(index_program_id_) + ":" +
    -
    759  base::UintToString(audio_pes_stream_id ?
    -
    760  audio_pes_stream_id :
    -
    761  kDefaultAudioStreamId)] =
    -
    762  stream_id_count_++;
    -
    763  }
    -
    764  }
    -
    765 
    -
    766  index_program_id_++;
    -
    767  index_data_.clear();
    -
    768  return true;
    -
    769 }
    -
    770 
    -
    771 bool WvmMediaParser::DemuxNextPes(bool is_program_end) {
    -
    772  bool output_encrypted_sample = false;
    -
    773  if (!sample_data_.empty() && (prev_pes_flags_1_ & kScramblingBitsMask)) {
    -
    774  // Decrypt crypto unit.
    -
    775  if (!content_decryptor_) {
    -
    776  output_encrypted_sample = true;
    -
    777  } else {
    -
    778  content_decryptor_->Decrypt(&sample_data_[crypto_unit_start_pos_],
    -
    779  sample_data_.size() - crypto_unit_start_pos_,
    -
    780  &sample_data_[crypto_unit_start_pos_]);
    -
    781  }
    -
    782  }
    -
    783  // Demux media sample if we are at program end or if we are not at a
    -
    784  // continuation PES.
    -
    785  if ((pes_flags_2_ & kPesOptPts) || is_program_end) {
    -
    786  if (!sample_data_.empty()) {
    -
    787  if (!Output(output_encrypted_sample)) {
    -
    788  return false;
    -
    789  }
    -
    790  }
    -
    791  StartMediaSampleDemux();
    -
    792  }
    -
    793 
    -
    794  crypto_unit_start_pos_ = sample_data_.size();
    -
    795  return true;
    -
    796 }
    -
    797 
    -
    798 void WvmMediaParser::StartMediaSampleDemux() {
    -
    799  bool is_key_frame = ((pes_flags_1_ & kPesOptAlign) != 0);
    -
    800  media_sample_ = MediaSample::CreateEmptyMediaSample();
    -
    801  media_sample_->set_dts(dts_);
    -
    802  media_sample_->set_pts(pts_);
    -
    803  media_sample_->set_is_key_frame(is_key_frame);
    -
    804 
    -
    805  sample_data_.clear();
    -
    806 }
    -
    807 
    -
    808 bool WvmMediaParser::Output(bool output_encrypted_sample) {
    -
    809  if (output_encrypted_sample) {
    -
    810  media_sample_->set_data(vector_as_array(&sample_data_),
    -
    811  sample_data_.size());
    -
    812  media_sample_->set_is_encrypted(true);
    -
    813  } else {
    -
    814  if ((prev_pes_stream_id_ & kPesStreamIdVideoMask) == kPesStreamIdVideo) {
    -
    815  // Convert video stream to unit stream and get config.
    -
    816  std::vector<uint8_t> nal_unit_stream;
    -
    817  if (!byte_to_unit_stream_converter_.ConvertByteStreamToNalUnitStream(
    -
    818  vector_as_array(&sample_data_), sample_data_.size(),
    -
    819  &nal_unit_stream)) {
    -
    820  LOG(ERROR) << "Could not convert h.264 byte stream sample";
    -
    821  return false;
    -
    822  }
    -
    823  media_sample_->set_data(nal_unit_stream.data(), nal_unit_stream.size());
    -
    824  if (!is_initialized_) {
    -
    825  // Set extra data for video stream from AVC Decoder Config Record.
    -
    826  // Also, set codec string from the AVC Decoder Config Record.
    -
    827  std::vector<uint8_t> decoder_config_record;
    -
    828  byte_to_unit_stream_converter_.GetAVCDecoderConfigurationRecord(
    -
    829  &decoder_config_record);
    -
    830  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
    -
    831  if (stream_infos_[i]->stream_type() == media::kStreamVideo &&
    -
    832  stream_infos_[i]->codec_string().empty()) {
    -
    833  const std::vector<uint8_t>* stream_config;
    -
    834  if (stream_infos_[i]->extra_data().empty()) {
    -
    835  // Decoder config record not available for stream. Use the one
    -
    836  // computed from the first video stream.
    -
    837  stream_infos_[i]->set_extra_data(decoder_config_record);
    -
    838  stream_config = &decoder_config_record;
    -
    839  } else {
    -
    840  // Use stream-specific config record.
    -
    841  stream_config = &stream_infos_[i]->extra_data();
    -
    842  }
    -
    843  DCHECK(stream_config);
    -
    844 
    -
    845  VideoStreamInfo* video_stream_info =
    -
    846  reinterpret_cast<VideoStreamInfo*>(stream_infos_[i].get());
    -
    847  AVCDecoderConfiguration avc_config;
    -
    848  if (!avc_config.Parse(*stream_config)) {
    -
    849  LOG(WARNING) << "Failed to parse AVCDecoderConfigurationRecord. "
    -
    850  "Using computed configuration record instead.";
    -
    851  video_stream_info->set_extra_data(decoder_config_record);
    -
    852  if (!avc_config.Parse(decoder_config_record)) {
    -
    853  LOG(ERROR) << "Failed to parse AVCDecoderConfigurationRecord.";
    -
    854  return false;
    -
    855  }
    -
    856  }
    -
    857  video_stream_info->set_codec_string(avc_config.GetCodecString());
    -
    858 
    -
    859  if (avc_config.pixel_width() != video_stream_info->pixel_width() ||
    -
    860  avc_config.pixel_height() !=
    -
    861  video_stream_info->pixel_height()) {
    -
    862  LOG_IF(WARNING, video_stream_info->pixel_width() != 0 ||
    -
    863  video_stream_info->pixel_height() != 0)
    -
    864  << "Pixel aspect ratio in WVM metadata ("
    -
    865  << video_stream_info->pixel_width() << ","
    -
    866  << video_stream_info->pixel_height()
    -
    867  << ") does not match with SAR in "
    -
    868  "AVCDecoderConfigurationRecord ("
    -
    869  << avc_config.pixel_width() << ","
    -
    870  << avc_config.pixel_height()
    -
    871  << "). Use AVCDecoderConfigurationRecord.";
    -
    872  video_stream_info->set_pixel_width(avc_config.pixel_width());
    -
    873  video_stream_info->set_pixel_height(avc_config.pixel_height());
    -
    874  }
    -
    875  if (avc_config.coded_width() != video_stream_info->width() ||
    -
    876  avc_config.coded_height() != video_stream_info->height()) {
    -
    877  LOG(WARNING) << "Resolution in WVM metadata ("
    -
    878  << video_stream_info->width() << ","
    -
    879  << video_stream_info->height()
    -
    880  << ") does not match with resolution in "
    -
    881  "AVCDecoderConfigurationRecord ("
    -
    882  << avc_config.coded_width() << ","
    -
    883  << avc_config.coded_height()
    -
    884  << "). Use AVCDecoderConfigurationRecord.";
    -
    885  video_stream_info->set_width(avc_config.coded_width());
    -
    886  video_stream_info->set_height(avc_config.coded_height());
    -
    887  }
    -
    888  }
    -
    889  }
    -
    890  }
    -
    891  } else if ((prev_pes_stream_id_ & kPesStreamIdAudioMask) ==
    -
    892  kPesStreamIdAudio) {
    -
    893  // Set data on the audio stream.
    - -
    895  vector_as_array(&sample_data_), kAdtsHeaderMinSize);
    -
    896  media::mp2t::AdtsHeader adts_header;
    -
    897  const uint8_t* frame_ptr = vector_as_array(&sample_data_);
    -
    898  if (!adts_header.Parse(frame_ptr, frame_size)) {
    -
    899  LOG(ERROR) << "Could not parse ADTS header";
    -
    900  return false;
    -
    901  }
    -
    902  size_t header_size = adts_header.GetAdtsHeaderSize(frame_ptr,
    -
    903  frame_size);
    -
    904  media_sample_->set_data(frame_ptr + header_size,
    -
    905  frame_size - header_size);
    -
    906  if (!is_initialized_) {
    -
    907  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
    -
    908  if (stream_infos_[i]->stream_type() == media::kStreamAudio &&
    -
    909  stream_infos_[i]->codec_string().empty()) {
    -
    910  AudioStreamInfo* audio_stream_info =
    -
    911  reinterpret_cast<AudioStreamInfo*>(stream_infos_[i].get());
    -
    912  if (audio_stream_info->extra_data().empty()) {
    -
    913  // Set AudioStreamInfo fields using information from the ADTS
    -
    914  // header.
    -
    915  audio_stream_info->set_sampling_frequency(
    -
    916  adts_header.GetSamplingFrequency());
    -
    917  std::vector<uint8_t> audio_specific_config;
    -
    918  if (!adts_header.GetAudioSpecificConfig(&audio_specific_config)) {
    -
    919  LOG(ERROR) << "Could not compute AACaudiospecificconfig";
    -
    920  return false;
    -
    921  }
    -
    922  audio_stream_info->set_extra_data(audio_specific_config);
    -
    923  audio_stream_info->set_codec_string(
    - -
    925  kCodecAAC, adts_header.GetObjectType()));
    -
    926  } else {
    -
    927  // Set AudioStreamInfo fields using information from the
    -
    928  // AACAudioSpecificConfig record.
    -
    929  mp4::AACAudioSpecificConfig aac_config;
    -
    930  if (!aac_config.Parse(stream_infos_[i]->extra_data())) {
    -
    931  LOG(ERROR) << "Could not parse AACAudioSpecificconfig";
    -
    932  return false;
    -
    933  }
    -
    934  audio_stream_info->set_sampling_frequency(aac_config.frequency());
    -
    935  audio_stream_info->set_codec_string(
    - -
    937  kCodecAAC, aac_config.audio_object_type()));
    -
    938  }
    -
    939  }
    -
    940  }
    -
    941  }
    -
    942  }
    -
    943  }
    -
    944 
    -
    945  if (!is_initialized_) {
    -
    946  bool all_streams_have_config = true;
    -
    947  // Check if all collected stream infos have extra_data set.
    -
    948  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
    -
    949  if (stream_infos_[i]->codec_string().empty()) {
    -
    950  all_streams_have_config = false;
    -
    951  break;
    -
    952  }
    -
    953  }
    -
    954  if (all_streams_have_config) {
    -
    955  init_cb_.Run(stream_infos_);
    -
    956  is_initialized_ = true;
    -
    957  }
    -
    958  }
    -
    959 
    -
    960  DCHECK_GT(media_sample_->data_size(), 0UL);
    -
    961  std::string key = base::UintToString(current_program_id_).append(":")
    -
    962  .append(base::UintToString(prev_pes_stream_id_));
    -
    963  std::map<std::string, uint32_t>::iterator it =
    -
    964  program_demux_stream_map_.find(key);
    -
    965  if (it == program_demux_stream_map_.end()) {
    -
    966  // TODO(ramjic): Log error message here and in other error cases through
    -
    967  // this method.
    -
    968  return false;
    -
    969  }
    -
    970  DemuxStreamIdMediaSample demux_stream_media_sample;
    -
    971  demux_stream_media_sample.parsed_audio_or_video_stream_id =
    -
    972  prev_pes_stream_id_;
    -
    973  demux_stream_media_sample.demux_stream_id = (*it).second;
    -
    974  demux_stream_media_sample.media_sample = media_sample_;
    -
    975  // Check if sample can be emitted.
    -
    976  if (!is_initialized_) {
    -
    977  media_sample_queue_.push_back(demux_stream_media_sample);
    -
    978  } else {
    -
    979  // flush the sample queue and emit all queued samples.
    -
    980  while (!media_sample_queue_.empty()) {
    -
    981  if (!EmitPendingSamples())
    -
    982  return false;
    -
    983  }
    -
    984  // Emit current sample.
    -
    985  if (!EmitSample(prev_pes_stream_id_, (*it).second, media_sample_, false))
    -
    986  return false;
    -
    987  }
    -
    988  return true;
    -
    989 }
    -
    990 
    -
    991 bool WvmMediaParser::EmitSample(uint32_t parsed_audio_or_video_stream_id,
    -
    992  uint32_t stream_id,
    -
    993  scoped_refptr<MediaSample>& new_sample,
    -
    994  bool isLastSample) {
    -
    995  DCHECK(new_sample);
    -
    996  if (isLastSample) {
    -
    997  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
    -
    998  kPesStreamIdVideo) {
    -
    999  new_sample->set_duration(prev_media_sample_data_.video_sample_duration);
    -
    1000  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
    -
    1001  kPesStreamIdAudio) {
    -
    1002  new_sample->set_duration(prev_media_sample_data_.audio_sample_duration);
    -
    1003  }
    -
    1004  if (!new_sample_cb_.Run(stream_id, new_sample)) {
    -
    1005  LOG(ERROR) << "Failed to process the last sample.";
    -
    1006  return false;
    -
    1007  }
    -
    1008  return true;
    -
    1009  }
    -
    1010 
    -
    1011  // Cannot emit current sample. Compute duration first and then,
    -
    1012  // emit previous sample.
    -
    1013  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
    -
    1014  kPesStreamIdVideo) {
    -
    1015  if (prev_media_sample_data_.video_sample == NULL) {
    -
    1016  prev_media_sample_data_.video_sample = new_sample;
    -
    1017  prev_media_sample_data_.video_stream_id = stream_id;
    -
    1018  return true;
    -
    1019  }
    -
    1020  prev_media_sample_data_.video_sample->set_duration(
    -
    1021  new_sample->dts() - prev_media_sample_data_.video_sample->dts());
    -
    1022  prev_media_sample_data_.video_sample_duration =
    -
    1023  prev_media_sample_data_.video_sample->duration();
    -
    1024  if (!new_sample_cb_.Run(prev_media_sample_data_.video_stream_id,
    -
    1025  prev_media_sample_data_.video_sample)) {
    -
    1026  LOG(ERROR) << "Failed to process the video sample.";
    -
    1027  return false;
    -
    1028  }
    -
    1029  prev_media_sample_data_.video_sample = new_sample;
    -
    1030  prev_media_sample_data_.video_stream_id = stream_id;
    -
    1031  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
    -
    1032  kPesStreamIdAudio) {
    -
    1033  if (prev_media_sample_data_.audio_sample == NULL) {
    -
    1034  prev_media_sample_data_.audio_sample = new_sample;
    -
    1035  prev_media_sample_data_.audio_stream_id = stream_id;
    -
    1036  return true;
    -
    1037  }
    -
    1038  prev_media_sample_data_.audio_sample->set_duration(
    -
    1039  new_sample->dts() - prev_media_sample_data_.audio_sample->dts());
    -
    1040  prev_media_sample_data_.audio_sample_duration =
    -
    1041  prev_media_sample_data_.audio_sample->duration();
    -
    1042  if (!new_sample_cb_.Run(prev_media_sample_data_.audio_stream_id,
    -
    1043  prev_media_sample_data_.audio_sample)) {
    -
    1044  LOG(ERROR) << "Failed to process the audio sample.";
    -
    1045  return false;
    -
    1046  }
    -
    1047  prev_media_sample_data_.audio_sample = new_sample;
    -
    1048  prev_media_sample_data_.audio_stream_id = stream_id;
    -
    1049  }
    -
    1050  return true;
    -
    1051 }
    -
    1052 
    -
    1053 bool WvmMediaParser::GetAssetKey(const uint32_t asset_id,
    -
    1054  EncryptionKey* encryption_key) {
    -
    1055  DCHECK(decryption_key_source_);
    -
    1056  Status status = decryption_key_source_->FetchKeys(asset_id);
    -
    1057  if (!status.ok()) {
    -
    1058  LOG(ERROR) << "Fetch Key(s) failed for AssetID = " << asset_id
    -
    1059  << ", error = " << status;
    -
    1060  return false;
    -
    1061  }
    -
    1062 
    -
    1063  status = decryption_key_source_->GetKey(KeySource::TRACK_TYPE_HD,
    -
    1064  encryption_key);
    -
    1065  if (!status.ok()) {
    -
    1066  LOG(ERROR) << "Fetch Key(s) failed for AssetID = " << asset_id
    -
    1067  << ", error = " << status;
    -
    1068  return false;
    -
    1069  }
    -
    1070 
    -
    1071  return true;
    -
    1072 }
    -
    1073 
    -
    1074 bool WvmMediaParser::ProcessEcm() {
    -
    1075  // An error will be returned later if the samples need to be decrypted.
    -
    1076  if (!decryption_key_source_)
    -
    1077  return true;
    -
    1078 
    -
    1079  if (current_program_id_ > 0) {
    -
    1080  return true;
    -
    1081  }
    -
    1082  if (ecm_.size() != kEcmSizeBytes) {
    -
    1083  LOG(ERROR) << "Unexpected ECM size = " << ecm_.size()
    -
    1084  << ", expected size = " << kEcmSizeBytes;
    -
    1085  return false;
    -
    1086  }
    -
    1087  const uint8_t* ecm_data = ecm_.data();
    -
    1088  DCHECK(ecm_data);
    -
    1089  ecm_data += sizeof(uint32_t); // old version field - skip.
    -
    1090  ecm_data += sizeof(uint32_t); // clear lead - skip.
    -
    1091  ecm_data += sizeof(uint32_t); // system id(includes ECM version) - skip.
    -
    1092  uint32_t asset_id = ntohlFromBuffer(ecm_data);
    -
    1093  if (asset_id == 0) {
    -
    1094  LOG(ERROR) << "AssetID in ECM is not valid.";
    -
    1095  return false;
    -
    1096  }
    -
    1097  ecm_data += sizeof(uint32_t); // asset_id.
    -
    1098  EncryptionKey encryption_key;
    -
    1099  if (!GetAssetKey(asset_id, &encryption_key)) {
    -
    1100  return false;
    -
    1101  }
    -
    1102  if (encryption_key.key.size() < kAssetKeySizeBytes) {
    -
    1103  LOG(ERROR) << "Asset Key size of " << encryption_key.key.size()
    -
    1104  << " for AssetID = " << asset_id
    -
    1105  << " is less than minimum asset key size.";
    -
    1106  return false;
    -
    1107  }
    -
    1108  // Legacy WVM content may have asset keys > 16 bytes.
    -
    1109  // Use only the first 16 bytes of the asset key to get
    -
    1110  // the content key.
    -
    1111  std::vector<uint8_t> asset_key(
    -
    1112  encryption_key.key.begin(),
    -
    1113  encryption_key.key.begin() + kAssetKeySizeBytes);
    -
    1114  std::vector<uint8_t> iv(kInitializationVectorSizeBytes);
    -
    1115  AesCbcCtsDecryptor asset_decryptor;
    -
    1116  if (!asset_decryptor.InitializeWithIv(asset_key, iv)) {
    -
    1117  LOG(ERROR) << "Failed to initialize asset_decryptor.";
    -
    1118  return false;
    -
    1119  }
    -
    1120 
    -
    1121  const size_t content_key_buffer_size =
    -
    1122  kEcmFlagsSizeBytes + kEcmContentKeySizeBytes +
    -
    1123  kEcmPaddingSizeBytes; // flags + contentKey + padding.
    -
    1124  std::vector<uint8_t> content_key_buffer(content_key_buffer_size);
    -
    1125  asset_decryptor.Decrypt(
    -
    1126  ecm_data, content_key_buffer_size, vector_as_array(&content_key_buffer));
    -
    1127 
    -
    1128  std::vector<uint8_t> decrypted_content_key_vec(
    -
    1129  content_key_buffer.begin() + 4,
    -
    1130  content_key_buffer.begin() + 20);
    -
    1131  scoped_ptr<AesCbcCtsDecryptor> content_decryptor(new AesCbcCtsDecryptor);
    -
    1132  if (!content_decryptor->InitializeWithIv(decrypted_content_key_vec, iv)) {
    -
    1133  LOG(ERROR) << "Failed to initialize content decryptor.";
    -
    1134  return false;
    -
    1135  }
    -
    1136 
    -
    1137  content_decryptor_ = content_decryptor.Pass();
    -
    1138  return true;
    -
    1139 }
    -
    1140 
    -
    1141 DemuxStreamIdMediaSample::DemuxStreamIdMediaSample() :
    -
    1142  demux_stream_id(0),
    -
    1143  parsed_audio_or_video_stream_id(0) {}
    -
    1144 
    -
    1145 DemuxStreamIdMediaSample::~DemuxStreamIdMediaSample() {}
    -
    1146 
    -
    1147 PrevSampleData::PrevSampleData() {
    -
    1148  Reset();
    -
    1149 }
    -
    1150 
    -
    1151 PrevSampleData::~PrevSampleData() {}
    -
    1152 
    -
    1153 void PrevSampleData::Reset() {
    -
    1154  audio_sample = NULL;
    -
    1155  video_sample = NULL;
    -
    1156  audio_stream_id = 0;
    -
    1157  video_stream_id = 0;
    -
    1158  audio_sample_duration = 0;
    -
    1159  video_sample_duration = 0;
    -
    1160 }
    -
    1161 
    -
    1162 } // namespace wvm
    -
    1163 } // namespace media
    -
    1164 } // namespace edash_packager
    +
    753  // TODO(beil): Pass in max and average bitrate in wvm container.
    +
    754  stream_infos_.push_back(new AudioStreamInfo(
    +
    755  stream_id_count_, time_scale, track_duration, audio_codec,
    +
    756  std::string(), std::string(), kAacSampleSizeBits, num_channels,
    +
    757  sampling_frequency, 0, 0, vector_as_array(&audio_codec_config),
    +
    758  audio_codec_config.size(), true));
    +
    759  program_demux_stream_map_[base::UintToString(index_program_id_) + ":" +
    +
    760  base::UintToString(audio_pes_stream_id ?
    +
    761  audio_pes_stream_id :
    +
    762  kDefaultAudioStreamId)] =
    +
    763  stream_id_count_++;
    +
    764  }
    +
    765  }
    +
    766 
    +
    767  index_program_id_++;
    +
    768  index_data_.clear();
    +
    769  return true;
    +
    770 }
    +
    771 
    +
    772 bool WvmMediaParser::DemuxNextPes(bool is_program_end) {
    +
    773  bool output_encrypted_sample = false;
    +
    774  if (!sample_data_.empty() && (prev_pes_flags_1_ & kScramblingBitsMask)) {
    +
    775  // Decrypt crypto unit.
    +
    776  if (!content_decryptor_) {
    +
    777  output_encrypted_sample = true;
    +
    778  } else {
    +
    779  content_decryptor_->Decrypt(&sample_data_[crypto_unit_start_pos_],
    +
    780  sample_data_.size() - crypto_unit_start_pos_,
    +
    781  &sample_data_[crypto_unit_start_pos_]);
    +
    782  }
    +
    783  }
    +
    784  // Demux media sample if we are at program end or if we are not at a
    +
    785  // continuation PES.
    +
    786  if ((pes_flags_2_ & kPesOptPts) || is_program_end) {
    +
    787  if (!sample_data_.empty()) {
    +
    788  if (!Output(output_encrypted_sample)) {
    +
    789  return false;
    +
    790  }
    +
    791  }
    +
    792  StartMediaSampleDemux();
    +
    793  }
    +
    794 
    +
    795  crypto_unit_start_pos_ = sample_data_.size();
    +
    796  return true;
    +
    797 }
    +
    798 
    +
    799 void WvmMediaParser::StartMediaSampleDemux() {
    +
    800  bool is_key_frame = ((pes_flags_1_ & kPesOptAlign) != 0);
    +
    801  media_sample_ = MediaSample::CreateEmptyMediaSample();
    +
    802  media_sample_->set_dts(dts_);
    +
    803  media_sample_->set_pts(pts_);
    +
    804  media_sample_->set_is_key_frame(is_key_frame);
    +
    805 
    +
    806  sample_data_.clear();
    +
    807 }
    +
    808 
    +
    809 bool WvmMediaParser::Output(bool output_encrypted_sample) {
    +
    810  if (output_encrypted_sample) {
    +
    811  media_sample_->set_data(vector_as_array(&sample_data_),
    +
    812  sample_data_.size());
    +
    813  media_sample_->set_is_encrypted(true);
    +
    814  } else {
    +
    815  if ((prev_pes_stream_id_ & kPesStreamIdVideoMask) == kPesStreamIdVideo) {
    +
    816  // Convert video stream to unit stream and get config.
    +
    817  std::vector<uint8_t> nal_unit_stream;
    +
    818  if (!byte_to_unit_stream_converter_.ConvertByteStreamToNalUnitStream(
    +
    819  vector_as_array(&sample_data_), sample_data_.size(),
    +
    820  &nal_unit_stream)) {
    +
    821  LOG(ERROR) << "Could not convert h.264 byte stream sample";
    +
    822  return false;
    +
    823  }
    +
    824  media_sample_->set_data(nal_unit_stream.data(), nal_unit_stream.size());
    +
    825  if (!is_initialized_) {
    +
    826  // Set extra data for video stream from AVC Decoder Config Record.
    +
    827  // Also, set codec string from the AVC Decoder Config Record.
    +
    828  std::vector<uint8_t> decoder_config_record;
    +
    829  byte_to_unit_stream_converter_.GetAVCDecoderConfigurationRecord(
    +
    830  &decoder_config_record);
    +
    831  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
    +
    832  if (stream_infos_[i]->stream_type() == media::kStreamVideo &&
    +
    833  stream_infos_[i]->codec_string().empty()) {
    +
    834  const std::vector<uint8_t>* stream_config;
    +
    835  if (stream_infos_[i]->extra_data().empty()) {
    +
    836  // Decoder config record not available for stream. Use the one
    +
    837  // computed from the first video stream.
    +
    838  stream_infos_[i]->set_extra_data(decoder_config_record);
    +
    839  stream_config = &decoder_config_record;
    +
    840  } else {
    +
    841  // Use stream-specific config record.
    +
    842  stream_config = &stream_infos_[i]->extra_data();
    +
    843  }
    +
    844  DCHECK(stream_config);
    +
    845 
    +
    846  VideoStreamInfo* video_stream_info =
    +
    847  reinterpret_cast<VideoStreamInfo*>(stream_infos_[i].get());
    +
    848  AVCDecoderConfiguration avc_config;
    +
    849  if (!avc_config.Parse(*stream_config)) {
    +
    850  LOG(WARNING) << "Failed to parse AVCDecoderConfigurationRecord. "
    +
    851  "Using computed configuration record instead.";
    +
    852  video_stream_info->set_extra_data(decoder_config_record);
    +
    853  if (!avc_config.Parse(decoder_config_record)) {
    +
    854  LOG(ERROR) << "Failed to parse AVCDecoderConfigurationRecord.";
    +
    855  return false;
    +
    856  }
    +
    857  }
    +
    858  video_stream_info->set_codec_string(avc_config.GetCodecString());
    +
    859 
    +
    860  if (avc_config.pixel_width() != video_stream_info->pixel_width() ||
    +
    861  avc_config.pixel_height() !=
    +
    862  video_stream_info->pixel_height()) {
    +
    863  LOG_IF(WARNING, video_stream_info->pixel_width() != 0 ||
    +
    864  video_stream_info->pixel_height() != 0)
    +
    865  << "Pixel aspect ratio in WVM metadata ("
    +
    866  << video_stream_info->pixel_width() << ","
    +
    867  << video_stream_info->pixel_height()
    +
    868  << ") does not match with SAR in "
    +
    869  "AVCDecoderConfigurationRecord ("
    +
    870  << avc_config.pixel_width() << ","
    +
    871  << avc_config.pixel_height()
    +
    872  << "). Use AVCDecoderConfigurationRecord.";
    +
    873  video_stream_info->set_pixel_width(avc_config.pixel_width());
    +
    874  video_stream_info->set_pixel_height(avc_config.pixel_height());
    +
    875  }
    +
    876  if (avc_config.coded_width() != video_stream_info->width() ||
    +
    877  avc_config.coded_height() != video_stream_info->height()) {
    +
    878  LOG(WARNING) << "Resolution in WVM metadata ("
    +
    879  << video_stream_info->width() << ","
    +
    880  << video_stream_info->height()
    +
    881  << ") does not match with resolution in "
    +
    882  "AVCDecoderConfigurationRecord ("
    +
    883  << avc_config.coded_width() << ","
    +
    884  << avc_config.coded_height()
    +
    885  << "). Use AVCDecoderConfigurationRecord.";
    +
    886  video_stream_info->set_width(avc_config.coded_width());
    +
    887  video_stream_info->set_height(avc_config.coded_height());
    +
    888  }
    +
    889  }
    +
    890  }
    +
    891  }
    +
    892  } else if ((prev_pes_stream_id_ & kPesStreamIdAudioMask) ==
    +
    893  kPesStreamIdAudio) {
    +
    894  // Set data on the audio stream.
    + +
    896  vector_as_array(&sample_data_), kAdtsHeaderMinSize);
    +
    897  media::mp2t::AdtsHeader adts_header;
    +
    898  const uint8_t* frame_ptr = vector_as_array(&sample_data_);
    +
    899  if (!adts_header.Parse(frame_ptr, frame_size)) {
    +
    900  LOG(ERROR) << "Could not parse ADTS header";
    +
    901  return false;
    +
    902  }
    +
    903  size_t header_size = adts_header.GetAdtsHeaderSize(frame_ptr,
    +
    904  frame_size);
    +
    905  media_sample_->set_data(frame_ptr + header_size,
    +
    906  frame_size - header_size);
    +
    907  if (!is_initialized_) {
    +
    908  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
    +
    909  if (stream_infos_[i]->stream_type() == media::kStreamAudio &&
    +
    910  stream_infos_[i]->codec_string().empty()) {
    +
    911  AudioStreamInfo* audio_stream_info =
    +
    912  reinterpret_cast<AudioStreamInfo*>(stream_infos_[i].get());
    +
    913  if (audio_stream_info->extra_data().empty()) {
    +
    914  // Set AudioStreamInfo fields using information from the ADTS
    +
    915  // header.
    +
    916  audio_stream_info->set_sampling_frequency(
    +
    917  adts_header.GetSamplingFrequency());
    +
    918  std::vector<uint8_t> audio_specific_config;
    +
    919  if (!adts_header.GetAudioSpecificConfig(&audio_specific_config)) {
    +
    920  LOG(ERROR) << "Could not compute AACaudiospecificconfig";
    +
    921  return false;
    +
    922  }
    +
    923  audio_stream_info->set_extra_data(audio_specific_config);
    +
    924  audio_stream_info->set_codec_string(
    + +
    926  kCodecAAC, adts_header.GetObjectType()));
    +
    927  } else {
    +
    928  // Set AudioStreamInfo fields using information from the
    +
    929  // AACAudioSpecificConfig record.
    +
    930  mp4::AACAudioSpecificConfig aac_config;
    +
    931  if (!aac_config.Parse(stream_infos_[i]->extra_data())) {
    +
    932  LOG(ERROR) << "Could not parse AACAudioSpecificconfig";
    +
    933  return false;
    +
    934  }
    +
    935  audio_stream_info->set_sampling_frequency(aac_config.frequency());
    +
    936  audio_stream_info->set_codec_string(
    + +
    938  kCodecAAC, aac_config.audio_object_type()));
    +
    939  }
    +
    940  }
    +
    941  }
    +
    942  }
    +
    943  }
    +
    944  }
    +
    945 
    +
    946  if (!is_initialized_) {
    +
    947  bool all_streams_have_config = true;
    +
    948  // Check if all collected stream infos have extra_data set.
    +
    949  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
    +
    950  if (stream_infos_[i]->codec_string().empty()) {
    +
    951  all_streams_have_config = false;
    +
    952  break;
    +
    953  }
    +
    954  }
    +
    955  if (all_streams_have_config) {
    +
    956  init_cb_.Run(stream_infos_);
    +
    957  is_initialized_ = true;
    +
    958  }
    +
    959  }
    +
    960 
    +
    961  DCHECK_GT(media_sample_->data_size(), 0UL);
    +
    962  std::string key = base::UintToString(current_program_id_).append(":")
    +
    963  .append(base::UintToString(prev_pes_stream_id_));
    +
    964  std::map<std::string, uint32_t>::iterator it =
    +
    965  program_demux_stream_map_.find(key);
    +
    966  if (it == program_demux_stream_map_.end()) {
    +
    967  // TODO(ramjic): Log error message here and in other error cases through
    +
    968  // this method.
    +
    969  return false;
    +
    970  }
    +
    971  DemuxStreamIdMediaSample demux_stream_media_sample;
    +
    972  demux_stream_media_sample.parsed_audio_or_video_stream_id =
    +
    973  prev_pes_stream_id_;
    +
    974  demux_stream_media_sample.demux_stream_id = (*it).second;
    +
    975  demux_stream_media_sample.media_sample = media_sample_;
    +
    976  // Check if sample can be emitted.
    +
    977  if (!is_initialized_) {
    +
    978  media_sample_queue_.push_back(demux_stream_media_sample);
    +
    979  } else {
    +
    980  // flush the sample queue and emit all queued samples.
    +
    981  while (!media_sample_queue_.empty()) {
    +
    982  if (!EmitPendingSamples())
    +
    983  return false;
    +
    984  }
    +
    985  // Emit current sample.
    +
    986  if (!EmitSample(prev_pes_stream_id_, (*it).second, media_sample_, false))
    +
    987  return false;
    +
    988  }
    +
    989  return true;
    +
    990 }
    +
    991 
    +
    992 bool WvmMediaParser::EmitSample(uint32_t parsed_audio_or_video_stream_id,
    +
    993  uint32_t stream_id,
    +
    994  scoped_refptr<MediaSample>& new_sample,
    +
    995  bool isLastSample) {
    +
    996  DCHECK(new_sample);
    +
    997  if (isLastSample) {
    +
    998  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
    +
    999  kPesStreamIdVideo) {
    +
    1000  new_sample->set_duration(prev_media_sample_data_.video_sample_duration);
    +
    1001  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
    +
    1002  kPesStreamIdAudio) {
    +
    1003  new_sample->set_duration(prev_media_sample_data_.audio_sample_duration);
    +
    1004  }
    +
    1005  if (!new_sample_cb_.Run(stream_id, new_sample)) {
    +
    1006  LOG(ERROR) << "Failed to process the last sample.";
    +
    1007  return false;
    +
    1008  }
    +
    1009  return true;
    +
    1010  }
    +
    1011 
    +
    1012  // Cannot emit current sample. Compute duration first and then,
    +
    1013  // emit previous sample.
    +
    1014  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
    +
    1015  kPesStreamIdVideo) {
    +
    1016  if (prev_media_sample_data_.video_sample == NULL) {
    +
    1017  prev_media_sample_data_.video_sample = new_sample;
    +
    1018  prev_media_sample_data_.video_stream_id = stream_id;
    +
    1019  return true;
    +
    1020  }
    +
    1021  prev_media_sample_data_.video_sample->set_duration(
    +
    1022  new_sample->dts() - prev_media_sample_data_.video_sample->dts());
    +
    1023  prev_media_sample_data_.video_sample_duration =
    +
    1024  prev_media_sample_data_.video_sample->duration();
    +
    1025  if (!new_sample_cb_.Run(prev_media_sample_data_.video_stream_id,
    +
    1026  prev_media_sample_data_.video_sample)) {
    +
    1027  LOG(ERROR) << "Failed to process the video sample.";
    +
    1028  return false;
    +
    1029  }
    +
    1030  prev_media_sample_data_.video_sample = new_sample;
    +
    1031  prev_media_sample_data_.video_stream_id = stream_id;
    +
    1032  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
    +
    1033  kPesStreamIdAudio) {
    +
    1034  if (prev_media_sample_data_.audio_sample == NULL) {
    +
    1035  prev_media_sample_data_.audio_sample = new_sample;
    +
    1036  prev_media_sample_data_.audio_stream_id = stream_id;
    +
    1037  return true;
    +
    1038  }
    +
    1039  prev_media_sample_data_.audio_sample->set_duration(
    +
    1040  new_sample->dts() - prev_media_sample_data_.audio_sample->dts());
    +
    1041  prev_media_sample_data_.audio_sample_duration =
    +
    1042  prev_media_sample_data_.audio_sample->duration();
    +
    1043  if (!new_sample_cb_.Run(prev_media_sample_data_.audio_stream_id,
    +
    1044  prev_media_sample_data_.audio_sample)) {
    +
    1045  LOG(ERROR) << "Failed to process the audio sample.";
    +
    1046  return false;
    +
    1047  }
    +
    1048  prev_media_sample_data_.audio_sample = new_sample;
    +
    1049  prev_media_sample_data_.audio_stream_id = stream_id;
    +
    1050  }
    +
    1051  return true;
    +
    1052 }
    +
    1053 
    +
    1054 bool WvmMediaParser::GetAssetKey(const uint32_t asset_id,
    +
    1055  EncryptionKey* encryption_key) {
    +
    1056  DCHECK(decryption_key_source_);
    +
    1057  Status status = decryption_key_source_->FetchKeys(asset_id);
    +
    1058  if (!status.ok()) {
    +
    1059  LOG(ERROR) << "Fetch Key(s) failed for AssetID = " << asset_id
    +
    1060  << ", error = " << status;
    +
    1061  return false;
    +
    1062  }
    +
    1063 
    +
    1064  status = decryption_key_source_->GetKey(KeySource::TRACK_TYPE_HD,
    +
    1065  encryption_key);
    +
    1066  if (!status.ok()) {
    +
    1067  LOG(ERROR) << "Fetch Key(s) failed for AssetID = " << asset_id
    +
    1068  << ", error = " << status;
    +
    1069  return false;
    +
    1070  }
    +
    1071 
    +
    1072  return true;
    +
    1073 }
    +
    1074 
    +
    1075 bool WvmMediaParser::ProcessEcm() {
    +
    1076  // An error will be returned later if the samples need to be decrypted.
    +
    1077  if (!decryption_key_source_)
    +
    1078  return true;
    +
    1079 
    +
    1080  if (current_program_id_ > 0) {
    +
    1081  return true;
    +
    1082  }
    +
    1083  if (ecm_.size() != kEcmSizeBytes) {
    +
    1084  LOG(ERROR) << "Unexpected ECM size = " << ecm_.size()
    +
    1085  << ", expected size = " << kEcmSizeBytes;
    +
    1086  return false;
    +
    1087  }
    +
    1088  const uint8_t* ecm_data = ecm_.data();
    +
    1089  DCHECK(ecm_data);
    +
    1090  ecm_data += sizeof(uint32_t); // old version field - skip.
    +
    1091  ecm_data += sizeof(uint32_t); // clear lead - skip.
    +
    1092  ecm_data += sizeof(uint32_t); // system id(includes ECM version) - skip.
    +
    1093  uint32_t asset_id = ntohlFromBuffer(ecm_data);
    +
    1094  if (asset_id == 0) {
    +
    1095  LOG(ERROR) << "AssetID in ECM is not valid.";
    +
    1096  return false;
    +
    1097  }
    +
    1098  ecm_data += sizeof(uint32_t); // asset_id.
    +
    1099  EncryptionKey encryption_key;
    +
    1100  if (!GetAssetKey(asset_id, &encryption_key)) {
    +
    1101  return false;
    +
    1102  }
    +
    1103  if (encryption_key.key.size() < kAssetKeySizeBytes) {
    +
    1104  LOG(ERROR) << "Asset Key size of " << encryption_key.key.size()
    +
    1105  << " for AssetID = " << asset_id
    +
    1106  << " is less than minimum asset key size.";
    +
    1107  return false;
    +
    1108  }
    +
    1109  // Legacy WVM content may have asset keys > 16 bytes.
    +
    1110  // Use only the first 16 bytes of the asset key to get
    +
    1111  // the content key.
    +
    1112  std::vector<uint8_t> asset_key(
    +
    1113  encryption_key.key.begin(),
    +
    1114  encryption_key.key.begin() + kAssetKeySizeBytes);
    +
    1115  std::vector<uint8_t> iv(kInitializationVectorSizeBytes);
    +
    1116  AesCbcCtsDecryptor asset_decryptor;
    +
    1117  if (!asset_decryptor.InitializeWithIv(asset_key, iv)) {
    +
    1118  LOG(ERROR) << "Failed to initialize asset_decryptor.";
    +
    1119  return false;
    +
    1120  }
    +
    1121 
    +
    1122  const size_t content_key_buffer_size =
    +
    1123  kEcmFlagsSizeBytes + kEcmContentKeySizeBytes +
    +
    1124  kEcmPaddingSizeBytes; // flags + contentKey + padding.
    +
    1125  std::vector<uint8_t> content_key_buffer(content_key_buffer_size);
    +
    1126  asset_decryptor.Decrypt(
    +
    1127  ecm_data, content_key_buffer_size, vector_as_array(&content_key_buffer));
    +
    1128 
    +
    1129  std::vector<uint8_t> decrypted_content_key_vec(
    +
    1130  content_key_buffer.begin() + 4,
    +
    1131  content_key_buffer.begin() + 20);
    +
    1132  scoped_ptr<AesCbcCtsDecryptor> content_decryptor(new AesCbcCtsDecryptor);
    +
    1133  if (!content_decryptor->InitializeWithIv(decrypted_content_key_vec, iv)) {
    +
    1134  LOG(ERROR) << "Failed to initialize content decryptor.";
    +
    1135  return false;
    +
    1136  }
    +
    1137 
    +
    1138  content_decryptor_ = content_decryptor.Pass();
    +
    1139  return true;
    +
    1140 }
    +
    1141 
    +
    1142 DemuxStreamIdMediaSample::DemuxStreamIdMediaSample() :
    +
    1143  demux_stream_id(0),
    +
    1144  parsed_audio_or_video_stream_id(0) {}
    +
    1145 
    +
    1146 DemuxStreamIdMediaSample::~DemuxStreamIdMediaSample() {}
    +
    1147 
    +
    1148 PrevSampleData::PrevSampleData() {
    +
    1149  Reset();
    +
    1150 }
    +
    1151 
    +
    1152 PrevSampleData::~PrevSampleData() {}
    +
    1153 
    +
    1154 void PrevSampleData::Reset() {
    +
    1155  audio_sample = NULL;
    +
    1156  video_sample = NULL;
    +
    1157  audio_stream_id = 0;
    +
    1158  video_stream_id = 0;
    +
    1159  audio_sample_duration = 0;
    +
    1160  video_sample_duration = 0;
    +
    1161 }
    +
    1162 
    +
    1163 } // namespace wvm
    +
    1164 } // namespace media
    +
    1165 } // namespace edash_packager
    static size_t GetAdtsFrameSize(const uint8_t *data, size_t num_bytes)
    Definition: adts_header.cc:23
    KeySource is responsible for encryption key acquisition.
    Definition: key_source.h:29
    static scoped_refptr< MediaSample > CreateEmptyMediaSample()
    Create a MediaSample object with default members.
    Definition: media_sample.cc:74
    -
    static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
    +
    static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
    diff --git a/docs/dd/d36/classedash__packager_1_1media_1_1MediaSample-members.html b/docs/dd/d36/classedash__packager_1_1media_1_1MediaSample-members.html index 5647b1e03f..51aa92cb47 100644 --- a/docs/dd/d36/classedash__packager_1_1media_1_1MediaSample-members.html +++ b/docs/dd/d36/classedash__packager_1_1media_1_1MediaSample-members.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d3b/mp4_2segmenter_8h_source.html b/docs/dd/d3b/mp4_2segmenter_8h_source.html index 5149224082..151f0014d8 100644 --- a/docs/dd/d3b/mp4_2segmenter_8h_source.html +++ b/docs/dd/d3b/mp4_2segmenter_8h_source.html @@ -223,7 +223,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d41/structedash__packager_1_1media_1_1H264NALU.html b/docs/dd/d41/structedash__packager_1_1media_1_1H264NALU.html index 06f7aedd43..59a8494e8c 100644 --- a/docs/dd/d41/structedash__packager_1_1media_1_1H264NALU.html +++ b/docs/dd/d41/structedash__packager_1_1media_1_1H264NALU.html @@ -139,7 +139,7 @@ int nal_unit_type diff --git a/docs/dd/d44/structedash__packager_1_1media_1_1mp4_1_1SegmentReference-members.html b/docs/dd/d44/structedash__packager_1_1media_1_1mp4_1_1SegmentReference-members.html index 606773c97e..70063d7822 100644 --- a/docs/dd/d44/structedash__packager_1_1media_1_1mp4_1_1SegmentReference-members.html +++ b/docs/dd/d44/structedash__packager_1_1media_1_1mp4_1_1SegmentReference-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d46/webm__parser_8h_source.html b/docs/dd/d46/webm__parser_8h_source.html index fc8bb99a14..1ccedbafc1 100644 --- a/docs/dd/d46/webm__parser_8h_source.html +++ b/docs/dd/d46/webm__parser_8h_source.html @@ -227,7 +227,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d47/classedash__packager_1_1media_1_1WebMInfoParser.html b/docs/dd/d47/classedash__packager_1_1media_1_1WebMInfoParser.html index af48998912..e55b8a68f2 100644 --- a/docs/dd/d47/classedash__packager_1_1media_1_1WebMInfoParser.html +++ b/docs/dd/d47/classedash__packager_1_1media_1_1WebMInfoParser.html @@ -175,7 +175,7 @@ The number of bytes parsed on success. diff --git a/docs/dd/d4c/structedash__packager_1_1media_1_1mp4_1_1FullBox-members.html b/docs/dd/d4c/structedash__packager_1_1media_1_1mp4_1_1FullBox-members.html index 0291b874c8..d21b59c7ac 100644 --- a/docs/dd/d4c/structedash__packager_1_1media_1_1mp4_1_1FullBox-members.html +++ b/docs/dd/d4c/structedash__packager_1_1media_1_1mp4_1_1FullBox-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html b/docs/dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html index d6efc526ae..416f3d9a1e 100644 --- a/docs/dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html +++ b/docs/dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html @@ -589,7 +589,7 @@ bool ReadWriteInt64 (i diff --git a/docs/dd/d54/widevine__encryption__flags_8h_source.html b/docs/dd/d54/widevine__encryption__flags_8h_source.html index f96d3f7679..9d2804bf84 100644 --- a/docs/dd/d54/widevine__encryption__flags_8h_source.html +++ b/docs/dd/d54/widevine__encryption__flags_8h_source.html @@ -123,7 +123,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d5e/structedash__packager_1_1media_1_1mp4_1_1CuePayloadBox-members.html b/docs/dd/d5e/structedash__packager_1_1media_1_1mp4_1_1CuePayloadBox-members.html index a333a3059d..12522154b4 100644 --- a/docs/dd/d5e/structedash__packager_1_1media_1_1mp4_1_1CuePayloadBox-members.html +++ b/docs/dd/d5e/structedash__packager_1_1media_1_1mp4_1_1CuePayloadBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d60/structedash__packager_1_1media_1_1mp4_1_1VTTEmptyCueBox-members.html b/docs/dd/d60/structedash__packager_1_1media_1_1mp4_1_1VTTEmptyCueBox-members.html index 1049ddb011..23b5c6f97b 100644 --- a/docs/dd/d60/structedash__packager_1_1media_1_1mp4_1_1VTTEmptyCueBox-members.html +++ b/docs/dd/d60/structedash__packager_1_1media_1_1mp4_1_1VTTEmptyCueBox-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d65/vp8__parser_8h_source.html b/docs/dd/d65/vp8__parser_8h_source.html index 7426fb14a6..9dd019b796 100644 --- a/docs/dd/d65/vp8__parser_8h_source.html +++ b/docs/dd/d65/vp8__parser_8h_source.html @@ -136,7 +136,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d67/h264__byte__to__unit__stream__converter_8cc_source.html b/docs/dd/d67/h264__byte__to__unit__stream__converter_8cc_source.html index 9fa312d49e..3470bd2621 100644 --- a/docs/dd/d67/h264__byte__to__unit__stream__converter_8cc_source.html +++ b/docs/dd/d67/h264__byte__to__unit__stream__converter_8cc_source.html @@ -226,7 +226,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html b/docs/dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html index 116f1df712..ff23b26633 100644 --- a/docs/dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html +++ b/docs/dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html @@ -255,7 +255,7 @@ bool Encrypt (const st diff --git a/docs/dd/d80/media__sample_8h_source.html b/docs/dd/d80/media__sample_8h_source.html index d32abd4ff5..637998921f 100644 --- a/docs/dd/d80/media__sample_8h_source.html +++ b/docs/dd/d80/media__sample_8h_source.html @@ -256,7 +256,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d85/classedash__packager_1_1xml_1_1XmlNode.html b/docs/dd/d85/classedash__packager_1_1xml_1_1XmlNode.html index 3355e73e47..31688ee7d2 100644 --- a/docs/dd/d85/classedash__packager_1_1xml_1_1XmlNode.html +++ b/docs/dd/d85/classedash__packager_1_1xml_1_1XmlNode.html @@ -419,7 +419,7 @@ bool  diff --git a/docs/dd/d85/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html b/docs/dd/d85/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html index c200dd2278..09072bf104 100644 --- a/docs/dd/d85/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html +++ b/docs/dd/d85/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html @@ -133,7 +133,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d87/memory__file_8cc_source.html b/docs/dd/d87/memory__file_8cc_source.html index af9a6292a0..91e532be8a 100644 --- a/docs/dd/d87/memory__file_8cc_source.html +++ b/docs/dd/d87/memory__file_8cc_source.html @@ -224,7 +224,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d8e/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter-members.html b/docs/dd/d8e/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter-members.html index 955a31293a..6454e2b73e 100644 --- a/docs/dd/d8e/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter-members.html +++ b/docs/dd/d8e/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter-members.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html b/docs/dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html index 8cad4989f4..d7d63fce52 100644 --- a/docs/dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html +++ b/docs/dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html @@ -252,7 +252,7 @@ const std::vector< uint8_t > &  diff --git a/docs/dd/d98/classedash__packager_1_1media_1_1LocalFile.html b/docs/dd/d98/classedash__packager_1_1media_1_1LocalFile.html index 6d3848e926..7ce6f1fc71 100644 --- a/docs/dd/d98/classedash__packager_1_1media_1_1LocalFile.html +++ b/docs/dd/d98/classedash__packager_1_1media_1_1LocalFile.html @@ -502,7 +502,7 @@ bool  diff --git a/docs/dd/d99/classedash__packager_1_1media_1_1WebMMediaParser.html b/docs/dd/d99/classedash__packager_1_1media_1_1WebMMediaParser.html index 87ca09e6a5..4570d76303 100644 --- a/docs/dd/d99/classedash__packager_1_1media_1_1WebMMediaParser.html +++ b/docs/dd/d99/classedash__packager_1_1media_1_1WebMMediaParser.html @@ -205,7 +205,7 @@ track_id, const scoped_refptr
    diff --git a/docs/dd/d9a/audio__timestamp__helper_8h_source.html b/docs/dd/d9a/audio__timestamp__helper_8h_source.html index 7be6486522..a978197e95 100644 --- a/docs/dd/d9a/audio__timestamp__helper_8h_source.html +++ b/docs/dd/d9a/audio__timestamp__helper_8h_source.html @@ -167,7 +167,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html b/docs/dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html index 909cfe4793..fca82ab4ab 100644 --- a/docs/dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html +++ b/docs/dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html @@ -143,7 +143,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 633 of file box_definitions.h.

    +

    Definition at line 637 of file box_definitions.h.

    Member Function Documentation

    @@ -169,7 +169,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 2085 of file box_definitions.cc.

    +

    Definition at line 2113 of file box_definitions.cc.

    @@ -180,7 +180,7 @@ Additional Inherited Members diff --git a/docs/dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html b/docs/dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html index fe7b854ecb..de376ee360 100644 --- a/docs/dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html +++ b/docs/dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html @@ -166,7 +166,7 @@ std::vector< FourCC > <

    Reimplemented from edash_packager::media::mp4::FileType.

    -

    Definition at line 101 of file box_definitions.cc.

    +

    Definition at line 117 of file box_definitions.cc.

    @@ -177,7 +177,7 @@ std::vector< FourCC > < diff --git a/docs/dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html b/docs/dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html index 9e5fd1f2a0..733678d840 100644 --- a/docs/dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html +++ b/docs/dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/dd/daa/vod__media__info__dump__muxer__listener_8h_source.html b/docs/dd/daa/vod__media__info__dump__muxer__listener_8h_source.html index ef89ba2e30..1359f30c00 100644 --- a/docs/dd/daa/vod__media__info__dump__muxer__listener_8h_source.html +++ b/docs/dd/daa/vod__media__info__dump__muxer__listener_8h_source.html @@ -178,7 +178,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dab/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry.html b/docs/dd/dab/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry.html index 7bce8363dc..508c4ed1b8 100644 --- a/docs/dd/dab/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry.html +++ b/docs/dd/dab/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry.html @@ -113,14 +113,14 @@ uint32_t group_description

    Detailed Description

    -

    Definition at line 585 of file box_definitions.h.

    +

    Definition at line 589 of file box_definitions.h.


    The documentation for this struct was generated from the following file: diff --git a/docs/dd/dab/webm__muxer_8h_source.html b/docs/dd/dab/webm__muxer_8h_source.html index 31ce4cf149..3be412fdc7 100644 --- a/docs/dd/dab/webm__muxer_8h_source.html +++ b/docs/dd/dab/webm__muxer_8h_source.html @@ -138,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dad/classedash__packager_1_1media_1_1WebMParserClient-members.html b/docs/dd/dad/classedash__packager_1_1media_1_1WebMParserClient-members.html index 72104ecb18..54c515c180 100644 --- a/docs/dd/dad/classedash__packager_1_1media_1_1WebMParserClient-members.html +++ b/docs/dd/dad/classedash__packager_1_1media_1_1WebMParserClient-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dbc/buffer__reader_8cc_source.html b/docs/dd/dbc/buffer__reader_8cc_source.html index 290b782ba0..fea9ee93de 100644 --- a/docs/dd/dbc/buffer__reader_8cc_source.html +++ b/docs/dd/dbc/buffer__reader_8cc_source.html @@ -196,7 +196,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dbd/classedash__packager_1_1media_1_1AesCtrEncryptor-members.html b/docs/dd/dbd/classedash__packager_1_1media_1_1AesCtrEncryptor-members.html index 91a7b8b8ae..c80892fb38 100644 --- a/docs/dd/dbd/classedash__packager_1_1media_1_1AesCtrEncryptor-members.html +++ b/docs/dd/dbd/classedash__packager_1_1media_1_1AesCtrEncryptor-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html b/docs/dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html index d9e2f79068..70ff580aff 100644 --- a/docs/dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html +++ b/docs/dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html @@ -148,7 +148,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 463 of file box_definitions.h.

    +

    Definition at line 467 of file box_definitions.h.

    Member Function Documentation

    @@ -174,7 +174,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 1505 of file box_definitions.cc.

    +

    Definition at line 1533 of file box_definitions.cc.

    @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/dd/dbf/classedash__packager_1_1MpdNotifier-members.html b/docs/dd/dbf/classedash__packager_1_1MpdNotifier-members.html index 2977dc2612..e979afac52 100644 --- a/docs/dd/dbf/classedash__packager_1_1MpdNotifier-members.html +++ b/docs/dd/dbf/classedash__packager_1_1MpdNotifier-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dbf/webm__webvtt__parser_8h_source.html b/docs/dd/dbf/webm__webvtt__parser_8h_source.html index ae80c2f512..48c6f6ecc6 100644 --- a/docs/dd/dbf/webm__webvtt__parser_8h_source.html +++ b/docs/dd/dbf/webm__webvtt__parser_8h_source.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html b/docs/dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html index 4be0648ce0..38e6808272 100644 --- a/docs/dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html +++ b/docs/dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html @@ -168,7 +168,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 408 of file box_definitions.cc.

    +

    Definition at line 424 of file box_definitions.cc.

    @@ -179,7 +179,7 @@ Additional Inherited Members diff --git a/docs/dd/dcb/classedash__packager_1_1MpdNotifierFactory.html b/docs/dd/dcb/classedash__packager_1_1MpdNotifierFactory.html index 138690ee19..ed6615bf9e 100644 --- a/docs/dd/dcb/classedash__packager_1_1MpdNotifierFactory.html +++ b/docs/dd/dcb/classedash__packager_1_1MpdNotifierFactory.html @@ -112,7 +112,7 @@ virtual scoped_ptr< diff --git a/docs/dd/dcf/structedash__packager_1_1media_1_1H264PPS.html b/docs/dd/dcf/structedash__packager_1_1media_1_1H264PPS.html index 814b8f9876..f82d79aeb4 100644 --- a/docs/dd/dcf/structedash__packager_1_1media_1_1H264PPS.html +++ b/docs/dd/dcf/structedash__packager_1_1media_1_1H264PPS.html @@ -167,7 +167,7 @@ int second_chroma_qp_index diff --git a/docs/dd/dd2/buffer__writer_8h_source.html b/docs/dd/dd2/buffer__writer_8h_source.html index 98c6764e40..f546b3dad0 100644 --- a/docs/dd/dd2/buffer__writer_8h_source.html +++ b/docs/dd/dd2/buffer__writer_8h_source.html @@ -159,7 +159,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dd3/buffer__writer_8cc_source.html b/docs/dd/dd3/buffer__writer_8cc_source.html index 234350d6c7..f745aaa4ac 100644 --- a/docs/dd/dd3/buffer__writer_8cc_source.html +++ b/docs/dd/dd3/buffer__writer_8cc_source.html @@ -186,7 +186,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dd7/classedash__packager_1_1media_1_1OpusPacket-members.html b/docs/dd/dd7/classedash__packager_1_1media_1_1OpusPacket-members.html index d39316355e..d3e354fd7b 100644 --- a/docs/dd/dd7/classedash__packager_1_1media_1_1OpusPacket-members.html +++ b/docs/dd/dd7/classedash__packager_1_1media_1_1OpusPacket-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/de7/xml__node_8h_source.html b/docs/dd/de7/xml__node_8h_source.html index be82ea25e3..20e155c039 100644 --- a/docs/dd/de7/xml__node_8h_source.html +++ b/docs/dd/de7/xml__node_8h_source.html @@ -227,7 +227,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dec/structedash__packager_1_1media_1_1OnMediaEndParameters-members.html b/docs/dd/dec/structedash__packager_1_1media_1_1OnMediaEndParameters-members.html index f4ac9918e2..286e5011ea 100644 --- a/docs/dd/dec/structedash__packager_1_1media_1_1OnMediaEndParameters-members.html +++ b/docs/dd/dec/structedash__packager_1_1media_1_1OnMediaEndParameters-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dee/box__definitions_8cc_source.html b/docs/dd/dee/box__definitions_8cc_source.html index fc5fa9fd11..ee31185bd9 100644 --- a/docs/dd/dee/box__definitions_8cc_source.html +++ b/docs/dd/dee/box__definitions_8cc_source.html @@ -136,2397 +136,2425 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    47  return iv_size == 8 || iv_size == 16;
    48 }
    49 
    -
    50 // Utility functions to check if the 64bit integers can fit in 32bit integer.
    -
    51 bool IsFitIn32Bits(uint64_t a) {
    -
    52  return a <= std::numeric_limits<uint32_t>::max();
    -
    53 }
    -
    54 
    -
    55 bool IsFitIn32Bits(int64_t a) {
    -
    56  return a <= std::numeric_limits<int32_t>::max() &&
    -
    57  a >= std::numeric_limits<int32_t>::min();
    -
    58 }
    -
    59 
    -
    60 template <typename T1, typename T2>
    -
    61 bool IsFitIn32Bits(T1 a1, T2 a2) {
    -
    62  return IsFitIn32Bits(a1) && IsFitIn32Bits(a2);
    -
    63 }
    -
    64 
    -
    65 template <typename T1, typename T2, typename T3>
    -
    66 bool IsFitIn32Bits(T1 a1, T2 a2, T3 a3) {
    -
    67  return IsFitIn32Bits(a1) && IsFitIn32Bits(a2) && IsFitIn32Bits(a3);
    -
    68 }
    -
    69 
    -
    70 } // namespace
    -
    71 
    -
    72 namespace edash_packager {
    -
    73 namespace media {
    -
    74 namespace mp4 {
    +
    50 // Default values to construct the following fields in ddts box. Values are set
    +
    51 // according to FFMPEG.
    +
    52 // bit(2) FrameDuration; // 3 = 4096
    +
    53 // bit(5) StreamConstruction; // 18
    +
    54 // bit(1) CoreLFEPresent; // 0 = none
    +
    55 // bit(6) CoreLayout; // 31 = ignore core layout
    +
    56 // bit(14) CoreSize; // 0
    +
    57 // bit(1) StereoDownmix // 0 = none
    +
    58 // bit(3) RepresentationType; // 4
    +
    59 // bit(16) ChannelLayout; // 0xf = 5.1 channel layout.
    +
    60 // bit(1) MultiAssetFlag // 0 = single asset
    +
    61 // bit(1) LBRDurationMod // 0 = ignore
    +
    62 // bit(1) ReservedBoxPresent // 0 = none
    +
    63 // bit(5) Reserved // 0
    +
    64 const uint8_t kDdtsExtraData[] = {0xe4, 0x7c, 0, 4, 0, 0x0f, 0};
    +
    65 
    +
    66 // Utility functions to check if the 64bit integers can fit in 32bit integer.
    +
    67 bool IsFitIn32Bits(uint64_t a) {
    +
    68  return a <= std::numeric_limits<uint32_t>::max();
    +
    69 }
    +
    70 
    +
    71 bool IsFitIn32Bits(int64_t a) {
    +
    72  return a <= std::numeric_limits<int32_t>::max() &&
    +
    73  a >= std::numeric_limits<int32_t>::min();
    +
    74 }
    75 
    -
    76 FileType::FileType() : major_brand(FOURCC_NULL), minor_version(0) {}
    -
    77 FileType::~FileType() {}
    -
    78 FourCC FileType::BoxType() const { return FOURCC_FTYP; }
    -
    79 
    -
    80 bool FileType::ReadWriteInternal(BoxBuffer* buffer) {
    -
    81  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    82  buffer->ReadWriteFourCC(&major_brand) &&
    -
    83  buffer->ReadWriteUInt32(&minor_version));
    -
    84  size_t num_brands;
    -
    85  if (buffer->Reading()) {
    -
    86  num_brands = (buffer->Size() - buffer->Pos()) / sizeof(FourCC);
    -
    87  compatible_brands.resize(num_brands);
    -
    88  } else {
    -
    89  num_brands = compatible_brands.size();
    -
    90  }
    -
    91  for (size_t i = 0; i < num_brands; ++i)
    -
    92  RCHECK(buffer->ReadWriteFourCC(&compatible_brands[i]));
    -
    93  return true;
    -
    94 }
    +
    76 template <typename T1, typename T2>
    +
    77 bool IsFitIn32Bits(T1 a1, T2 a2) {
    +
    78  return IsFitIn32Bits(a1) && IsFitIn32Bits(a2);
    +
    79 }
    +
    80 
    +
    81 template <typename T1, typename T2, typename T3>
    +
    82 bool IsFitIn32Bits(T1 a1, T2 a2, T3 a3) {
    +
    83  return IsFitIn32Bits(a1) && IsFitIn32Bits(a2) && IsFitIn32Bits(a3);
    +
    84 }
    +
    85 
    +
    86 } // namespace
    +
    87 
    +
    88 namespace edash_packager {
    +
    89 namespace media {
    +
    90 namespace mp4 {
    +
    91 
    +
    92 FileType::FileType() : major_brand(FOURCC_NULL), minor_version(0) {}
    +
    93 FileType::~FileType() {}
    +
    94 FourCC FileType::BoxType() const { return FOURCC_FTYP; }
    95 
    -
    96 uint32_t FileType::ComputeSizeInternal() {
    -
    97  return HeaderSize() + kFourCCSize + sizeof(minor_version) +
    -
    98  kFourCCSize * compatible_brands.size();
    -
    99 }
    -
    100 
    -
    101 FourCC SegmentType::BoxType() const { return FOURCC_STYP; }
    -
    102 
    -
    103 ProtectionSystemSpecificHeader::ProtectionSystemSpecificHeader() {}
    -
    104 ProtectionSystemSpecificHeader::~ProtectionSystemSpecificHeader() {}
    -
    105 FourCC ProtectionSystemSpecificHeader::BoxType() const { return FOURCC_PSSH; }
    -
    106 
    -
    107 bool ProtectionSystemSpecificHeader::ReadWriteInternal(BoxBuffer* buffer) {
    -
    108  if (!buffer->Reading() && !raw_box.empty()) {
    -
    109  // Write the raw box directly.
    -
    110  buffer->writer()->AppendVector(raw_box);
    -
    111  return true;
    -
    112  }
    -
    113 
    -
    114  uint32_t size = data.size();
    -
    115  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    116  buffer->ReadWriteVector(&system_id, 16) &&
    -
    117  buffer->ReadWriteUInt32(&size) &&
    -
    118  buffer->ReadWriteVector(&data, size));
    -
    119 
    -
    120  if (buffer->Reading()) {
    -
    121  // Copy the entire box, including the header, for passing to EME as
    -
    122  // initData.
    -
    123  DCHECK(raw_box.empty());
    -
    124  BoxReader* reader = buffer->reader();
    -
    125  DCHECK(reader);
    -
    126  raw_box.assign(reader->data(), reader->data() + reader->size());
    -
    127  }
    -
    128  return true;
    -
    129 }
    -
    130 
    -
    131 uint32_t ProtectionSystemSpecificHeader::ComputeSizeInternal() {
    -
    132  if (!raw_box.empty()) {
    -
    133  return raw_box.size();
    -
    134  } else {
    -
    135  return HeaderSize() + system_id.size() + sizeof(uint32_t) + data.size();
    -
    136  }
    -
    137 }
    -
    138 
    -
    139 SampleAuxiliaryInformationOffset::SampleAuxiliaryInformationOffset() {}
    -
    140 SampleAuxiliaryInformationOffset::~SampleAuxiliaryInformationOffset() {}
    -
    141 FourCC SampleAuxiliaryInformationOffset::BoxType() const { return FOURCC_SAIO; }
    -
    142 
    -
    143 bool SampleAuxiliaryInformationOffset::ReadWriteInternal(BoxBuffer* buffer) {
    -
    144  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    145  if (flags & 1)
    -
    146  RCHECK(buffer->IgnoreBytes(8)); // aux_info_type and parameter.
    -
    147 
    -
    148  uint32_t count = offsets.size();
    -
    149  RCHECK(buffer->ReadWriteUInt32(&count));
    -
    150  offsets.resize(count);
    -
    151 
    -
    152  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    -
    153  for (uint32_t i = 0; i < count; ++i)
    -
    154  RCHECK(buffer->ReadWriteUInt64NBytes(&offsets[i], num_bytes));
    -
    155  return true;
    -
    156 }
    -
    157 
    -
    158 uint32_t SampleAuxiliaryInformationOffset::ComputeSizeInternal() {
    -
    159  // This box is optional. Skip it if it is empty.
    -
    160  if (offsets.size() == 0)
    -
    161  return 0;
    -
    162  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    -
    163  return HeaderSize() + sizeof(uint32_t) + num_bytes * offsets.size();
    -
    164 }
    -
    165 
    -
    166 SampleAuxiliaryInformationSize::SampleAuxiliaryInformationSize()
    -
    167  : default_sample_info_size(0), sample_count(0) {}
    -
    168 SampleAuxiliaryInformationSize::~SampleAuxiliaryInformationSize() {}
    -
    169 FourCC SampleAuxiliaryInformationSize::BoxType() const { return FOURCC_SAIZ; }
    -
    170 
    -
    171 bool SampleAuxiliaryInformationSize::ReadWriteInternal(BoxBuffer* buffer) {
    -
    172  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    173  if (flags & 1)
    -
    174  RCHECK(buffer->IgnoreBytes(8));
    -
    175 
    -
    176  RCHECK(buffer->ReadWriteUInt8(&default_sample_info_size) &&
    -
    177  buffer->ReadWriteUInt32(&sample_count));
    -
    178  if (default_sample_info_size == 0)
    -
    179  RCHECK(buffer->ReadWriteVector(&sample_info_sizes, sample_count));
    -
    180  return true;
    -
    181 }
    -
    182 
    -
    183 uint32_t SampleAuxiliaryInformationSize::ComputeSizeInternal() {
    -
    184  // This box is optional. Skip it if it is empty.
    -
    185  if (sample_count == 0)
    -
    186  return 0;
    -
    187  return HeaderSize() + sizeof(default_sample_info_size) +
    -
    188  sizeof(sample_count) +
    -
    189  (default_sample_info_size == 0 ? sample_info_sizes.size() : 0);
    -
    190 }
    +
    96 bool FileType::ReadWriteInternal(BoxBuffer* buffer) {
    +
    97  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    98  buffer->ReadWriteFourCC(&major_brand) &&
    +
    99  buffer->ReadWriteUInt32(&minor_version));
    +
    100  size_t num_brands;
    +
    101  if (buffer->Reading()) {
    +
    102  num_brands = (buffer->Size() - buffer->Pos()) / sizeof(FourCC);
    +
    103  compatible_brands.resize(num_brands);
    +
    104  } else {
    +
    105  num_brands = compatible_brands.size();
    +
    106  }
    +
    107  for (size_t i = 0; i < num_brands; ++i)
    +
    108  RCHECK(buffer->ReadWriteFourCC(&compatible_brands[i]));
    +
    109  return true;
    +
    110 }
    +
    111 
    +
    112 uint32_t FileType::ComputeSizeInternal() {
    +
    113  return HeaderSize() + kFourCCSize + sizeof(minor_version) +
    +
    114  kFourCCSize * compatible_brands.size();
    +
    115 }
    +
    116 
    +
    117 FourCC SegmentType::BoxType() const { return FOURCC_STYP; }
    +
    118 
    +
    119 ProtectionSystemSpecificHeader::ProtectionSystemSpecificHeader() {}
    +
    120 ProtectionSystemSpecificHeader::~ProtectionSystemSpecificHeader() {}
    +
    121 FourCC ProtectionSystemSpecificHeader::BoxType() const { return FOURCC_PSSH; }
    +
    122 
    +
    123 bool ProtectionSystemSpecificHeader::ReadWriteInternal(BoxBuffer* buffer) {
    +
    124  if (!buffer->Reading() && !raw_box.empty()) {
    +
    125  // Write the raw box directly.
    +
    126  buffer->writer()->AppendVector(raw_box);
    +
    127  return true;
    +
    128  }
    +
    129 
    +
    130  uint32_t size = data.size();
    +
    131  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    132  buffer->ReadWriteVector(&system_id, 16) &&
    +
    133  buffer->ReadWriteUInt32(&size) &&
    +
    134  buffer->ReadWriteVector(&data, size));
    +
    135 
    +
    136  if (buffer->Reading()) {
    +
    137  // Copy the entire box, including the header, for passing to EME as
    +
    138  // initData.
    +
    139  DCHECK(raw_box.empty());
    +
    140  BoxReader* reader = buffer->reader();
    +
    141  DCHECK(reader);
    +
    142  raw_box.assign(reader->data(), reader->data() + reader->size());
    +
    143  }
    +
    144  return true;
    +
    145 }
    +
    146 
    +
    147 uint32_t ProtectionSystemSpecificHeader::ComputeSizeInternal() {
    +
    148  if (!raw_box.empty()) {
    +
    149  return raw_box.size();
    +
    150  } else {
    +
    151  return HeaderSize() + system_id.size() + sizeof(uint32_t) + data.size();
    +
    152  }
    +
    153 }
    +
    154 
    +
    155 SampleAuxiliaryInformationOffset::SampleAuxiliaryInformationOffset() {}
    +
    156 SampleAuxiliaryInformationOffset::~SampleAuxiliaryInformationOffset() {}
    +
    157 FourCC SampleAuxiliaryInformationOffset::BoxType() const { return FOURCC_SAIO; }
    +
    158 
    +
    159 bool SampleAuxiliaryInformationOffset::ReadWriteInternal(BoxBuffer* buffer) {
    +
    160  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    161  if (flags & 1)
    +
    162  RCHECK(buffer->IgnoreBytes(8)); // aux_info_type and parameter.
    +
    163 
    +
    164  uint32_t count = offsets.size();
    +
    165  RCHECK(buffer->ReadWriteUInt32(&count));
    +
    166  offsets.resize(count);
    +
    167 
    +
    168  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    +
    169  for (uint32_t i = 0; i < count; ++i)
    +
    170  RCHECK(buffer->ReadWriteUInt64NBytes(&offsets[i], num_bytes));
    +
    171  return true;
    +
    172 }
    +
    173 
    +
    174 uint32_t SampleAuxiliaryInformationOffset::ComputeSizeInternal() {
    +
    175  // This box is optional. Skip it if it is empty.
    +
    176  if (offsets.size() == 0)
    +
    177  return 0;
    +
    178  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    +
    179  return HeaderSize() + sizeof(uint32_t) + num_bytes * offsets.size();
    +
    180 }
    +
    181 
    +
    182 SampleAuxiliaryInformationSize::SampleAuxiliaryInformationSize()
    +
    183  : default_sample_info_size(0), sample_count(0) {}
    +
    184 SampleAuxiliaryInformationSize::~SampleAuxiliaryInformationSize() {}
    +
    185 FourCC SampleAuxiliaryInformationSize::BoxType() const { return FOURCC_SAIZ; }
    +
    186 
    +
    187 bool SampleAuxiliaryInformationSize::ReadWriteInternal(BoxBuffer* buffer) {
    +
    188  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    189  if (flags & 1)
    +
    190  RCHECK(buffer->IgnoreBytes(8));
    191 
    -
    192 SampleEncryptionEntry::SampleEncryptionEntry() {}
    -
    193 SampleEncryptionEntry::~SampleEncryptionEntry() {}
    -
    194 
    -
    195 bool SampleEncryptionEntry::ReadWrite(uint8_t iv_size,
    -
    196  bool has_subsamples,
    -
    197  BoxBuffer* buffer) {
    -
    198  DCHECK(IsIvSizeValid(iv_size));
    -
    199  DCHECK(buffer);
    -
    200 
    -
    201  RCHECK(buffer->ReadWriteVector(&initialization_vector, iv_size));
    -
    202 
    -
    203  if (!has_subsamples) {
    -
    204  subsamples.clear();
    -
    205  return true;
    -
    206  }
    +
    192  RCHECK(buffer->ReadWriteUInt8(&default_sample_info_size) &&
    +
    193  buffer->ReadWriteUInt32(&sample_count));
    +
    194  if (default_sample_info_size == 0)
    +
    195  RCHECK(buffer->ReadWriteVector(&sample_info_sizes, sample_count));
    +
    196  return true;
    +
    197 }
    +
    198 
    +
    199 uint32_t SampleAuxiliaryInformationSize::ComputeSizeInternal() {
    +
    200  // This box is optional. Skip it if it is empty.
    +
    201  if (sample_count == 0)
    +
    202  return 0;
    +
    203  return HeaderSize() + sizeof(default_sample_info_size) +
    +
    204  sizeof(sample_count) +
    +
    205  (default_sample_info_size == 0 ? sample_info_sizes.size() : 0);
    +
    206 }
    207 
    -
    208  uint16_t subsample_count = subsamples.size();
    -
    209  RCHECK(buffer->ReadWriteUInt16(&subsample_count));
    -
    210  RCHECK(subsample_count > 0);
    -
    211  subsamples.resize(subsample_count);
    -
    212  for (auto& subsample : subsamples) {
    -
    213  RCHECK(buffer->ReadWriteUInt16(&subsample.clear_bytes) &&
    -
    214  buffer->ReadWriteUInt32(&subsample.cipher_bytes));
    -
    215  }
    -
    216  return true;
    -
    217 }
    +
    208 SampleEncryptionEntry::SampleEncryptionEntry() {}
    +
    209 SampleEncryptionEntry::~SampleEncryptionEntry() {}
    +
    210 
    +
    211 bool SampleEncryptionEntry::ReadWrite(uint8_t iv_size,
    +
    212  bool has_subsamples,
    +
    213  BoxBuffer* buffer) {
    +
    214  DCHECK(IsIvSizeValid(iv_size));
    +
    215  DCHECK(buffer);
    +
    216 
    +
    217  RCHECK(buffer->ReadWriteVector(&initialization_vector, iv_size));
    218 
    - -
    220  bool has_subsamples,
    -
    221  BufferReader* reader) {
    -
    222  DCHECK(IsIvSizeValid(iv_size));
    -
    223  DCHECK(reader);
    -
    224 
    -
    225  initialization_vector.resize(iv_size);
    -
    226  RCHECK(reader->ReadToVector(&initialization_vector, iv_size));
    -
    227 
    -
    228  if (!has_subsamples) {
    -
    229  subsamples.clear();
    -
    230  return true;
    +
    219  if (!has_subsamples) {
    +
    220  subsamples.clear();
    +
    221  return true;
    +
    222  }
    +
    223 
    +
    224  uint16_t subsample_count = subsamples.size();
    +
    225  RCHECK(buffer->ReadWriteUInt16(&subsample_count));
    +
    226  RCHECK(subsample_count > 0);
    +
    227  subsamples.resize(subsample_count);
    +
    228  for (auto& subsample : subsamples) {
    +
    229  RCHECK(buffer->ReadWriteUInt16(&subsample.clear_bytes) &&
    +
    230  buffer->ReadWriteUInt32(&subsample.cipher_bytes));
    231  }
    -
    232 
    -
    233  uint16_t subsample_count;
    -
    234  RCHECK(reader->Read2(&subsample_count));
    -
    235  RCHECK(subsample_count > 0);
    -
    236  subsamples.resize(subsample_count);
    -
    237  for (auto& subsample : subsamples) {
    -
    238  RCHECK(reader->Read2(&subsample.clear_bytes) &&
    -
    239  reader->Read4(&subsample.cipher_bytes));
    -
    240  }
    -
    241  return true;
    -
    242 }
    +
    232  return true;
    +
    233 }
    +
    234 
    + +
    236  bool has_subsamples,
    +
    237  BufferReader* reader) {
    +
    238  DCHECK(IsIvSizeValid(iv_size));
    +
    239  DCHECK(reader);
    +
    240 
    +
    241  initialization_vector.resize(iv_size);
    +
    242  RCHECK(reader->ReadToVector(&initialization_vector, iv_size));
    243 
    - -
    245  const uint32_t subsample_entry_size = sizeof(uint16_t) + sizeof(uint32_t);
    -
    246  const uint16_t subsample_count = subsamples.size();
    -
    247  return initialization_vector.size() +
    -
    248  (subsample_count > 0 ? (sizeof(subsample_count) +
    -
    249  subsample_entry_size * subsample_count)
    -
    250  : 0);
    -
    251 }
    -
    252 
    - -
    254  uint32_t size = 0;
    -
    255  for (uint32_t i = 0; i < subsamples.size(); ++i)
    -
    256  size += subsamples[i].clear_bytes + subsamples[i].cipher_bytes;
    -
    257  return size;
    +
    244  if (!has_subsamples) {
    +
    245  subsamples.clear();
    +
    246  return true;
    +
    247  }
    +
    248 
    +
    249  uint16_t subsample_count;
    +
    250  RCHECK(reader->Read2(&subsample_count));
    +
    251  RCHECK(subsample_count > 0);
    +
    252  subsamples.resize(subsample_count);
    +
    253  for (auto& subsample : subsamples) {
    +
    254  RCHECK(reader->Read2(&subsample.clear_bytes) &&
    +
    255  reader->Read4(&subsample.cipher_bytes));
    +
    256  }
    +
    257  return true;
    258 }
    259 
    -
    260 SampleEncryption::SampleEncryption() : iv_size(0) {}
    -
    261 SampleEncryption::~SampleEncryption() {}
    -
    262 FourCC SampleEncryption::BoxType() const { return FOURCC_SENC; }
    -
    263 
    -
    264 bool SampleEncryption::ReadWriteInternal(BoxBuffer* buffer) {
    -
    265  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    266 
    -
    267  // If we don't know |iv_size|, store sample encryption data to parse later
    -
    268  // after we know iv_size.
    -
    269  if (buffer->Reading() && iv_size == 0) {
    -
    270  RCHECK(buffer->ReadWriteVector(&sample_encryption_data,
    -
    271  buffer->Size() - buffer->Pos()));
    -
    272  return true;
    -
    273  }
    -
    274 
    -
    275  if (!IsIvSizeValid(iv_size)) {
    -
    276  LOG(ERROR) << "IV_size can only be 8 or 16, but seeing " << iv_size;
    -
    277  return false;
    -
    278  }
    + +
    261  const uint32_t subsample_entry_size = sizeof(uint16_t) + sizeof(uint32_t);
    +
    262  const uint16_t subsample_count = subsamples.size();
    +
    263  return initialization_vector.size() +
    +
    264  (subsample_count > 0 ? (sizeof(subsample_count) +
    +
    265  subsample_entry_size * subsample_count)
    +
    266  : 0);
    +
    267 }
    +
    268 
    + +
    270  uint32_t size = 0;
    +
    271  for (uint32_t i = 0; i < subsamples.size(); ++i)
    +
    272  size += subsamples[i].clear_bytes + subsamples[i].cipher_bytes;
    +
    273  return size;
    +
    274 }
    +
    275 
    +
    276 SampleEncryption::SampleEncryption() : iv_size(0) {}
    +
    277 SampleEncryption::~SampleEncryption() {}
    +
    278 FourCC SampleEncryption::BoxType() const { return FOURCC_SENC; }
    279 
    -
    280  uint32_t sample_count = sample_encryption_entries.size();
    -
    281  RCHECK(buffer->ReadWriteUInt32(&sample_count));
    +
    280 bool SampleEncryption::ReadWriteInternal(BoxBuffer* buffer) {
    +
    281  RCHECK(ReadWriteHeaderInternal(buffer));
    282 
    -
    283  sample_encryption_entries.resize(sample_count);
    -
    284  for (auto& sample_encryption_entry : sample_encryption_entries) {
    -
    285  RCHECK(sample_encryption_entry.ReadWrite(
    -
    286  iv_size, flags & kUseSubsampleEncryption, buffer));
    -
    287  }
    -
    288  return true;
    -
    289 }
    +
    283  // If we don't know |iv_size|, store sample encryption data to parse later
    +
    284  // after we know iv_size.
    +
    285  if (buffer->Reading() && iv_size == 0) {
    +
    286  RCHECK(buffer->ReadWriteVector(&sample_encryption_data,
    +
    287  buffer->Size() - buffer->Pos()));
    +
    288  return true;
    +
    289  }
    290 
    -
    291 uint32_t SampleEncryption::ComputeSizeInternal() {
    -
    292  const uint32_t sample_count = sample_encryption_entries.size();
    -
    293  if (sample_count == 0) {
    -
    294  // Sample encryption box is optional. Skip it if it is empty.
    -
    295  return 0;
    -
    296  }
    -
    297 
    -
    298  DCHECK(IsIvSizeValid(iv_size));
    -
    299  uint32_t box_size = HeaderSize() + sizeof(sample_count);
    -
    300  if (flags & kUseSubsampleEncryption) {
    -
    301  for (const SampleEncryptionEntry& sample_encryption_entry :
    -
    302  sample_encryption_entries) {
    -
    303  box_size += sample_encryption_entry.ComputeSize();
    -
    304  }
    -
    305  } else {
    -
    306  box_size += sample_count * iv_size;
    -
    307  }
    -
    308  return box_size;
    -
    309 }
    -
    310 
    - -
    312  size_t iv_size,
    -
    313  std::vector<SampleEncryptionEntry>* sample_encryption_entries) const {
    +
    291  if (!IsIvSizeValid(iv_size)) {
    +
    292  LOG(ERROR) << "IV_size can only be 8 or 16, but seeing " << iv_size;
    +
    293  return false;
    +
    294  }
    +
    295 
    +
    296  uint32_t sample_count = sample_encryption_entries.size();
    +
    297  RCHECK(buffer->ReadWriteUInt32(&sample_count));
    +
    298 
    +
    299  sample_encryption_entries.resize(sample_count);
    +
    300  for (auto& sample_encryption_entry : sample_encryption_entries) {
    +
    301  RCHECK(sample_encryption_entry.ReadWrite(
    +
    302  iv_size, flags & kUseSubsampleEncryption, buffer));
    +
    303  }
    +
    304  return true;
    +
    305 }
    +
    306 
    +
    307 uint32_t SampleEncryption::ComputeSizeInternal() {
    +
    308  const uint32_t sample_count = sample_encryption_entries.size();
    +
    309  if (sample_count == 0) {
    +
    310  // Sample encryption box is optional. Skip it if it is empty.
    +
    311  return 0;
    +
    312  }
    +
    313 
    314  DCHECK(IsIvSizeValid(iv_size));
    -
    315 
    -
    316  BufferReader reader(vector_as_array(&sample_encryption_data),
    -
    317  sample_encryption_data.size());
    -
    318  uint32_t sample_count = 0;
    -
    319  RCHECK(reader.Read4(&sample_count));
    -
    320 
    -
    321  sample_encryption_entries->resize(sample_count);
    -
    322  for (auto& sample_encryption_entry : *sample_encryption_entries) {
    -
    323  RCHECK(sample_encryption_entry.ParseFromBuffer(
    -
    324  iv_size, flags & kUseSubsampleEncryption, &reader));
    -
    325  }
    -
    326  return true;
    -
    327 }
    -
    328 
    -
    329 OriginalFormat::OriginalFormat() : format(FOURCC_NULL) {}
    -
    330 OriginalFormat::~OriginalFormat() {}
    -
    331 FourCC OriginalFormat::BoxType() const { return FOURCC_FRMA; }
    -
    332 
    -
    333 bool OriginalFormat::ReadWriteInternal(BoxBuffer* buffer) {
    -
    334  return ReadWriteHeaderInternal(buffer) && buffer->ReadWriteFourCC(&format);
    -
    335 }
    +
    315  uint32_t box_size = HeaderSize() + sizeof(sample_count);
    +
    316  if (flags & kUseSubsampleEncryption) {
    +
    317  for (const SampleEncryptionEntry& sample_encryption_entry :
    +
    318  sample_encryption_entries) {
    +
    319  box_size += sample_encryption_entry.ComputeSize();
    +
    320  }
    +
    321  } else {
    +
    322  box_size += sample_count * iv_size;
    +
    323  }
    +
    324  return box_size;
    +
    325 }
    +
    326 
    + +
    328  size_t iv_size,
    +
    329  std::vector<SampleEncryptionEntry>* sample_encryption_entries) const {
    +
    330  DCHECK(IsIvSizeValid(iv_size));
    +
    331 
    +
    332  BufferReader reader(vector_as_array(&sample_encryption_data),
    +
    333  sample_encryption_data.size());
    +
    334  uint32_t sample_count = 0;
    +
    335  RCHECK(reader.Read4(&sample_count));
    336 
    -
    337 uint32_t OriginalFormat::ComputeSizeInternal() {
    -
    338  return HeaderSize() + kFourCCSize;
    -
    339 }
    -
    340 
    -
    341 SchemeType::SchemeType() : type(FOURCC_NULL), version(0) {}
    -
    342 SchemeType::~SchemeType() {}
    -
    343 FourCC SchemeType::BoxType() const { return FOURCC_SCHM; }
    +
    337  sample_encryption_entries->resize(sample_count);
    +
    338  for (auto& sample_encryption_entry : *sample_encryption_entries) {
    +
    339  RCHECK(sample_encryption_entry.ParseFromBuffer(
    +
    340  iv_size, flags & kUseSubsampleEncryption, &reader));
    +
    341  }
    +
    342  return true;
    +
    343 }
    344 
    -
    345 bool SchemeType::ReadWriteInternal(BoxBuffer* buffer) {
    -
    346  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    347  buffer->ReadWriteFourCC(&type) &&
    -
    348  buffer->ReadWriteUInt32(&version));
    -
    349  return true;
    -
    350 }
    -
    351 
    -
    352 uint32_t SchemeType::ComputeSizeInternal() {
    -
    353  return HeaderSize() + kFourCCSize + sizeof(version);
    -
    354 }
    -
    355 
    -
    356 TrackEncryption::TrackEncryption()
    -
    357  : is_encrypted(false), default_iv_size(0), default_kid(16, 0) {}
    -
    358 TrackEncryption::~TrackEncryption() {}
    -
    359 FourCC TrackEncryption::BoxType() const { return FOURCC_TENC; }
    +
    345 OriginalFormat::OriginalFormat() : format(FOURCC_NULL) {}
    +
    346 OriginalFormat::~OriginalFormat() {}
    +
    347 FourCC OriginalFormat::BoxType() const { return FOURCC_FRMA; }
    +
    348 
    +
    349 bool OriginalFormat::ReadWriteInternal(BoxBuffer* buffer) {
    +
    350  return ReadWriteHeaderInternal(buffer) && buffer->ReadWriteFourCC(&format);
    +
    351 }
    +
    352 
    +
    353 uint32_t OriginalFormat::ComputeSizeInternal() {
    +
    354  return HeaderSize() + kFourCCSize;
    +
    355 }
    +
    356 
    +
    357 SchemeType::SchemeType() : type(FOURCC_NULL), version(0) {}
    +
    358 SchemeType::~SchemeType() {}
    +
    359 FourCC SchemeType::BoxType() const { return FOURCC_SCHM; }
    360 
    -
    361 bool TrackEncryption::ReadWriteInternal(BoxBuffer* buffer) {
    -
    362  if (!buffer->Reading()) {
    -
    363  if (default_kid.size() != kCencKeyIdSize) {
    -
    364  LOG(WARNING) << "CENC defines key id length of " << kCencKeyIdSize
    -
    365  << " bytes; got " << default_kid.size()
    -
    366  << ". Resized accordingly.";
    -
    367  default_kid.resize(kCencKeyIdSize);
    -
    368  }
    -
    369  }
    -
    370 
    -
    371  uint8_t flag = is_encrypted ? 1 : 0;
    -
    372  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    373  buffer->IgnoreBytes(2) && // reserved.
    -
    374  buffer->ReadWriteUInt8(&flag) &&
    -
    375  buffer->ReadWriteUInt8(&default_iv_size) &&
    -
    376  buffer->ReadWriteVector(&default_kid, kCencKeyIdSize));
    -
    377  if (buffer->Reading()) {
    -
    378  is_encrypted = (flag != 0);
    -
    379  if (is_encrypted) {
    -
    380  RCHECK(default_iv_size == 8 || default_iv_size == 16);
    -
    381  } else {
    -
    382  RCHECK(default_iv_size == 0);
    -
    383  }
    -
    384  }
    -
    385  return true;
    -
    386 }
    -
    387 
    -
    388 uint32_t TrackEncryption::ComputeSizeInternal() {
    -
    389  return HeaderSize() + sizeof(uint32_t) + kCencKeyIdSize;
    -
    390 }
    -
    391 
    -
    392 SchemeInfo::SchemeInfo() {}
    -
    393 SchemeInfo::~SchemeInfo() {}
    -
    394 FourCC SchemeInfo::BoxType() const { return FOURCC_SCHI; }
    -
    395 
    -
    396 bool SchemeInfo::ReadWriteInternal(BoxBuffer* buffer) {
    -
    397  RCHECK(ReadWriteHeaderInternal(buffer) && buffer->PrepareChildren() &&
    -
    398  buffer->ReadWriteChild(&track_encryption));
    -
    399  return true;
    -
    400 }
    -
    401 
    -
    402 uint32_t SchemeInfo::ComputeSizeInternal() {
    -
    403  return HeaderSize() + track_encryption.ComputeSize();
    -
    404 }
    -
    405 
    -
    406 ProtectionSchemeInfo::ProtectionSchemeInfo() {}
    -
    407 ProtectionSchemeInfo::~ProtectionSchemeInfo() {}
    -
    408 FourCC ProtectionSchemeInfo::BoxType() const { return FOURCC_SINF; }
    -
    409 
    -
    410 bool ProtectionSchemeInfo::ReadWriteInternal(BoxBuffer* buffer) {
    -
    411  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    412  buffer->PrepareChildren() &&
    -
    413  buffer->ReadWriteChild(&format) &&
    -
    414  buffer->ReadWriteChild(&type));
    -
    415  if (type.type == FOURCC_CENC)
    -
    416  RCHECK(buffer->ReadWriteChild(&info));
    -
    417  // Other protection schemes are silently ignored. Since the protection scheme
    -
    418  // type can't be determined until this box is opened, we return 'true' for
    -
    419  // non-CENC protection scheme types. It is the parent box's responsibility to
    -
    420  // ensure that this scheme type is a supported one.
    -
    421  return true;
    -
    422 }
    -
    423 
    -
    424 uint32_t ProtectionSchemeInfo::ComputeSizeInternal() {
    -
    425  // Skip sinf box if it is not initialized.
    -
    426  if (format.format == FOURCC_NULL)
    -
    427  return 0;
    -
    428  return HeaderSize() + format.ComputeSize() + type.ComputeSize() +
    -
    429  info.ComputeSize();
    -
    430 }
    -
    431 
    -
    432 MovieHeader::MovieHeader()
    -
    433  : creation_time(0),
    -
    434  modification_time(0),
    -
    435  timescale(0),
    -
    436  duration(0),
    -
    437  rate(1 << 16),
    -
    438  volume(1 << 8),
    -
    439  next_track_id(0) {}
    -
    440 MovieHeader::~MovieHeader() {}
    -
    441 FourCC MovieHeader::BoxType() const { return FOURCC_MVHD; }
    -
    442 
    -
    443 bool MovieHeader::ReadWriteInternal(BoxBuffer* buffer) {
    -
    444  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    445 
    -
    446  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    -
    447  RCHECK(buffer->ReadWriteUInt64NBytes(&creation_time, num_bytes) &&
    -
    448  buffer->ReadWriteUInt64NBytes(&modification_time, num_bytes) &&
    -
    449  buffer->ReadWriteUInt32(&timescale) &&
    -
    450  buffer->ReadWriteUInt64NBytes(&duration, num_bytes));
    -
    451 
    -
    452  std::vector<uint8_t> matrix(kUnityMatrix,
    -
    453  kUnityMatrix + arraysize(kUnityMatrix));
    -
    454  RCHECK(buffer->ReadWriteInt32(&rate) &&
    -
    455  buffer->ReadWriteInt16(&volume) &&
    -
    456  buffer->IgnoreBytes(10) && // reserved
    -
    457  buffer->ReadWriteVector(&matrix, matrix.size()) &&
    -
    458  buffer->IgnoreBytes(24) && // predefined zero
    -
    459  buffer->ReadWriteUInt32(&next_track_id));
    -
    460  return true;
    -
    461 }
    -
    462 
    -
    463 uint32_t MovieHeader::ComputeSizeInternal() {
    -
    464  version = IsFitIn32Bits(creation_time, modification_time, duration) ? 0 : 1;
    -
    465  return HeaderSize() + sizeof(uint32_t) * (1 + version) * 3 +
    -
    466  sizeof(timescale) + sizeof(rate) + sizeof(volume) +
    -
    467  sizeof(next_track_id) + sizeof(kUnityMatrix) + 10 +
    -
    468  24; // 10 bytes reserved, 24 bytes predefined.
    -
    469 }
    -
    470 
    -
    471 TrackHeader::TrackHeader()
    -
    472  : creation_time(0),
    -
    473  modification_time(0),
    -
    474  track_id(0),
    -
    475  duration(0),
    -
    476  layer(0),
    -
    477  alternate_group(0),
    -
    478  volume(-1),
    -
    479  width(0),
    -
    480  height(0) {
    -
    481  flags = kTrackEnabled | kTrackInMovie;
    -
    482 }
    -
    483 TrackHeader::~TrackHeader() {}
    -
    484 FourCC TrackHeader::BoxType() const { return FOURCC_TKHD; }
    -
    485 
    -
    486 bool TrackHeader::ReadWriteInternal(BoxBuffer* buffer) {
    -
    487  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    488 
    -
    489  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    -
    490  RCHECK(buffer->ReadWriteUInt64NBytes(&creation_time, num_bytes) &&
    -
    491  buffer->ReadWriteUInt64NBytes(&modification_time, num_bytes) &&
    -
    492  buffer->ReadWriteUInt32(&track_id) &&
    -
    493  buffer->IgnoreBytes(4) && // reserved
    -
    494  buffer->ReadWriteUInt64NBytes(&duration, num_bytes));
    -
    495 
    -
    496  if (!buffer->Reading()) {
    -
    497  // Set default value for volume, if track is audio, 0x100 else 0.
    -
    498  if (volume == -1)
    -
    499  volume = (width != 0 && height != 0) ? 0 : 0x100;
    -
    500  }
    -
    501  std::vector<uint8_t> matrix(kUnityMatrix,
    -
    502  kUnityMatrix + arraysize(kUnityMatrix));
    -
    503  RCHECK(buffer->IgnoreBytes(8) && // reserved
    -
    504  buffer->ReadWriteInt16(&layer) &&
    -
    505  buffer->ReadWriteInt16(&alternate_group) &&
    -
    506  buffer->ReadWriteInt16(&volume) &&
    -
    507  buffer->IgnoreBytes(2) && // reserved
    -
    508  buffer->ReadWriteVector(&matrix, matrix.size()) &&
    -
    509  buffer->ReadWriteUInt32(&width) &&
    -
    510  buffer->ReadWriteUInt32(&height));
    -
    511  return true;
    -
    512 }
    -
    513 
    -
    514 uint32_t TrackHeader::ComputeSizeInternal() {
    -
    515  version = IsFitIn32Bits(creation_time, modification_time, duration) ? 0 : 1;
    -
    516  return HeaderSize() + sizeof(track_id) +
    -
    517  sizeof(uint32_t) * (1 + version) * 3 + sizeof(layer) +
    -
    518  sizeof(alternate_group) + sizeof(volume) + sizeof(width) +
    -
    519  sizeof(height) + sizeof(kUnityMatrix) + 14; // 14 bytes reserved.
    -
    520 }
    -
    521 
    -
    522 SampleDescription::SampleDescription() : type(kInvalid) {}
    -
    523 SampleDescription::~SampleDescription() {}
    -
    524 FourCC SampleDescription::BoxType() const { return FOURCC_STSD; }
    -
    525 
    -
    526 bool SampleDescription::ReadWriteInternal(BoxBuffer* buffer) {
    -
    527  uint32_t count = 0;
    -
    528  switch (type) {
    -
    529  case kVideo:
    -
    530  count = video_entries.size();
    -
    531  break;
    -
    532  case kAudio:
    -
    533  count = audio_entries.size();
    -
    534  break;
    -
    535  case kText:
    -
    536  count = wvtt_entries.size();
    -
    537  break;
    -
    538  default:
    -
    539  NOTIMPLEMENTED() << "SampleDecryption type " << type
    -
    540  << " is not handled. Skipping.";
    -
    541  }
    -
    542  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    543  buffer->ReadWriteUInt32(&count));
    -
    544 
    -
    545  if (buffer->Reading()) {
    -
    546  BoxReader* reader = buffer->reader();
    -
    547  DCHECK(reader);
    -
    548  video_entries.clear();
    -
    549  audio_entries.clear();
    -
    550  // Note: this value is preset before scanning begins. See comments in the
    -
    551  // Parse(Media*) function.
    -
    552  if (type == kVideo) {
    -
    553  RCHECK(reader->ReadAllChildren(&video_entries));
    -
    554  RCHECK(video_entries.size() == count);
    -
    555  } else if (type == kAudio) {
    -
    556  RCHECK(reader->ReadAllChildren(&audio_entries));
    -
    557  RCHECK(audio_entries.size() == count);
    -
    558  } else if (type == kText) {
    -
    559  RCHECK(reader->ReadAllChildren(&wvtt_entries));
    -
    560  RCHECK(wvtt_entries.size() == count);
    -
    561  }
    -
    562  } else {
    -
    563  DCHECK_LT(0u, count);
    -
    564  if (type == kVideo) {
    -
    565  for (uint32_t i = 0; i < count; ++i)
    -
    566  RCHECK(buffer->ReadWriteChild(&video_entries[i]));
    -
    567  } else if (type == kAudio) {
    -
    568  for (uint32_t i = 0; i < count; ++i)
    -
    569  RCHECK(buffer->ReadWriteChild(&audio_entries[i]));
    -
    570  } else if (type == kText) {
    -
    571  for (uint32_t i = 0; i < count; ++i)
    -
    572  RCHECK(buffer->ReadWriteChild(&wvtt_entries[i]));
    -
    573  } else {
    -
    574  NOTIMPLEMENTED();
    -
    575  }
    -
    576  }
    -
    577  return true;
    -
    578 }
    -
    579 
    -
    580 uint32_t SampleDescription::ComputeSizeInternal() {
    -
    581  uint32_t box_size = HeaderSize() + sizeof(uint32_t);
    -
    582  if (type == kVideo) {
    -
    583  for (uint32_t i = 0; i < video_entries.size(); ++i)
    -
    584  box_size += video_entries[i].ComputeSize();
    -
    585  } else if (type == kAudio) {
    -
    586  for (uint32_t i = 0; i < audio_entries.size(); ++i)
    -
    587  box_size += audio_entries[i].ComputeSize();
    -
    588  }
    -
    589  return box_size;
    -
    590 }
    -
    591 
    -
    592 DecodingTimeToSample::DecodingTimeToSample() {}
    -
    593 DecodingTimeToSample::~DecodingTimeToSample() {}
    -
    594 FourCC DecodingTimeToSample::BoxType() const { return FOURCC_STTS; }
    +
    361 bool SchemeType::ReadWriteInternal(BoxBuffer* buffer) {
    +
    362  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    363  buffer->ReadWriteFourCC(&type) &&
    +
    364  buffer->ReadWriteUInt32(&version));
    +
    365  return true;
    +
    366 }
    +
    367 
    +
    368 uint32_t SchemeType::ComputeSizeInternal() {
    +
    369  return HeaderSize() + kFourCCSize + sizeof(version);
    +
    370 }
    +
    371 
    +
    372 TrackEncryption::TrackEncryption()
    +
    373  : is_encrypted(false), default_iv_size(0), default_kid(16, 0) {}
    +
    374 TrackEncryption::~TrackEncryption() {}
    +
    375 FourCC TrackEncryption::BoxType() const { return FOURCC_TENC; }
    +
    376 
    +
    377 bool TrackEncryption::ReadWriteInternal(BoxBuffer* buffer) {
    +
    378  if (!buffer->Reading()) {
    +
    379  if (default_kid.size() != kCencKeyIdSize) {
    +
    380  LOG(WARNING) << "CENC defines key id length of " << kCencKeyIdSize
    +
    381  << " bytes; got " << default_kid.size()
    +
    382  << ". Resized accordingly.";
    +
    383  default_kid.resize(kCencKeyIdSize);
    +
    384  }
    +
    385  }
    +
    386 
    +
    387  uint8_t flag = is_encrypted ? 1 : 0;
    +
    388  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    389  buffer->IgnoreBytes(2) && // reserved.
    +
    390  buffer->ReadWriteUInt8(&flag) &&
    +
    391  buffer->ReadWriteUInt8(&default_iv_size) &&
    +
    392  buffer->ReadWriteVector(&default_kid, kCencKeyIdSize));
    +
    393  if (buffer->Reading()) {
    +
    394  is_encrypted = (flag != 0);
    +
    395  if (is_encrypted) {
    +
    396  RCHECK(default_iv_size == 8 || default_iv_size == 16);
    +
    397  } else {
    +
    398  RCHECK(default_iv_size == 0);
    +
    399  }
    +
    400  }
    +
    401  return true;
    +
    402 }
    +
    403 
    +
    404 uint32_t TrackEncryption::ComputeSizeInternal() {
    +
    405  return HeaderSize() + sizeof(uint32_t) + kCencKeyIdSize;
    +
    406 }
    +
    407 
    +
    408 SchemeInfo::SchemeInfo() {}
    +
    409 SchemeInfo::~SchemeInfo() {}
    +
    410 FourCC SchemeInfo::BoxType() const { return FOURCC_SCHI; }
    +
    411 
    +
    412 bool SchemeInfo::ReadWriteInternal(BoxBuffer* buffer) {
    +
    413  RCHECK(ReadWriteHeaderInternal(buffer) && buffer->PrepareChildren() &&
    +
    414  buffer->ReadWriteChild(&track_encryption));
    +
    415  return true;
    +
    416 }
    +
    417 
    +
    418 uint32_t SchemeInfo::ComputeSizeInternal() {
    +
    419  return HeaderSize() + track_encryption.ComputeSize();
    +
    420 }
    +
    421 
    +
    422 ProtectionSchemeInfo::ProtectionSchemeInfo() {}
    +
    423 ProtectionSchemeInfo::~ProtectionSchemeInfo() {}
    +
    424 FourCC ProtectionSchemeInfo::BoxType() const { return FOURCC_SINF; }
    +
    425 
    +
    426 bool ProtectionSchemeInfo::ReadWriteInternal(BoxBuffer* buffer) {
    +
    427  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    428  buffer->PrepareChildren() &&
    +
    429  buffer->ReadWriteChild(&format) &&
    +
    430  buffer->ReadWriteChild(&type));
    +
    431  if (type.type == FOURCC_CENC)
    +
    432  RCHECK(buffer->ReadWriteChild(&info));
    +
    433  // Other protection schemes are silently ignored. Since the protection scheme
    +
    434  // type can't be determined until this box is opened, we return 'true' for
    +
    435  // non-CENC protection scheme types. It is the parent box's responsibility to
    +
    436  // ensure that this scheme type is a supported one.
    +
    437  return true;
    +
    438 }
    +
    439 
    +
    440 uint32_t ProtectionSchemeInfo::ComputeSizeInternal() {
    +
    441  // Skip sinf box if it is not initialized.
    +
    442  if (format.format == FOURCC_NULL)
    +
    443  return 0;
    +
    444  return HeaderSize() + format.ComputeSize() + type.ComputeSize() +
    +
    445  info.ComputeSize();
    +
    446 }
    +
    447 
    +
    448 MovieHeader::MovieHeader()
    +
    449  : creation_time(0),
    +
    450  modification_time(0),
    +
    451  timescale(0),
    +
    452  duration(0),
    +
    453  rate(1 << 16),
    +
    454  volume(1 << 8),
    +
    455  next_track_id(0) {}
    +
    456 MovieHeader::~MovieHeader() {}
    +
    457 FourCC MovieHeader::BoxType() const { return FOURCC_MVHD; }
    +
    458 
    +
    459 bool MovieHeader::ReadWriteInternal(BoxBuffer* buffer) {
    +
    460  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    461 
    +
    462  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    +
    463  RCHECK(buffer->ReadWriteUInt64NBytes(&creation_time, num_bytes) &&
    +
    464  buffer->ReadWriteUInt64NBytes(&modification_time, num_bytes) &&
    +
    465  buffer->ReadWriteUInt32(&timescale) &&
    +
    466  buffer->ReadWriteUInt64NBytes(&duration, num_bytes));
    +
    467 
    +
    468  std::vector<uint8_t> matrix(kUnityMatrix,
    +
    469  kUnityMatrix + arraysize(kUnityMatrix));
    +
    470  RCHECK(buffer->ReadWriteInt32(&rate) &&
    +
    471  buffer->ReadWriteInt16(&volume) &&
    +
    472  buffer->IgnoreBytes(10) && // reserved
    +
    473  buffer->ReadWriteVector(&matrix, matrix.size()) &&
    +
    474  buffer->IgnoreBytes(24) && // predefined zero
    +
    475  buffer->ReadWriteUInt32(&next_track_id));
    +
    476  return true;
    +
    477 }
    +
    478 
    +
    479 uint32_t MovieHeader::ComputeSizeInternal() {
    +
    480  version = IsFitIn32Bits(creation_time, modification_time, duration) ? 0 : 1;
    +
    481  return HeaderSize() + sizeof(uint32_t) * (1 + version) * 3 +
    +
    482  sizeof(timescale) + sizeof(rate) + sizeof(volume) +
    +
    483  sizeof(next_track_id) + sizeof(kUnityMatrix) + 10 +
    +
    484  24; // 10 bytes reserved, 24 bytes predefined.
    +
    485 }
    +
    486 
    +
    487 TrackHeader::TrackHeader()
    +
    488  : creation_time(0),
    +
    489  modification_time(0),
    +
    490  track_id(0),
    +
    491  duration(0),
    +
    492  layer(0),
    +
    493  alternate_group(0),
    +
    494  volume(-1),
    +
    495  width(0),
    +
    496  height(0) {
    +
    497  flags = kTrackEnabled | kTrackInMovie;
    +
    498 }
    +
    499 TrackHeader::~TrackHeader() {}
    +
    500 FourCC TrackHeader::BoxType() const { return FOURCC_TKHD; }
    +
    501 
    +
    502 bool TrackHeader::ReadWriteInternal(BoxBuffer* buffer) {
    +
    503  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    504 
    +
    505  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    +
    506  RCHECK(buffer->ReadWriteUInt64NBytes(&creation_time, num_bytes) &&
    +
    507  buffer->ReadWriteUInt64NBytes(&modification_time, num_bytes) &&
    +
    508  buffer->ReadWriteUInt32(&track_id) &&
    +
    509  buffer->IgnoreBytes(4) && // reserved
    +
    510  buffer->ReadWriteUInt64NBytes(&duration, num_bytes));
    +
    511 
    +
    512  if (!buffer->Reading()) {
    +
    513  // Set default value for volume, if track is audio, 0x100 else 0.
    +
    514  if (volume == -1)
    +
    515  volume = (width != 0 && height != 0) ? 0 : 0x100;
    +
    516  }
    +
    517  std::vector<uint8_t> matrix(kUnityMatrix,
    +
    518  kUnityMatrix + arraysize(kUnityMatrix));
    +
    519  RCHECK(buffer->IgnoreBytes(8) && // reserved
    +
    520  buffer->ReadWriteInt16(&layer) &&
    +
    521  buffer->ReadWriteInt16(&alternate_group) &&
    +
    522  buffer->ReadWriteInt16(&volume) &&
    +
    523  buffer->IgnoreBytes(2) && // reserved
    +
    524  buffer->ReadWriteVector(&matrix, matrix.size()) &&
    +
    525  buffer->ReadWriteUInt32(&width) &&
    +
    526  buffer->ReadWriteUInt32(&height));
    +
    527  return true;
    +
    528 }
    +
    529 
    +
    530 uint32_t TrackHeader::ComputeSizeInternal() {
    +
    531  version = IsFitIn32Bits(creation_time, modification_time, duration) ? 0 : 1;
    +
    532  return HeaderSize() + sizeof(track_id) +
    +
    533  sizeof(uint32_t) * (1 + version) * 3 + sizeof(layer) +
    +
    534  sizeof(alternate_group) + sizeof(volume) + sizeof(width) +
    +
    535  sizeof(height) + sizeof(kUnityMatrix) + 14; // 14 bytes reserved.
    +
    536 }
    +
    537 
    +
    538 SampleDescription::SampleDescription() : type(kInvalid) {}
    +
    539 SampleDescription::~SampleDescription() {}
    +
    540 FourCC SampleDescription::BoxType() const { return FOURCC_STSD; }
    +
    541 
    +
    542 bool SampleDescription::ReadWriteInternal(BoxBuffer* buffer) {
    +
    543  uint32_t count = 0;
    +
    544  switch (type) {
    +
    545  case kVideo:
    +
    546  count = video_entries.size();
    +
    547  break;
    +
    548  case kAudio:
    +
    549  count = audio_entries.size();
    +
    550  break;
    +
    551  case kText:
    +
    552  count = wvtt_entries.size();
    +
    553  break;
    +
    554  default:
    +
    555  NOTIMPLEMENTED() << "SampleDecryption type " << type
    +
    556  << " is not handled. Skipping.";
    +
    557  }
    +
    558  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    559  buffer->ReadWriteUInt32(&count));
    +
    560 
    +
    561  if (buffer->Reading()) {
    +
    562  BoxReader* reader = buffer->reader();
    +
    563  DCHECK(reader);
    +
    564  video_entries.clear();
    +
    565  audio_entries.clear();
    +
    566  // Note: this value is preset before scanning begins. See comments in the
    +
    567  // Parse(Media*) function.
    +
    568  if (type == kVideo) {
    +
    569  RCHECK(reader->ReadAllChildren(&video_entries));
    +
    570  RCHECK(video_entries.size() == count);
    +
    571  } else if (type == kAudio) {
    +
    572  RCHECK(reader->ReadAllChildren(&audio_entries));
    +
    573  RCHECK(audio_entries.size() == count);
    +
    574  } else if (type == kText) {
    +
    575  RCHECK(reader->ReadAllChildren(&wvtt_entries));
    +
    576  RCHECK(wvtt_entries.size() == count);
    +
    577  }
    +
    578  } else {
    +
    579  DCHECK_LT(0u, count);
    +
    580  if (type == kVideo) {
    +
    581  for (uint32_t i = 0; i < count; ++i)
    +
    582  RCHECK(buffer->ReadWriteChild(&video_entries[i]));
    +
    583  } else if (type == kAudio) {
    +
    584  for (uint32_t i = 0; i < count; ++i)
    +
    585  RCHECK(buffer->ReadWriteChild(&audio_entries[i]));
    +
    586  } else if (type == kText) {
    +
    587  for (uint32_t i = 0; i < count; ++i)
    +
    588  RCHECK(buffer->ReadWriteChild(&wvtt_entries[i]));
    +
    589  } else {
    +
    590  NOTIMPLEMENTED();
    +
    591  }
    +
    592  }
    +
    593  return true;
    +
    594 }
    595 
    -
    596 bool DecodingTimeToSample::ReadWriteInternal(BoxBuffer* buffer) {
    -
    597  uint32_t count = decoding_time.size();
    -
    598  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    599  buffer->ReadWriteUInt32(&count));
    -
    600 
    -
    601  decoding_time.resize(count);
    -
    602  for (uint32_t i = 0; i < count; ++i) {
    -
    603  RCHECK(buffer->ReadWriteUInt32(&decoding_time[i].sample_count) &&
    -
    604  buffer->ReadWriteUInt32(&decoding_time[i].sample_delta));
    -
    605  }
    -
    606  return true;
    -
    607 }
    -
    608 
    -
    609 uint32_t DecodingTimeToSample::ComputeSizeInternal() {
    -
    610  return HeaderSize() + sizeof(uint32_t) +
    -
    611  sizeof(DecodingTime) * decoding_time.size();
    -
    612 }
    -
    613 
    -
    614 CompositionTimeToSample::CompositionTimeToSample() {}
    -
    615 CompositionTimeToSample::~CompositionTimeToSample() {}
    -
    616 FourCC CompositionTimeToSample::BoxType() const { return FOURCC_CTTS; }
    -
    617 
    -
    618 bool CompositionTimeToSample::ReadWriteInternal(BoxBuffer* buffer) {
    -
    619  uint32_t count = composition_offset.size();
    -
    620  if (!buffer->Reading()) {
    -
    621  // Determine whether version 0 or version 1 should be used.
    -
    622  // Use version 0 if possible, use version 1 if there is a negative
    -
    623  // sample_offset value.
    -
    624  version = 0;
    -
    625  for (uint32_t i = 0; i < count; ++i) {
    -
    626  if (composition_offset[i].sample_offset < 0) {
    -
    627  version = 1;
    -
    628  break;
    -
    629  }
    -
    630  }
    -
    631  }
    -
    632 
    -
    633  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    634  buffer->ReadWriteUInt32(&count));
    -
    635 
    -
    636  composition_offset.resize(count);
    -
    637  for (uint32_t i = 0; i < count; ++i) {
    -
    638  RCHECK(buffer->ReadWriteUInt32(&composition_offset[i].sample_count));
    -
    639 
    -
    640  if (version == 0) {
    -
    641  uint32_t sample_offset = composition_offset[i].sample_offset;
    -
    642  RCHECK(buffer->ReadWriteUInt32(&sample_offset));
    -
    643  composition_offset[i].sample_offset = sample_offset;
    -
    644  } else {
    -
    645  int32_t sample_offset = composition_offset[i].sample_offset;
    -
    646  RCHECK(buffer->ReadWriteInt32(&sample_offset));
    -
    647  composition_offset[i].sample_offset = sample_offset;
    -
    648  }
    -
    649  }
    -
    650  return true;
    -
    651 }
    -
    652 
    -
    653 uint32_t CompositionTimeToSample::ComputeSizeInternal() {
    -
    654  // This box is optional. Skip it if it is empty.
    -
    655  if (composition_offset.empty())
    -
    656  return 0;
    -
    657  // Structure CompositionOffset contains |sample_offset| (uint32_t) and
    -
    658  // |sample_offset| (int64_t). The actual size of |sample_offset| is
    -
    659  // 4 bytes (uint32_t for version 0 and int32_t for version 1).
    -
    660  const uint32_t kCompositionOffsetSize = sizeof(uint32_t) * 2;
    -
    661  return HeaderSize() + sizeof(uint32_t) +
    -
    662  kCompositionOffsetSize * composition_offset.size();
    -
    663 }
    -
    664 
    -
    665 SampleToChunk::SampleToChunk() {}
    -
    666 SampleToChunk::~SampleToChunk() {}
    -
    667 FourCC SampleToChunk::BoxType() const { return FOURCC_STSC; }
    +
    596 uint32_t SampleDescription::ComputeSizeInternal() {
    +
    597  uint32_t box_size = HeaderSize() + sizeof(uint32_t);
    +
    598  if (type == kVideo) {
    +
    599  for (uint32_t i = 0; i < video_entries.size(); ++i)
    +
    600  box_size += video_entries[i].ComputeSize();
    +
    601  } else if (type == kAudio) {
    +
    602  for (uint32_t i = 0; i < audio_entries.size(); ++i)
    +
    603  box_size += audio_entries[i].ComputeSize();
    +
    604  }
    +
    605  return box_size;
    +
    606 }
    +
    607 
    +
    608 DecodingTimeToSample::DecodingTimeToSample() {}
    +
    609 DecodingTimeToSample::~DecodingTimeToSample() {}
    +
    610 FourCC DecodingTimeToSample::BoxType() const { return FOURCC_STTS; }
    +
    611 
    +
    612 bool DecodingTimeToSample::ReadWriteInternal(BoxBuffer* buffer) {
    +
    613  uint32_t count = decoding_time.size();
    +
    614  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    615  buffer->ReadWriteUInt32(&count));
    +
    616 
    +
    617  decoding_time.resize(count);
    +
    618  for (uint32_t i = 0; i < count; ++i) {
    +
    619  RCHECK(buffer->ReadWriteUInt32(&decoding_time[i].sample_count) &&
    +
    620  buffer->ReadWriteUInt32(&decoding_time[i].sample_delta));
    +
    621  }
    +
    622  return true;
    +
    623 }
    +
    624 
    +
    625 uint32_t DecodingTimeToSample::ComputeSizeInternal() {
    +
    626  return HeaderSize() + sizeof(uint32_t) +
    +
    627  sizeof(DecodingTime) * decoding_time.size();
    +
    628 }
    +
    629 
    +
    630 CompositionTimeToSample::CompositionTimeToSample() {}
    +
    631 CompositionTimeToSample::~CompositionTimeToSample() {}
    +
    632 FourCC CompositionTimeToSample::BoxType() const { return FOURCC_CTTS; }
    +
    633 
    +
    634 bool CompositionTimeToSample::ReadWriteInternal(BoxBuffer* buffer) {
    +
    635  uint32_t count = composition_offset.size();
    +
    636  if (!buffer->Reading()) {
    +
    637  // Determine whether version 0 or version 1 should be used.
    +
    638  // Use version 0 if possible, use version 1 if there is a negative
    +
    639  // sample_offset value.
    +
    640  version = 0;
    +
    641  for (uint32_t i = 0; i < count; ++i) {
    +
    642  if (composition_offset[i].sample_offset < 0) {
    +
    643  version = 1;
    +
    644  break;
    +
    645  }
    +
    646  }
    +
    647  }
    +
    648 
    +
    649  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    650  buffer->ReadWriteUInt32(&count));
    +
    651 
    +
    652  composition_offset.resize(count);
    +
    653  for (uint32_t i = 0; i < count; ++i) {
    +
    654  RCHECK(buffer->ReadWriteUInt32(&composition_offset[i].sample_count));
    +
    655 
    +
    656  if (version == 0) {
    +
    657  uint32_t sample_offset = composition_offset[i].sample_offset;
    +
    658  RCHECK(buffer->ReadWriteUInt32(&sample_offset));
    +
    659  composition_offset[i].sample_offset = sample_offset;
    +
    660  } else {
    +
    661  int32_t sample_offset = composition_offset[i].sample_offset;
    +
    662  RCHECK(buffer->ReadWriteInt32(&sample_offset));
    +
    663  composition_offset[i].sample_offset = sample_offset;
    +
    664  }
    +
    665  }
    +
    666  return true;
    +
    667 }
    668 
    -
    669 bool SampleToChunk::ReadWriteInternal(BoxBuffer* buffer) {
    -
    670  uint32_t count = chunk_info.size();
    -
    671  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    672  buffer->ReadWriteUInt32(&count));
    -
    673 
    -
    674  chunk_info.resize(count);
    -
    675  for (uint32_t i = 0; i < count; ++i) {
    -
    676  RCHECK(buffer->ReadWriteUInt32(&chunk_info[i].first_chunk) &&
    -
    677  buffer->ReadWriteUInt32(&chunk_info[i].samples_per_chunk) &&
    -
    678  buffer->ReadWriteUInt32(&chunk_info[i].sample_description_index));
    -
    679  // first_chunk values are always increasing.
    -
    680  RCHECK(i == 0 ? chunk_info[i].first_chunk == 1
    -
    681  : chunk_info[i].first_chunk > chunk_info[i - 1].first_chunk);
    -
    682  }
    -
    683  return true;
    -
    684 }
    -
    685 
    -
    686 uint32_t SampleToChunk::ComputeSizeInternal() {
    -
    687  return HeaderSize() + sizeof(uint32_t) +
    -
    688  sizeof(ChunkInfo) * chunk_info.size();
    -
    689 }
    -
    690 
    -
    691 SampleSize::SampleSize() : sample_size(0), sample_count(0) {}
    -
    692 SampleSize::~SampleSize() {}
    -
    693 FourCC SampleSize::BoxType() const { return FOURCC_STSZ; }
    -
    694 
    -
    695 bool SampleSize::ReadWriteInternal(BoxBuffer* buffer) {
    -
    696  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    697  buffer->ReadWriteUInt32(&sample_size) &&
    -
    698  buffer->ReadWriteUInt32(&sample_count));
    -
    699 
    -
    700  if (sample_size == 0) {
    -
    701  if (buffer->Reading())
    -
    702  sizes.resize(sample_count);
    -
    703  else
    -
    704  DCHECK(sample_count == sizes.size());
    -
    705  for (uint32_t i = 0; i < sample_count; ++i)
    -
    706  RCHECK(buffer->ReadWriteUInt32(&sizes[i]));
    -
    707  }
    -
    708  return true;
    -
    709 }
    +
    669 uint32_t CompositionTimeToSample::ComputeSizeInternal() {
    +
    670  // This box is optional. Skip it if it is empty.
    +
    671  if (composition_offset.empty())
    +
    672  return 0;
    +
    673  // Structure CompositionOffset contains |sample_offset| (uint32_t) and
    +
    674  // |sample_offset| (int64_t). The actual size of |sample_offset| is
    +
    675  // 4 bytes (uint32_t for version 0 and int32_t for version 1).
    +
    676  const uint32_t kCompositionOffsetSize = sizeof(uint32_t) * 2;
    +
    677  return HeaderSize() + sizeof(uint32_t) +
    +
    678  kCompositionOffsetSize * composition_offset.size();
    +
    679 }
    +
    680 
    +
    681 SampleToChunk::SampleToChunk() {}
    +
    682 SampleToChunk::~SampleToChunk() {}
    +
    683 FourCC SampleToChunk::BoxType() const { return FOURCC_STSC; }
    +
    684 
    +
    685 bool SampleToChunk::ReadWriteInternal(BoxBuffer* buffer) {
    +
    686  uint32_t count = chunk_info.size();
    +
    687  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    688  buffer->ReadWriteUInt32(&count));
    +
    689 
    +
    690  chunk_info.resize(count);
    +
    691  for (uint32_t i = 0; i < count; ++i) {
    +
    692  RCHECK(buffer->ReadWriteUInt32(&chunk_info[i].first_chunk) &&
    +
    693  buffer->ReadWriteUInt32(&chunk_info[i].samples_per_chunk) &&
    +
    694  buffer->ReadWriteUInt32(&chunk_info[i].sample_description_index));
    +
    695  // first_chunk values are always increasing.
    +
    696  RCHECK(i == 0 ? chunk_info[i].first_chunk == 1
    +
    697  : chunk_info[i].first_chunk > chunk_info[i - 1].first_chunk);
    +
    698  }
    +
    699  return true;
    +
    700 }
    +
    701 
    +
    702 uint32_t SampleToChunk::ComputeSizeInternal() {
    +
    703  return HeaderSize() + sizeof(uint32_t) +
    +
    704  sizeof(ChunkInfo) * chunk_info.size();
    +
    705 }
    +
    706 
    +
    707 SampleSize::SampleSize() : sample_size(0), sample_count(0) {}
    +
    708 SampleSize::~SampleSize() {}
    +
    709 FourCC SampleSize::BoxType() const { return FOURCC_STSZ; }
    710 
    -
    711 uint32_t SampleSize::ComputeSizeInternal() {
    -
    712  return HeaderSize() + sizeof(sample_size) + sizeof(sample_count) +
    -
    713  (sample_size == 0 ? sizeof(uint32_t) * sizes.size() : 0);
    -
    714 }
    +
    711 bool SampleSize::ReadWriteInternal(BoxBuffer* buffer) {
    +
    712  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    713  buffer->ReadWriteUInt32(&sample_size) &&
    +
    714  buffer->ReadWriteUInt32(&sample_count));
    715 
    -
    716 CompactSampleSize::CompactSampleSize() : field_size(0) {}
    -
    717 CompactSampleSize::~CompactSampleSize() {}
    -
    718 FourCC CompactSampleSize::BoxType() const { return FOURCC_STZ2; }
    -
    719 
    -
    720 bool CompactSampleSize::ReadWriteInternal(BoxBuffer* buffer) {
    -
    721  uint32_t sample_count = sizes.size();
    -
    722  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    723  buffer->IgnoreBytes(3) &&
    -
    724  buffer->ReadWriteUInt8(&field_size) &&
    -
    725  buffer->ReadWriteUInt32(&sample_count));
    +
    716  if (sample_size == 0) {
    +
    717  if (buffer->Reading())
    +
    718  sizes.resize(sample_count);
    +
    719  else
    +
    720  DCHECK(sample_count == sizes.size());
    +
    721  for (uint32_t i = 0; i < sample_count; ++i)
    +
    722  RCHECK(buffer->ReadWriteUInt32(&sizes[i]));
    +
    723  }
    +
    724  return true;
    +
    725 }
    726 
    -
    727  // Reserve one more entry if field size is 4 bits.
    -
    728  sizes.resize(sample_count + (field_size == 4 ? 1 : 0), 0);
    -
    729  switch (field_size) {
    -
    730  case 4:
    -
    731  for (uint32_t i = 0; i < sample_count; i += 2) {
    -
    732  if (buffer->Reading()) {
    -
    733  uint8_t size = 0;
    -
    734  RCHECK(buffer->ReadWriteUInt8(&size));
    -
    735  sizes[i] = size >> 4;
    -
    736  sizes[i + 1] = size & 0x0F;
    -
    737  } else {
    -
    738  DCHECK_LT(sizes[i], 16u);
    -
    739  DCHECK_LT(sizes[i + 1], 16u);
    -
    740  uint8_t size = (sizes[i] << 4) | sizes[i + 1];
    -
    741  RCHECK(buffer->ReadWriteUInt8(&size));
    -
    742  }
    -
    743  }
    -
    744  break;
    -
    745  case 8:
    -
    746  for (uint32_t i = 0; i < sample_count; ++i) {
    -
    747  uint8_t size = sizes[i];
    -
    748  RCHECK(buffer->ReadWriteUInt8(&size));
    -
    749  sizes[i] = size;
    -
    750  }
    -
    751  break;
    -
    752  case 16:
    -
    753  for (uint32_t i = 0; i < sample_count; ++i) {
    -
    754  uint16_t size = sizes[i];
    -
    755  RCHECK(buffer->ReadWriteUInt16(&size));
    -
    756  sizes[i] = size;
    -
    757  }
    -
    758  break;
    -
    759  default:
    -
    760  RCHECK(false);
    -
    761  }
    -
    762  sizes.resize(sample_count);
    -
    763  return true;
    -
    764 }
    -
    765 
    -
    766 uint32_t CompactSampleSize::ComputeSizeInternal() {
    -
    767  return HeaderSize() + sizeof(uint32_t) + sizeof(uint32_t) +
    -
    768  (field_size * sizes.size() + 7) / 8;
    -
    769 }
    -
    770 
    -
    771 ChunkOffset::ChunkOffset() {}
    -
    772 ChunkOffset::~ChunkOffset() {}
    -
    773 FourCC ChunkOffset::BoxType() const { return FOURCC_STCO; }
    -
    774 
    -
    775 bool ChunkOffset::ReadWriteInternal(BoxBuffer* buffer) {
    -
    776  uint32_t count = offsets.size();
    -
    777  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    778  buffer->ReadWriteUInt32(&count));
    -
    779 
    -
    780  offsets.resize(count);
    -
    781  for (uint32_t i = 0; i < count; ++i)
    -
    782  RCHECK(buffer->ReadWriteUInt64NBytes(&offsets[i], sizeof(uint32_t)));
    -
    783  return true;
    -
    784 }
    -
    785 
    -
    786 uint32_t ChunkOffset::ComputeSizeInternal() {
    -
    787  return HeaderSize() + sizeof(uint32_t) + sizeof(uint32_t) * offsets.size();
    -
    788 }
    -
    789 
    -
    790 ChunkLargeOffset::ChunkLargeOffset() {}
    -
    791 ChunkLargeOffset::~ChunkLargeOffset() {}
    -
    792 FourCC ChunkLargeOffset::BoxType() const { return FOURCC_CO64; }
    -
    793 
    -
    794 bool ChunkLargeOffset::ReadWriteInternal(BoxBuffer* buffer) {
    -
    795  uint32_t count = offsets.size();
    -
    796 
    -
    797  if (!buffer->Reading()) {
    -
    798  // Switch to ChunkOffset box if it is able to fit in 32 bits offset.
    -
    799  if (count == 0 || IsFitIn32Bits(offsets[count - 1])) {
    -
    800  ChunkOffset stco;
    -
    801  stco.offsets.swap(offsets);
    -
    802  DCHECK(buffer->writer());
    -
    803  stco.Write(buffer->writer());
    -
    804  stco.offsets.swap(offsets);
    -
    805  return true;
    -
    806  }
    -
    807  }
    -
    808 
    -
    809  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    810  buffer->ReadWriteUInt32(&count));
    -
    811 
    -
    812  offsets.resize(count);
    -
    813  for (uint32_t i = 0; i < count; ++i)
    -
    814  RCHECK(buffer->ReadWriteUInt64(&offsets[i]));
    -
    815  return true;
    -
    816 }
    -
    817 
    -
    818 uint32_t ChunkLargeOffset::ComputeSizeInternal() {
    -
    819  uint32_t count = offsets.size();
    -
    820  int use_large_offset =
    -
    821  (count > 0 && !IsFitIn32Bits(offsets[count - 1])) ? 1 : 0;
    -
    822  return HeaderSize() + sizeof(count) +
    -
    823  sizeof(uint32_t) * (1 + use_large_offset) * offsets.size();
    -
    824 }
    -
    825 
    -
    826 SyncSample::SyncSample() {}
    -
    827 SyncSample::~SyncSample() {}
    -
    828 FourCC SyncSample::BoxType() const { return FOURCC_STSS; }
    -
    829 
    -
    830 bool SyncSample::ReadWriteInternal(BoxBuffer* buffer) {
    -
    831  uint32_t count = sample_number.size();
    -
    832  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    833  buffer->ReadWriteUInt32(&count));
    -
    834 
    -
    835  sample_number.resize(count);
    -
    836  for (uint32_t i = 0; i < count; ++i)
    -
    837  RCHECK(buffer->ReadWriteUInt32(&sample_number[i]));
    -
    838  return true;
    -
    839 }
    -
    840 
    -
    841 uint32_t SyncSample::ComputeSizeInternal() {
    -
    842  // Sync sample box is optional. Skip it if it is empty.
    -
    843  if (sample_number.empty())
    -
    844  return 0;
    -
    845  return HeaderSize() + sizeof(uint32_t) +
    -
    846  sizeof(uint32_t) * sample_number.size();
    -
    847 }
    -
    848 
    -
    849 SampleTable::SampleTable() {}
    -
    850 SampleTable::~SampleTable() {}
    -
    851 FourCC SampleTable::BoxType() const { return FOURCC_STBL; }
    -
    852 
    -
    853 bool SampleTable::ReadWriteInternal(BoxBuffer* buffer) {
    -
    854  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    855  buffer->PrepareChildren() &&
    -
    856  buffer->ReadWriteChild(&description) &&
    -
    857  buffer->ReadWriteChild(&decoding_time_to_sample) &&
    -
    858  buffer->TryReadWriteChild(&composition_time_to_sample) &&
    -
    859  buffer->ReadWriteChild(&sample_to_chunk));
    -
    860 
    -
    861  if (buffer->Reading()) {
    -
    862  BoxReader* reader = buffer->reader();
    -
    863  DCHECK(reader);
    +
    727 uint32_t SampleSize::ComputeSizeInternal() {
    +
    728  return HeaderSize() + sizeof(sample_size) + sizeof(sample_count) +
    +
    729  (sample_size == 0 ? sizeof(uint32_t) * sizes.size() : 0);
    +
    730 }
    +
    731 
    +
    732 CompactSampleSize::CompactSampleSize() : field_size(0) {}
    +
    733 CompactSampleSize::~CompactSampleSize() {}
    +
    734 FourCC CompactSampleSize::BoxType() const { return FOURCC_STZ2; }
    +
    735 
    +
    736 bool CompactSampleSize::ReadWriteInternal(BoxBuffer* buffer) {
    +
    737  uint32_t sample_count = sizes.size();
    +
    738  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    739  buffer->IgnoreBytes(3) &&
    +
    740  buffer->ReadWriteUInt8(&field_size) &&
    +
    741  buffer->ReadWriteUInt32(&sample_count));
    +
    742 
    +
    743  // Reserve one more entry if field size is 4 bits.
    +
    744  sizes.resize(sample_count + (field_size == 4 ? 1 : 0), 0);
    +
    745  switch (field_size) {
    +
    746  case 4:
    +
    747  for (uint32_t i = 0; i < sample_count; i += 2) {
    +
    748  if (buffer->Reading()) {
    +
    749  uint8_t size = 0;
    +
    750  RCHECK(buffer->ReadWriteUInt8(&size));
    +
    751  sizes[i] = size >> 4;
    +
    752  sizes[i + 1] = size & 0x0F;
    +
    753  } else {
    +
    754  DCHECK_LT(sizes[i], 16u);
    +
    755  DCHECK_LT(sizes[i + 1], 16u);
    +
    756  uint8_t size = (sizes[i] << 4) | sizes[i + 1];
    +
    757  RCHECK(buffer->ReadWriteUInt8(&size));
    +
    758  }
    +
    759  }
    +
    760  break;
    +
    761  case 8:
    +
    762  for (uint32_t i = 0; i < sample_count; ++i) {
    +
    763  uint8_t size = sizes[i];
    +
    764  RCHECK(buffer->ReadWriteUInt8(&size));
    +
    765  sizes[i] = size;
    +
    766  }
    +
    767  break;
    +
    768  case 16:
    +
    769  for (uint32_t i = 0; i < sample_count; ++i) {
    +
    770  uint16_t size = sizes[i];
    +
    771  RCHECK(buffer->ReadWriteUInt16(&size));
    +
    772  sizes[i] = size;
    +
    773  }
    +
    774  break;
    +
    775  default:
    +
    776  RCHECK(false);
    +
    777  }
    +
    778  sizes.resize(sample_count);
    +
    779  return true;
    +
    780 }
    +
    781 
    +
    782 uint32_t CompactSampleSize::ComputeSizeInternal() {
    +
    783  return HeaderSize() + sizeof(uint32_t) + sizeof(uint32_t) +
    +
    784  (field_size * sizes.size() + 7) / 8;
    +
    785 }
    +
    786 
    +
    787 ChunkOffset::ChunkOffset() {}
    +
    788 ChunkOffset::~ChunkOffset() {}
    +
    789 FourCC ChunkOffset::BoxType() const { return FOURCC_STCO; }
    +
    790 
    +
    791 bool ChunkOffset::ReadWriteInternal(BoxBuffer* buffer) {
    +
    792  uint32_t count = offsets.size();
    +
    793  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    794  buffer->ReadWriteUInt32(&count));
    +
    795 
    +
    796  offsets.resize(count);
    +
    797  for (uint32_t i = 0; i < count; ++i)
    +
    798  RCHECK(buffer->ReadWriteUInt64NBytes(&offsets[i], sizeof(uint32_t)));
    +
    799  return true;
    +
    800 }
    +
    801 
    +
    802 uint32_t ChunkOffset::ComputeSizeInternal() {
    +
    803  return HeaderSize() + sizeof(uint32_t) + sizeof(uint32_t) * offsets.size();
    +
    804 }
    +
    805 
    +
    806 ChunkLargeOffset::ChunkLargeOffset() {}
    +
    807 ChunkLargeOffset::~ChunkLargeOffset() {}
    +
    808 FourCC ChunkLargeOffset::BoxType() const { return FOURCC_CO64; }
    +
    809 
    +
    810 bool ChunkLargeOffset::ReadWriteInternal(BoxBuffer* buffer) {
    +
    811  uint32_t count = offsets.size();
    +
    812 
    +
    813  if (!buffer->Reading()) {
    +
    814  // Switch to ChunkOffset box if it is able to fit in 32 bits offset.
    +
    815  if (count == 0 || IsFitIn32Bits(offsets[count - 1])) {
    +
    816  ChunkOffset stco;
    +
    817  stco.offsets.swap(offsets);
    +
    818  DCHECK(buffer->writer());
    +
    819  stco.Write(buffer->writer());
    +
    820  stco.offsets.swap(offsets);
    +
    821  return true;
    +
    822  }
    +
    823  }
    +
    824 
    +
    825  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    826  buffer->ReadWriteUInt32(&count));
    +
    827 
    +
    828  offsets.resize(count);
    +
    829  for (uint32_t i = 0; i < count; ++i)
    +
    830  RCHECK(buffer->ReadWriteUInt64(&offsets[i]));
    +
    831  return true;
    +
    832 }
    +
    833 
    +
    834 uint32_t ChunkLargeOffset::ComputeSizeInternal() {
    +
    835  uint32_t count = offsets.size();
    +
    836  int use_large_offset =
    +
    837  (count > 0 && !IsFitIn32Bits(offsets[count - 1])) ? 1 : 0;
    +
    838  return HeaderSize() + sizeof(count) +
    +
    839  sizeof(uint32_t) * (1 + use_large_offset) * offsets.size();
    +
    840 }
    +
    841 
    +
    842 SyncSample::SyncSample() {}
    +
    843 SyncSample::~SyncSample() {}
    +
    844 FourCC SyncSample::BoxType() const { return FOURCC_STSS; }
    +
    845 
    +
    846 bool SyncSample::ReadWriteInternal(BoxBuffer* buffer) {
    +
    847  uint32_t count = sample_number.size();
    +
    848  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    849  buffer->ReadWriteUInt32(&count));
    +
    850 
    +
    851  sample_number.resize(count);
    +
    852  for (uint32_t i = 0; i < count; ++i)
    +
    853  RCHECK(buffer->ReadWriteUInt32(&sample_number[i]));
    +
    854  return true;
    +
    855 }
    +
    856 
    +
    857 uint32_t SyncSample::ComputeSizeInternal() {
    +
    858  // Sync sample box is optional. Skip it if it is empty.
    +
    859  if (sample_number.empty())
    +
    860  return 0;
    +
    861  return HeaderSize() + sizeof(uint32_t) +
    +
    862  sizeof(uint32_t) * sample_number.size();
    +
    863 }
    864 
    -
    865  // Either SampleSize or CompactSampleSize must present.
    -
    866  if (reader->ChildExist(&sample_size)) {
    -
    867  RCHECK(reader->ReadChild(&sample_size));
    -
    868  } else {
    -
    869  CompactSampleSize compact_sample_size;
    -
    870  RCHECK(reader->ReadChild(&compact_sample_size));
    -
    871  sample_size.sample_size = 0;
    -
    872  sample_size.sample_count = compact_sample_size.sizes.size();
    -
    873  sample_size.sizes.swap(compact_sample_size.sizes);
    -
    874  }
    -
    875 
    -
    876  // Either ChunkOffset or ChunkLargeOffset must present.
    -
    877  if (reader->ChildExist(&chunk_large_offset)) {
    -
    878  RCHECK(reader->ReadChild(&chunk_large_offset));
    -
    879  } else {
    -
    880  ChunkOffset chunk_offset;
    -
    881  RCHECK(reader->ReadChild(&chunk_offset));
    -
    882  chunk_large_offset.offsets.swap(chunk_offset.offsets);
    -
    883  }
    -
    884  } else {
    -
    885  RCHECK(buffer->ReadWriteChild(&sample_size) &&
    -
    886  buffer->ReadWriteChild(&chunk_large_offset));
    -
    887  }
    -
    888  RCHECK(buffer->TryReadWriteChild(&sync_sample));
    -
    889  return true;
    -
    890 }
    +
    865 SampleTable::SampleTable() {}
    +
    866 SampleTable::~SampleTable() {}
    +
    867 FourCC SampleTable::BoxType() const { return FOURCC_STBL; }
    +
    868 
    +
    869 bool SampleTable::ReadWriteInternal(BoxBuffer* buffer) {
    +
    870  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    871  buffer->PrepareChildren() &&
    +
    872  buffer->ReadWriteChild(&description) &&
    +
    873  buffer->ReadWriteChild(&decoding_time_to_sample) &&
    +
    874  buffer->TryReadWriteChild(&composition_time_to_sample) &&
    +
    875  buffer->ReadWriteChild(&sample_to_chunk));
    +
    876 
    +
    877  if (buffer->Reading()) {
    +
    878  BoxReader* reader = buffer->reader();
    +
    879  DCHECK(reader);
    +
    880 
    +
    881  // Either SampleSize or CompactSampleSize must present.
    +
    882  if (reader->ChildExist(&sample_size)) {
    +
    883  RCHECK(reader->ReadChild(&sample_size));
    +
    884  } else {
    +
    885  CompactSampleSize compact_sample_size;
    +
    886  RCHECK(reader->ReadChild(&compact_sample_size));
    +
    887  sample_size.sample_size = 0;
    +
    888  sample_size.sample_count = compact_sample_size.sizes.size();
    +
    889  sample_size.sizes.swap(compact_sample_size.sizes);
    +
    890  }
    891 
    -
    892 uint32_t SampleTable::ComputeSizeInternal() {
    -
    893  return HeaderSize() + description.ComputeSize() +
    -
    894  decoding_time_to_sample.ComputeSize() +
    -
    895  composition_time_to_sample.ComputeSize() +
    -
    896  sample_to_chunk.ComputeSize() + sample_size.ComputeSize() +
    -
    897  chunk_large_offset.ComputeSize() + sync_sample.ComputeSize();
    -
    898 }
    -
    899 
    -
    900 EditList::EditList() {}
    -
    901 EditList::~EditList() {}
    -
    902 FourCC EditList::BoxType() const { return FOURCC_ELST; }
    -
    903 
    -
    904 bool EditList::ReadWriteInternal(BoxBuffer* buffer) {
    -
    905  uint32_t count = edits.size();
    -
    906  RCHECK(ReadWriteHeaderInternal(buffer) && buffer->ReadWriteUInt32(&count));
    -
    907  edits.resize(count);
    -
    908 
    -
    909  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    -
    910  for (uint32_t i = 0; i < count; ++i) {
    -
    911  RCHECK(
    -
    912  buffer->ReadWriteUInt64NBytes(&edits[i].segment_duration, num_bytes) &&
    -
    913  buffer->ReadWriteInt64NBytes(&edits[i].media_time, num_bytes) &&
    -
    914  buffer->ReadWriteInt16(&edits[i].media_rate_integer) &&
    -
    915  buffer->ReadWriteInt16(&edits[i].media_rate_fraction));
    -
    916  }
    -
    917  return true;
    -
    918 }
    +
    892  // Either ChunkOffset or ChunkLargeOffset must present.
    +
    893  if (reader->ChildExist(&chunk_large_offset)) {
    +
    894  RCHECK(reader->ReadChild(&chunk_large_offset));
    +
    895  } else {
    +
    896  ChunkOffset chunk_offset;
    +
    897  RCHECK(reader->ReadChild(&chunk_offset));
    +
    898  chunk_large_offset.offsets.swap(chunk_offset.offsets);
    +
    899  }
    +
    900  } else {
    +
    901  RCHECK(buffer->ReadWriteChild(&sample_size) &&
    +
    902  buffer->ReadWriteChild(&chunk_large_offset));
    +
    903  }
    +
    904  RCHECK(buffer->TryReadWriteChild(&sync_sample));
    +
    905  return true;
    +
    906 }
    +
    907 
    +
    908 uint32_t SampleTable::ComputeSizeInternal() {
    +
    909  return HeaderSize() + description.ComputeSize() +
    +
    910  decoding_time_to_sample.ComputeSize() +
    +
    911  composition_time_to_sample.ComputeSize() +
    +
    912  sample_to_chunk.ComputeSize() + sample_size.ComputeSize() +
    +
    913  chunk_large_offset.ComputeSize() + sync_sample.ComputeSize();
    +
    914 }
    +
    915 
    +
    916 EditList::EditList() {}
    +
    917 EditList::~EditList() {}
    +
    918 FourCC EditList::BoxType() const { return FOURCC_ELST; }
    919 
    -
    920 uint32_t EditList::ComputeSizeInternal() {
    -
    921  // EditList box is optional. Skip it if it is empty.
    -
    922  if (edits.empty())
    -
    923  return 0;
    +
    920 bool EditList::ReadWriteInternal(BoxBuffer* buffer) {
    +
    921  uint32_t count = edits.size();
    +
    922  RCHECK(ReadWriteHeaderInternal(buffer) && buffer->ReadWriteUInt32(&count));
    +
    923  edits.resize(count);
    924 
    -
    925  version = 0;
    -
    926  for (uint32_t i = 0; i < edits.size(); ++i) {
    -
    927  if (!IsFitIn32Bits(edits[i].segment_duration, edits[i].media_time)) {
    -
    928  version = 1;
    -
    929  break;
    -
    930  }
    -
    931  }
    -
    932  return HeaderSize() + sizeof(uint32_t) +
    -
    933  (sizeof(uint32_t) * (1 + version) * 2 + sizeof(int16_t) * 2) *
    -
    934  edits.size();
    -
    935 }
    -
    936 
    -
    937 Edit::Edit() {}
    -
    938 Edit::~Edit() {}
    -
    939 FourCC Edit::BoxType() const { return FOURCC_EDTS; }
    +
    925  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    +
    926  for (uint32_t i = 0; i < count; ++i) {
    +
    927  RCHECK(
    +
    928  buffer->ReadWriteUInt64NBytes(&edits[i].segment_duration, num_bytes) &&
    +
    929  buffer->ReadWriteInt64NBytes(&edits[i].media_time, num_bytes) &&
    +
    930  buffer->ReadWriteInt16(&edits[i].media_rate_integer) &&
    +
    931  buffer->ReadWriteInt16(&edits[i].media_rate_fraction));
    +
    932  }
    +
    933  return true;
    +
    934 }
    +
    935 
    +
    936 uint32_t EditList::ComputeSizeInternal() {
    +
    937  // EditList box is optional. Skip it if it is empty.
    +
    938  if (edits.empty())
    +
    939  return 0;
    940 
    -
    941 bool Edit::ReadWriteInternal(BoxBuffer* buffer) {
    -
    942  return ReadWriteHeaderInternal(buffer) &&
    -
    943  buffer->PrepareChildren() &&
    -
    944  buffer->ReadWriteChild(&list);
    -
    945 }
    -
    946 
    -
    947 uint32_t Edit::ComputeSizeInternal() {
    -
    948  // Edit box is optional. Skip it if it is empty.
    -
    949  if (list.edits.empty())
    -
    950  return 0;
    -
    951  return HeaderSize() + list.ComputeSize();
    -
    952 }
    -
    953 
    -
    954 HandlerReference::HandlerReference() : type(kInvalid) {}
    -
    955 HandlerReference::~HandlerReference() {}
    -
    956 FourCC HandlerReference::BoxType() const { return FOURCC_HDLR; }
    -
    957 
    -
    958 bool HandlerReference::ReadWriteInternal(BoxBuffer* buffer) {
    -
    959  FourCC hdlr_type = FOURCC_NULL;
    -
    960  std::vector<uint8_t> handler_name;
    -
    961  if (!buffer->Reading()) {
    -
    962  if (type == kVideo) {
    -
    963  hdlr_type = FOURCC_VIDE;
    -
    964  handler_name.assign(kVideoHandlerName,
    -
    965  kVideoHandlerName + arraysize(kVideoHandlerName));
    -
    966  } else if (type == kAudio) {
    -
    967  hdlr_type = FOURCC_SOUN;
    -
    968  handler_name.assign(kAudioHandlerName,
    -
    969  kAudioHandlerName + arraysize(kAudioHandlerName));
    -
    970  } else if (type == kText) {
    -
    971  hdlr_type = FOURCC_TEXT;
    -
    972  handler_name.assign(kTextHandlerName,
    -
    973  kTextHandlerName + arraysize(kTextHandlerName));
    -
    974  } else {
    -
    975  NOTIMPLEMENTED();
    -
    976  return false;
    -
    977  }
    -
    978  }
    -
    979  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    980  buffer->IgnoreBytes(4) && // predefined.
    -
    981  buffer->ReadWriteFourCC(&hdlr_type));
    -
    982  if (buffer->Reading()) {
    -
    983  // Note: for reading, remaining fields in box ignored.
    -
    984  if (hdlr_type == FOURCC_VIDE) {
    -
    985  type = kVideo;
    -
    986  } else if (hdlr_type == FOURCC_SOUN) {
    -
    987  type = kAudio;
    -
    988  } else {
    -
    989  type = kInvalid;
    -
    990  }
    -
    991  } else {
    -
    992  RCHECK(buffer->IgnoreBytes(12) && // reserved.
    -
    993  buffer->ReadWriteVector(&handler_name, handler_name.size()));
    +
    941  version = 0;
    +
    942  for (uint32_t i = 0; i < edits.size(); ++i) {
    +
    943  if (!IsFitIn32Bits(edits[i].segment_duration, edits[i].media_time)) {
    +
    944  version = 1;
    +
    945  break;
    +
    946  }
    +
    947  }
    +
    948  return HeaderSize() + sizeof(uint32_t) +
    +
    949  (sizeof(uint32_t) * (1 + version) * 2 + sizeof(int16_t) * 2) *
    +
    950  edits.size();
    +
    951 }
    +
    952 
    +
    953 Edit::Edit() {}
    +
    954 Edit::~Edit() {}
    +
    955 FourCC Edit::BoxType() const { return FOURCC_EDTS; }
    +
    956 
    +
    957 bool Edit::ReadWriteInternal(BoxBuffer* buffer) {
    +
    958  return ReadWriteHeaderInternal(buffer) &&
    +
    959  buffer->PrepareChildren() &&
    +
    960  buffer->ReadWriteChild(&list);
    +
    961 }
    +
    962 
    +
    963 uint32_t Edit::ComputeSizeInternal() {
    +
    964  // Edit box is optional. Skip it if it is empty.
    +
    965  if (list.edits.empty())
    +
    966  return 0;
    +
    967  return HeaderSize() + list.ComputeSize();
    +
    968 }
    +
    969 
    +
    970 HandlerReference::HandlerReference() : type(kInvalid) {}
    +
    971 HandlerReference::~HandlerReference() {}
    +
    972 FourCC HandlerReference::BoxType() const { return FOURCC_HDLR; }
    +
    973 
    +
    974 bool HandlerReference::ReadWriteInternal(BoxBuffer* buffer) {
    +
    975  FourCC hdlr_type = FOURCC_NULL;
    +
    976  std::vector<uint8_t> handler_name;
    +
    977  if (!buffer->Reading()) {
    +
    978  if (type == kVideo) {
    +
    979  hdlr_type = FOURCC_VIDE;
    +
    980  handler_name.assign(kVideoHandlerName,
    +
    981  kVideoHandlerName + arraysize(kVideoHandlerName));
    +
    982  } else if (type == kAudio) {
    +
    983  hdlr_type = FOURCC_SOUN;
    +
    984  handler_name.assign(kAudioHandlerName,
    +
    985  kAudioHandlerName + arraysize(kAudioHandlerName));
    +
    986  } else if (type == kText) {
    +
    987  hdlr_type = FOURCC_TEXT;
    +
    988  handler_name.assign(kTextHandlerName,
    +
    989  kTextHandlerName + arraysize(kTextHandlerName));
    +
    990  } else {
    +
    991  NOTIMPLEMENTED();
    +
    992  return false;
    +
    993  }
    994  }
    -
    995  return true;
    -
    996 }
    -
    997 
    -
    998 uint32_t HandlerReference::ComputeSizeInternal() {
    -
    999  uint32_t box_size = HeaderSize() + kFourCCSize + 16; // 16 bytes Reserved
    -
    1000  if (type == kVideo) {
    -
    1001  box_size += sizeof(kVideoHandlerName);
    -
    1002  } else if (type == kAudio) {
    -
    1003  box_size += sizeof(kAudioHandlerName);
    -
    1004  } else {
    -
    1005  box_size += sizeof(kTextHandlerName);
    -
    1006  }
    -
    1007  return box_size;
    -
    1008 }
    -
    1009 
    -
    1010 CodecConfigurationRecord::CodecConfigurationRecord() : box_type(FOURCC_NULL) {}
    -
    1011 CodecConfigurationRecord::~CodecConfigurationRecord() {}
    - -
    1013  // CodecConfigurationRecord should be parsed according to format recovered in
    -
    1014  // VideoSampleEntry. |box_type| is determined dynamically there.
    -
    1015  return box_type;
    -
    1016 }
    -
    1017 
    -
    1018 bool CodecConfigurationRecord::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1019  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    1020  if (buffer->Reading()) {
    -
    1021  RCHECK(buffer->ReadWriteVector(&data, buffer->BytesLeft()));
    -
    1022  } else {
    -
    1023  RCHECK(buffer->ReadWriteVector(&data, data.size()));
    -
    1024  }
    -
    1025  return true;
    -
    1026 }
    -
    1027 
    -
    1028 uint32_t CodecConfigurationRecord::ComputeSizeInternal() {
    -
    1029  if (data.empty())
    -
    1030  return 0;
    -
    1031  return HeaderSize() + data.size();
    +
    995  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    996  buffer->IgnoreBytes(4) && // predefined.
    +
    997  buffer->ReadWriteFourCC(&hdlr_type));
    +
    998  if (buffer->Reading()) {
    +
    999  // Note: for reading, remaining fields in box ignored.
    +
    1000  if (hdlr_type == FOURCC_VIDE) {
    +
    1001  type = kVideo;
    +
    1002  } else if (hdlr_type == FOURCC_SOUN) {
    +
    1003  type = kAudio;
    +
    1004  } else {
    +
    1005  type = kInvalid;
    +
    1006  }
    +
    1007  } else {
    +
    1008  RCHECK(buffer->IgnoreBytes(12) && // reserved.
    +
    1009  buffer->ReadWriteVector(&handler_name, handler_name.size()));
    +
    1010  }
    +
    1011  return true;
    +
    1012 }
    +
    1013 
    +
    1014 uint32_t HandlerReference::ComputeSizeInternal() {
    +
    1015  uint32_t box_size = HeaderSize() + kFourCCSize + 16; // 16 bytes Reserved
    +
    1016  if (type == kVideo) {
    +
    1017  box_size += sizeof(kVideoHandlerName);
    +
    1018  } else if (type == kAudio) {
    +
    1019  box_size += sizeof(kAudioHandlerName);
    +
    1020  } else {
    +
    1021  box_size += sizeof(kTextHandlerName);
    +
    1022  }
    +
    1023  return box_size;
    +
    1024 }
    +
    1025 
    +
    1026 CodecConfigurationRecord::CodecConfigurationRecord() : box_type(FOURCC_NULL) {}
    +
    1027 CodecConfigurationRecord::~CodecConfigurationRecord() {}
    + +
    1029  // CodecConfigurationRecord should be parsed according to format recovered in
    +
    1030  // VideoSampleEntry. |box_type| is determined dynamically there.
    +
    1031  return box_type;
    1032 }
    1033 
    -
    1034 PixelAspectRatio::PixelAspectRatio() : h_spacing(0), v_spacing(0) {}
    -
    1035 PixelAspectRatio::~PixelAspectRatio() {}
    -
    1036 FourCC PixelAspectRatio::BoxType() const { return FOURCC_PASP; }
    -
    1037 
    -
    1038 bool PixelAspectRatio::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1039  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    1040  buffer->ReadWriteUInt32(&h_spacing) &&
    -
    1041  buffer->ReadWriteUInt32(&v_spacing));
    -
    1042  return true;
    -
    1043 }
    -
    1044 
    -
    1045 uint32_t PixelAspectRatio::ComputeSizeInternal() {
    -
    1046  // This box is optional. Skip it if it is not initialized.
    -
    1047  if (h_spacing == 0 && v_spacing == 0)
    -
    1048  return 0;
    -
    1049  // Both values must be positive.
    -
    1050  DCHECK(h_spacing != 0 && v_spacing != 0);
    -
    1051  return HeaderSize() + sizeof(h_spacing) + sizeof(v_spacing);
    -
    1052 }
    +
    1034 bool CodecConfigurationRecord::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1035  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    1036  if (buffer->Reading()) {
    +
    1037  RCHECK(buffer->ReadWriteVector(&data, buffer->BytesLeft()));
    +
    1038  } else {
    +
    1039  RCHECK(buffer->ReadWriteVector(&data, data.size()));
    +
    1040  }
    +
    1041  return true;
    +
    1042 }
    +
    1043 
    +
    1044 uint32_t CodecConfigurationRecord::ComputeSizeInternal() {
    +
    1045  if (data.empty())
    +
    1046  return 0;
    +
    1047  return HeaderSize() + data.size();
    +
    1048 }
    +
    1049 
    +
    1050 PixelAspectRatio::PixelAspectRatio() : h_spacing(0), v_spacing(0) {}
    +
    1051 PixelAspectRatio::~PixelAspectRatio() {}
    +
    1052 FourCC PixelAspectRatio::BoxType() const { return FOURCC_PASP; }
    1053 
    -
    1054 VideoSampleEntry::VideoSampleEntry()
    -
    1055  : format(FOURCC_NULL), data_reference_index(1), width(0), height(0) {}
    -
    1056 
    -
    1057 VideoSampleEntry::~VideoSampleEntry() {}
    - -
    1059  if (format == FOURCC_NULL) {
    -
    1060  LOG(ERROR) << "VideoSampleEntry should be parsed according to the "
    -
    1061  << "handler type recovered in its Media ancestor.";
    -
    1062  }
    -
    1063  return format;
    -
    1064 }
    -
    1065 
    -
    1066 bool VideoSampleEntry::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1067  std::vector<uint8_t> compressor_name;
    -
    1068  if (buffer->Reading()) {
    -
    1069  DCHECK(buffer->reader());
    -
    1070  format = buffer->reader()->type();
    -
    1071  } else {
    -
    1072  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    1073 
    -
    1074  const FourCC actual_format = GetActualFormat();
    -
    1075  switch (actual_format) {
    -
    1076  case FOURCC_AVC1:
    -
    1077  compressor_name.assign(
    -
    1078  kAvcCompressorName,
    -
    1079  kAvcCompressorName + arraysize(kAvcCompressorName));
    -
    1080  break;
    -
    1081  case FOURCC_HEV1:
    -
    1082  case FOURCC_HVC1:
    -
    1083  compressor_name.assign(
    -
    1084  kHevcCompressorName,
    -
    1085  kHevcCompressorName + arraysize(kHevcCompressorName));
    -
    1086  break;
    -
    1087  case FOURCC_VP08:
    -
    1088  case FOURCC_VP09:
    -
    1089  case FOURCC_VP10:
    -
    1090  compressor_name.assign(
    -
    1091  kVpcCompressorName,
    -
    1092  kVpcCompressorName + arraysize(kVpcCompressorName));
    -
    1093  break;
    -
    1094  default:
    -
    1095  LOG(ERROR) << FourCCToString(actual_format) << " is not supported.";
    -
    1096  return false;
    -
    1097  }
    -
    1098  compressor_name.resize(kCompressorNameSize);
    -
    1099  }
    -
    1100 
    -
    1101  uint32_t video_resolution = kVideoResolution;
    -
    1102  uint16_t video_frame_count = kVideoFrameCount;
    -
    1103  uint16_t video_depth = kVideoDepth;
    -
    1104  int16_t predefined = -1;
    -
    1105  RCHECK(buffer->IgnoreBytes(6) && // reserved.
    -
    1106  buffer->ReadWriteUInt16(&data_reference_index) &&
    -
    1107  buffer->IgnoreBytes(16) && // predefined 0.
    -
    1108  buffer->ReadWriteUInt16(&width) &&
    -
    1109  buffer->ReadWriteUInt16(&height) &&
    -
    1110  buffer->ReadWriteUInt32(&video_resolution) &&
    -
    1111  buffer->ReadWriteUInt32(&video_resolution) &&
    -
    1112  buffer->IgnoreBytes(4) && // reserved.
    -
    1113  buffer->ReadWriteUInt16(&video_frame_count) &&
    -
    1114  buffer->ReadWriteVector(&compressor_name, kCompressorNameSize) &&
    -
    1115  buffer->ReadWriteUInt16(&video_depth) &&
    -
    1116  buffer->ReadWriteInt16(&predefined));
    -
    1117 
    -
    1118  RCHECK(buffer->PrepareChildren());
    -
    1119 
    -
    1120  if (format == FOURCC_ENCV) {
    -
    1121  if (buffer->Reading()) {
    -
    1122  // Continue scanning until a recognized protection scheme is found,
    -
    1123  // or until we run out of protection schemes.
    -
    1124  while (sinf.type.type != FOURCC_CENC) {
    -
    1125  if (!buffer->ReadWriteChild(&sinf))
    -
    1126  return false;
    -
    1127  }
    -
    1128  } else {
    -
    1129  RCHECK(buffer->ReadWriteChild(&sinf));
    -
    1130  }
    -
    1131  }
    -
    1132 
    -
    1133  const FourCC actual_format = GetActualFormat();
    -
    1134  switch (actual_format) {
    -
    1135  case FOURCC_AVC1:
    -
    1136  codec_config_record.box_type = FOURCC_AVCC;
    -
    1137  break;
    -
    1138  case FOURCC_HEV1:
    -
    1139  case FOURCC_HVC1:
    -
    1140  codec_config_record.box_type = FOURCC_HVCC;
    -
    1141  break;
    -
    1142  case FOURCC_VP08:
    -
    1143  case FOURCC_VP09:
    -
    1144  case FOURCC_VP10:
    -
    1145  codec_config_record.box_type = FOURCC_VPCC;
    -
    1146  break;
    -
    1147  default:
    -
    1148  LOG(ERROR) << FourCCToString(actual_format) << " is not supported.";
    -
    1149  return false;
    -
    1150  }
    -
    1151  RCHECK(buffer->ReadWriteChild(&codec_config_record));
    -
    1152  RCHECK(buffer->TryReadWriteChild(&pixel_aspect));
    -
    1153  return true;
    -
    1154 }
    -
    1155 
    -
    1156 uint32_t VideoSampleEntry::ComputeSizeInternal() {
    -
    1157  return HeaderSize() + sizeof(data_reference_index) + sizeof(width) +
    -
    1158  sizeof(height) + sizeof(kVideoResolution) * 2 +
    -
    1159  sizeof(kVideoFrameCount) + sizeof(kVideoDepth) +
    -
    1160  pixel_aspect.ComputeSize() + sinf.ComputeSize() +
    -
    1161  codec_config_record.ComputeSize() + kCompressorNameSize + 6 + 4 + 16 +
    -
    1162  2; // 6 + 4 bytes reserved, 16 + 2 bytes predefined.
    -
    1163 }
    -
    1164 
    -
    1165 ElementaryStreamDescriptor::ElementaryStreamDescriptor() {}
    -
    1166 ElementaryStreamDescriptor::~ElementaryStreamDescriptor() {}
    -
    1167 FourCC ElementaryStreamDescriptor::BoxType() const { return FOURCC_ESDS; }
    -
    1168 
    -
    1169 bool ElementaryStreamDescriptor::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1170  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    1171  if (buffer->Reading()) {
    -
    1172  std::vector<uint8_t> data;
    -
    1173  RCHECK(buffer->ReadWriteVector(&data, buffer->BytesLeft()));
    -
    1174  RCHECK(es_descriptor.Parse(data));
    -
    1175  if (es_descriptor.IsAAC()) {
    -
    1176  RCHECK(aac_audio_specific_config.Parse(
    -
    1177  es_descriptor.decoder_specific_info()));
    -
    1178  }
    -
    1179  } else {
    -
    1180  DCHECK(buffer->writer());
    -
    1181  es_descriptor.Write(buffer->writer());
    -
    1182  }
    -
    1183  return true;
    -
    1184 }
    -
    1185 
    -
    1186 uint32_t ElementaryStreamDescriptor::ComputeSizeInternal() {
    -
    1187  // This box is optional. Skip it if not initialized.
    -
    1188  if (es_descriptor.object_type() == kForbidden)
    -
    1189  return 0;
    -
    1190  return HeaderSize() + es_descriptor.ComputeSize();
    -
    1191 }
    -
    1192 
    -
    1193 DTSSpecific::DTSSpecific() {}
    -
    1194 DTSSpecific::~DTSSpecific() {}
    -
    1195 FourCC DTSSpecific::BoxType() const { return FOURCC_DDTS; }
    -
    1196 
    -
    1197 bool DTSSpecific::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1198  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    1199 
    -
    1200  if (buffer->Reading()) {
    -
    1201  RCHECK(
    -
    1202  buffer->ReadWriteVector(&data, buffer->Size() - buffer->Pos()));
    -
    1203  } else {
    -
    1204  RCHECK(buffer->ReadWriteVector(&data, data.size()));
    -
    1205  }
    -
    1206  return true;
    +
    1054 bool PixelAspectRatio::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1055  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    1056  buffer->ReadWriteUInt32(&h_spacing) &&
    +
    1057  buffer->ReadWriteUInt32(&v_spacing));
    +
    1058  return true;
    +
    1059 }
    +
    1060 
    +
    1061 uint32_t PixelAspectRatio::ComputeSizeInternal() {
    +
    1062  // This box is optional. Skip it if it is not initialized.
    +
    1063  if (h_spacing == 0 && v_spacing == 0)
    +
    1064  return 0;
    +
    1065  // Both values must be positive.
    +
    1066  DCHECK(h_spacing != 0 && v_spacing != 0);
    +
    1067  return HeaderSize() + sizeof(h_spacing) + sizeof(v_spacing);
    +
    1068 }
    +
    1069 
    +
    1070 VideoSampleEntry::VideoSampleEntry()
    +
    1071  : format(FOURCC_NULL), data_reference_index(1), width(0), height(0) {}
    +
    1072 
    +
    1073 VideoSampleEntry::~VideoSampleEntry() {}
    + +
    1075  if (format == FOURCC_NULL) {
    +
    1076  LOG(ERROR) << "VideoSampleEntry should be parsed according to the "
    +
    1077  << "handler type recovered in its Media ancestor.";
    +
    1078  }
    +
    1079  return format;
    +
    1080 }
    +
    1081 
    +
    1082 bool VideoSampleEntry::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1083  std::vector<uint8_t> compressor_name;
    +
    1084  if (buffer->Reading()) {
    +
    1085  DCHECK(buffer->reader());
    +
    1086  format = buffer->reader()->type();
    +
    1087  } else {
    +
    1088  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    1089 
    +
    1090  const FourCC actual_format = GetActualFormat();
    +
    1091  switch (actual_format) {
    +
    1092  case FOURCC_AVC1:
    +
    1093  compressor_name.assign(
    +
    1094  kAvcCompressorName,
    +
    1095  kAvcCompressorName + arraysize(kAvcCompressorName));
    +
    1096  break;
    +
    1097  case FOURCC_HEV1:
    +
    1098  case FOURCC_HVC1:
    +
    1099  compressor_name.assign(
    +
    1100  kHevcCompressorName,
    +
    1101  kHevcCompressorName + arraysize(kHevcCompressorName));
    +
    1102  break;
    +
    1103  case FOURCC_VP08:
    +
    1104  case FOURCC_VP09:
    +
    1105  case FOURCC_VP10:
    +
    1106  compressor_name.assign(
    +
    1107  kVpcCompressorName,
    +
    1108  kVpcCompressorName + arraysize(kVpcCompressorName));
    +
    1109  break;
    +
    1110  default:
    +
    1111  LOG(ERROR) << FourCCToString(actual_format) << " is not supported.";
    +
    1112  return false;
    +
    1113  }
    +
    1114  compressor_name.resize(kCompressorNameSize);
    +
    1115  }
    +
    1116 
    +
    1117  uint32_t video_resolution = kVideoResolution;
    +
    1118  uint16_t video_frame_count = kVideoFrameCount;
    +
    1119  uint16_t video_depth = kVideoDepth;
    +
    1120  int16_t predefined = -1;
    +
    1121  RCHECK(buffer->IgnoreBytes(6) && // reserved.
    +
    1122  buffer->ReadWriteUInt16(&data_reference_index) &&
    +
    1123  buffer->IgnoreBytes(16) && // predefined 0.
    +
    1124  buffer->ReadWriteUInt16(&width) &&
    +
    1125  buffer->ReadWriteUInt16(&height) &&
    +
    1126  buffer->ReadWriteUInt32(&video_resolution) &&
    +
    1127  buffer->ReadWriteUInt32(&video_resolution) &&
    +
    1128  buffer->IgnoreBytes(4) && // reserved.
    +
    1129  buffer->ReadWriteUInt16(&video_frame_count) &&
    +
    1130  buffer->ReadWriteVector(&compressor_name, kCompressorNameSize) &&
    +
    1131  buffer->ReadWriteUInt16(&video_depth) &&
    +
    1132  buffer->ReadWriteInt16(&predefined));
    +
    1133 
    +
    1134  RCHECK(buffer->PrepareChildren());
    +
    1135 
    +
    1136  if (format == FOURCC_ENCV) {
    +
    1137  if (buffer->Reading()) {
    +
    1138  // Continue scanning until a recognized protection scheme is found,
    +
    1139  // or until we run out of protection schemes.
    +
    1140  while (sinf.type.type != FOURCC_CENC) {
    +
    1141  if (!buffer->ReadWriteChild(&sinf))
    +
    1142  return false;
    +
    1143  }
    +
    1144  } else {
    +
    1145  RCHECK(buffer->ReadWriteChild(&sinf));
    +
    1146  }
    +
    1147  }
    +
    1148 
    +
    1149  const FourCC actual_format = GetActualFormat();
    +
    1150  switch (actual_format) {
    +
    1151  case FOURCC_AVC1:
    +
    1152  codec_config_record.box_type = FOURCC_AVCC;
    +
    1153  break;
    +
    1154  case FOURCC_HEV1:
    +
    1155  case FOURCC_HVC1:
    +
    1156  codec_config_record.box_type = FOURCC_HVCC;
    +
    1157  break;
    +
    1158  case FOURCC_VP08:
    +
    1159  case FOURCC_VP09:
    +
    1160  case FOURCC_VP10:
    +
    1161  codec_config_record.box_type = FOURCC_VPCC;
    +
    1162  break;
    +
    1163  default:
    +
    1164  LOG(ERROR) << FourCCToString(actual_format) << " is not supported.";
    +
    1165  return false;
    +
    1166  }
    +
    1167  RCHECK(buffer->ReadWriteChild(&codec_config_record));
    +
    1168  RCHECK(buffer->TryReadWriteChild(&pixel_aspect));
    +
    1169  return true;
    +
    1170 }
    +
    1171 
    +
    1172 uint32_t VideoSampleEntry::ComputeSizeInternal() {
    +
    1173  return HeaderSize() + sizeof(data_reference_index) + sizeof(width) +
    +
    1174  sizeof(height) + sizeof(kVideoResolution) * 2 +
    +
    1175  sizeof(kVideoFrameCount) + sizeof(kVideoDepth) +
    +
    1176  pixel_aspect.ComputeSize() + sinf.ComputeSize() +
    +
    1177  codec_config_record.ComputeSize() + kCompressorNameSize + 6 + 4 + 16 +
    +
    1178  2; // 6 + 4 bytes reserved, 16 + 2 bytes predefined.
    +
    1179 }
    +
    1180 
    +
    1181 ElementaryStreamDescriptor::ElementaryStreamDescriptor() {}
    +
    1182 ElementaryStreamDescriptor::~ElementaryStreamDescriptor() {}
    +
    1183 FourCC ElementaryStreamDescriptor::BoxType() const { return FOURCC_ESDS; }
    +
    1184 
    +
    1185 bool ElementaryStreamDescriptor::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1186  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    1187  if (buffer->Reading()) {
    +
    1188  std::vector<uint8_t> data;
    +
    1189  RCHECK(buffer->ReadWriteVector(&data, buffer->BytesLeft()));
    +
    1190  RCHECK(es_descriptor.Parse(data));
    +
    1191  if (es_descriptor.IsAAC()) {
    +
    1192  RCHECK(aac_audio_specific_config.Parse(
    +
    1193  es_descriptor.decoder_specific_info()));
    +
    1194  }
    +
    1195  } else {
    +
    1196  DCHECK(buffer->writer());
    +
    1197  es_descriptor.Write(buffer->writer());
    +
    1198  }
    +
    1199  return true;
    +
    1200 }
    +
    1201 
    +
    1202 uint32_t ElementaryStreamDescriptor::ComputeSizeInternal() {
    +
    1203  // This box is optional. Skip it if not initialized.
    +
    1204  if (es_descriptor.object_type() == kForbidden)
    +
    1205  return 0;
    +
    1206  return HeaderSize() + es_descriptor.ComputeSize();
    1207 }
    1208 
    -
    1209 uint32_t DTSSpecific::ComputeSizeInternal() {
    -
    1210  // This box is optional. Skip it if not initialized.
    -
    1211  if (data.size() == 0)
    -
    1212  return 0;
    -
    1213  return HeaderSize() + data.size();
    -
    1214 }
    -
    1215 
    -
    1216 AudioSampleEntry::AudioSampleEntry()
    -
    1217  : format(FOURCC_NULL),
    -
    1218  data_reference_index(1),
    -
    1219  channelcount(2),
    -
    1220  samplesize(16),
    -
    1221  samplerate(0) {}
    -
    1222 
    -
    1223 AudioSampleEntry::~AudioSampleEntry() {}
    -
    1224 
    - -
    1226  if (format == FOURCC_NULL) {
    -
    1227  LOG(ERROR) << "AudioSampleEntry should be parsed according to the "
    -
    1228  << "handler type recovered in its Media ancestor.";
    -
    1229  }
    -
    1230  return format;
    -
    1231 }
    -
    1232 
    -
    1233 bool AudioSampleEntry::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1234  if (buffer->Reading()) {
    -
    1235  DCHECK(buffer->reader());
    -
    1236  format = buffer->reader()->type();
    -
    1237  } else {
    -
    1238  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    1239  }
    -
    1240 
    -
    1241  // Convert from integer to 16.16 fixed point for writing.
    -
    1242  samplerate <<= 16;
    -
    1243  RCHECK(buffer->IgnoreBytes(6) && // reserved.
    -
    1244  buffer->ReadWriteUInt16(&data_reference_index) &&
    -
    1245  buffer->IgnoreBytes(8) && // reserved.
    -
    1246  buffer->ReadWriteUInt16(&channelcount) &&
    -
    1247  buffer->ReadWriteUInt16(&samplesize) &&
    -
    1248  buffer->IgnoreBytes(4) && // predefined.
    -
    1249  buffer->ReadWriteUInt32(&samplerate));
    -
    1250  // Convert from 16.16 fixed point to integer.
    -
    1251  samplerate >>= 16;
    -
    1252 
    -
    1253  RCHECK(buffer->PrepareChildren());
    -
    1254  if (format == FOURCC_ENCA) {
    -
    1255  if (buffer->Reading()) {
    -
    1256  // Continue scanning until a recognized protection scheme is found,
    -
    1257  // or until we run out of protection schemes.
    -
    1258  while (sinf.type.type != FOURCC_CENC) {
    -
    1259  if (!buffer->ReadWriteChild(&sinf))
    -
    1260  return false;
    -
    1261  }
    -
    1262  } else {
    -
    1263  RCHECK(buffer->ReadWriteChild(&sinf));
    -
    1264  }
    -
    1265  }
    -
    1266 
    -
    1267  RCHECK(buffer->TryReadWriteChild(&esds));
    -
    1268  RCHECK(buffer->TryReadWriteChild(&ddts));
    +
    1209 DTSSpecific::DTSSpecific()
    +
    1210  : sampling_frequency(0),
    +
    1211  max_bitrate(0),
    +
    1212  avg_bitrate(0),
    +
    1213  pcm_sample_depth(0) {}
    +
    1214 DTSSpecific::~DTSSpecific() {}
    +
    1215 FourCC DTSSpecific::BoxType() const { return FOURCC_DDTS; }
    +
    1216 
    +
    1217 bool DTSSpecific::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1218  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    1219  buffer->ReadWriteUInt32(&sampling_frequency) &&
    +
    1220  buffer->ReadWriteUInt32(&max_bitrate) &&
    +
    1221  buffer->ReadWriteUInt32(&avg_bitrate) &&
    +
    1222  buffer->ReadWriteUInt8(&pcm_sample_depth));
    +
    1223 
    +
    1224  if (buffer->Reading()) {
    +
    1225  RCHECK(buffer->ReadWriteVector(&extra_data, buffer->Size() - buffer->Pos()));
    +
    1226  } else {
    +
    1227  if (extra_data.empty()) {
    +
    1228  extra_data.assign(kDdtsExtraData,
    +
    1229  kDdtsExtraData + sizeof(kDdtsExtraData));
    +
    1230  }
    +
    1231  RCHECK(buffer->ReadWriteVector(&extra_data, extra_data.size()));
    +
    1232  }
    +
    1233  return true;
    +
    1234 }
    +
    1235 
    +
    1236 uint32_t DTSSpecific::ComputeSizeInternal() {
    +
    1237  // This box is optional. Skip it if not initialized.
    +
    1238  if (sampling_frequency == 0)
    +
    1239  return 0;
    +
    1240  return HeaderSize() + sizeof(sampling_frequency) + sizeof(max_bitrate) +
    +
    1241  sizeof(avg_bitrate) + sizeof(pcm_sample_depth) +
    +
    1242  sizeof(kDdtsExtraData);
    +
    1243 }
    +
    1244 
    +
    1245 AudioSampleEntry::AudioSampleEntry()
    +
    1246  : format(FOURCC_NULL),
    +
    1247  data_reference_index(1),
    +
    1248  channelcount(2),
    +
    1249  samplesize(16),
    +
    1250  samplerate(0) {}
    +
    1251 
    +
    1252 AudioSampleEntry::~AudioSampleEntry() {}
    +
    1253 
    + +
    1255  if (format == FOURCC_NULL) {
    +
    1256  LOG(ERROR) << "AudioSampleEntry should be parsed according to the "
    +
    1257  << "handler type recovered in its Media ancestor.";
    +
    1258  }
    +
    1259  return format;
    +
    1260 }
    +
    1261 
    +
    1262 bool AudioSampleEntry::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1263  if (buffer->Reading()) {
    +
    1264  DCHECK(buffer->reader());
    +
    1265  format = buffer->reader()->type();
    +
    1266  } else {
    +
    1267  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    1268  }
    1269 
    -
    1270  return true;
    -
    1271 }
    -
    1272 
    -
    1273 uint32_t AudioSampleEntry::ComputeSizeInternal() {
    -
    1274  return HeaderSize() + sizeof(data_reference_index) + sizeof(channelcount) +
    -
    1275  sizeof(samplesize) + sizeof(samplerate) + sinf.ComputeSize() +
    -
    1276  esds.ComputeSize() + ddts.ComputeSize() + 6 +
    -
    1277  8 + // 6 + 8 bytes reserved.
    -
    1278  4; // 4 bytes predefined.
    -
    1279 }
    -
    1280 
    -
    1281 WebVTTConfigurationBox::WebVTTConfigurationBox() {}
    -
    1282 WebVTTConfigurationBox::~WebVTTConfigurationBox() {}
    -
    1283 
    - -
    1285  return FOURCC_vttC;
    -
    1286 }
    -
    1287 
    -
    1288 bool WebVTTConfigurationBox::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1289  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    1290  return buffer->ReadWriteString(
    -
    1291  &config,
    -
    1292  buffer->Reading() ? buffer->BytesLeft() : config.size());
    -
    1293 }
    -
    1294 
    -
    1295 uint32_t WebVTTConfigurationBox::ComputeSizeInternal() {
    -
    1296  return HeaderSize() + config.size();
    -
    1297 }
    -
    1298 
    -
    1299 WebVTTSourceLabelBox::WebVTTSourceLabelBox() {}
    -
    1300 WebVTTSourceLabelBox::~WebVTTSourceLabelBox() {}
    -
    1301 
    - -
    1303  return FOURCC_vlab;
    -
    1304 }
    -
    1305 
    -
    1306 bool WebVTTSourceLabelBox::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1307  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    1308  return buffer->ReadWriteString(&source_label, buffer->Reading()
    -
    1309  ? buffer->BytesLeft()
    -
    1310  : source_label.size());
    -
    1311 }
    -
    1312 
    -
    1313 uint32_t WebVTTSourceLabelBox::ComputeSizeInternal() {
    -
    1314  if (source_label.empty())
    -
    1315  return 0;
    -
    1316  return HeaderSize() + source_label.size();
    -
    1317 }
    -
    1318 
    -
    1319 WVTTSampleEntry::WVTTSampleEntry() {}
    -
    1320 WVTTSampleEntry::~WVTTSampleEntry() {}
    -
    1321 
    - -
    1323  return FOURCC_wvtt;
    -
    1324 }
    -
    1325 
    -
    1326 bool WVTTSampleEntry::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1327  // TODO(rkuroiwa): Handle the optional MPEG4BitRateBox.
    -
    1328  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    1329  buffer->IgnoreBytes(6) && // reserved for SampleEntry.
    -
    1330  buffer->ReadWriteUInt16(&data_reference_index) &&
    -
    1331  buffer->PrepareChildren() &&
    -
    1332  buffer->ReadWriteChild(&config) &&
    -
    1333  buffer->ReadWriteChild(&label));
    -
    1334  return true;
    -
    1335 }
    -
    1336 
    -
    1337 uint32_t WVTTSampleEntry::ComputeSizeInternal() {
    -
    1338  // 6 for the (anonymous) reserved bytes for SampleEntry class.
    -
    1339  return HeaderSize() + 6 + sizeof(data_reference_index) +
    -
    1340  config.ComputeSize() + label.ComputeSize();
    -
    1341 }
    -
    1342 
    -
    1343 MediaHeader::MediaHeader()
    -
    1344  : creation_time(0), modification_time(0), timescale(0), duration(0) {
    -
    1345  language[0] = 0;
    -
    1346 }
    -
    1347 MediaHeader::~MediaHeader() {}
    -
    1348 FourCC MediaHeader::BoxType() const { return FOURCC_MDHD; }
    +
    1270  // Convert from integer to 16.16 fixed point for writing.
    +
    1271  samplerate <<= 16;
    +
    1272  RCHECK(buffer->IgnoreBytes(6) && // reserved.
    +
    1273  buffer->ReadWriteUInt16(&data_reference_index) &&
    +
    1274  buffer->IgnoreBytes(8) && // reserved.
    +
    1275  buffer->ReadWriteUInt16(&channelcount) &&
    +
    1276  buffer->ReadWriteUInt16(&samplesize) &&
    +
    1277  buffer->IgnoreBytes(4) && // predefined.
    +
    1278  buffer->ReadWriteUInt32(&samplerate));
    +
    1279  // Convert from 16.16 fixed point to integer.
    +
    1280  samplerate >>= 16;
    +
    1281 
    +
    1282  RCHECK(buffer->PrepareChildren());
    +
    1283  if (format == FOURCC_ENCA) {
    +
    1284  if (buffer->Reading()) {
    +
    1285  // Continue scanning until a recognized protection scheme is found,
    +
    1286  // or until we run out of protection schemes.
    +
    1287  while (sinf.type.type != FOURCC_CENC) {
    +
    1288  if (!buffer->ReadWriteChild(&sinf))
    +
    1289  return false;
    +
    1290  }
    +
    1291  } else {
    +
    1292  RCHECK(buffer->ReadWriteChild(&sinf));
    +
    1293  }
    +
    1294  }
    +
    1295 
    +
    1296  RCHECK(buffer->TryReadWriteChild(&esds));
    +
    1297  RCHECK(buffer->TryReadWriteChild(&ddts));
    +
    1298  return true;
    +
    1299 }
    +
    1300 
    +
    1301 uint32_t AudioSampleEntry::ComputeSizeInternal() {
    +
    1302  return HeaderSize() + sizeof(data_reference_index) + sizeof(channelcount) +
    +
    1303  sizeof(samplesize) + sizeof(samplerate) + sinf.ComputeSize() +
    +
    1304  esds.ComputeSize() + ddts.ComputeSize() + 6 +
    +
    1305  8 + // 6 + 8 bytes reserved.
    +
    1306  4; // 4 bytes predefined.
    +
    1307 }
    +
    1308 
    +
    1309 WebVTTConfigurationBox::WebVTTConfigurationBox() {}
    +
    1310 WebVTTConfigurationBox::~WebVTTConfigurationBox() {}
    +
    1311 
    + +
    1313  return FOURCC_vttC;
    +
    1314 }
    +
    1315 
    +
    1316 bool WebVTTConfigurationBox::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1317  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    1318  return buffer->ReadWriteString(
    +
    1319  &config,
    +
    1320  buffer->Reading() ? buffer->BytesLeft() : config.size());
    +
    1321 }
    +
    1322 
    +
    1323 uint32_t WebVTTConfigurationBox::ComputeSizeInternal() {
    +
    1324  return HeaderSize() + config.size();
    +
    1325 }
    +
    1326 
    +
    1327 WebVTTSourceLabelBox::WebVTTSourceLabelBox() {}
    +
    1328 WebVTTSourceLabelBox::~WebVTTSourceLabelBox() {}
    +
    1329 
    + +
    1331  return FOURCC_vlab;
    +
    1332 }
    +
    1333 
    +
    1334 bool WebVTTSourceLabelBox::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1335  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    1336  return buffer->ReadWriteString(&source_label, buffer->Reading()
    +
    1337  ? buffer->BytesLeft()
    +
    1338  : source_label.size());
    +
    1339 }
    +
    1340 
    +
    1341 uint32_t WebVTTSourceLabelBox::ComputeSizeInternal() {
    +
    1342  if (source_label.empty())
    +
    1343  return 0;
    +
    1344  return HeaderSize() + source_label.size();
    +
    1345 }
    +
    1346 
    +
    1347 WVTTSampleEntry::WVTTSampleEntry() {}
    +
    1348 WVTTSampleEntry::~WVTTSampleEntry() {}
    1349 
    -
    1350 bool MediaHeader::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1351  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    1352 
    -
    1353  uint8_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    -
    1354  RCHECK(buffer->ReadWriteUInt64NBytes(&creation_time, num_bytes) &&
    -
    1355  buffer->ReadWriteUInt64NBytes(&modification_time, num_bytes) &&
    -
    1356  buffer->ReadWriteUInt32(&timescale) &&
    -
    1357  buffer->ReadWriteUInt64NBytes(&duration, num_bytes));
    -
    1358 
    -
    1359  if (buffer->Reading()) {
    -
    1360  // Read language codes into temp first then use BitReader to read the
    -
    1361  // values. ISO-639-2/T language code: unsigned int(5)[3] language (2 bytes).
    -
    1362  std::vector<uint8_t> temp;
    -
    1363  RCHECK(buffer->ReadWriteVector(&temp, 2));
    + +
    1351  return FOURCC_wvtt;
    +
    1352 }
    +
    1353 
    +
    1354 bool WVTTSampleEntry::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1355  // TODO(rkuroiwa): Handle the optional MPEG4BitRateBox.
    +
    1356  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    1357  buffer->IgnoreBytes(6) && // reserved for SampleEntry.
    +
    1358  buffer->ReadWriteUInt16(&data_reference_index) &&
    +
    1359  buffer->PrepareChildren() &&
    +
    1360  buffer->ReadWriteChild(&config) &&
    +
    1361  buffer->ReadWriteChild(&label));
    +
    1362  return true;
    +
    1363 }
    1364 
    -
    1365  BitReader bit_reader(&temp[0], 2);
    -
    1366  bit_reader.SkipBits(1);
    -
    1367  for (int i = 0; i < 3; ++i) {
    -
    1368  CHECK(bit_reader.ReadBits(5, &language[i]));
    -
    1369  language[i] += 0x60;
    -
    1370  }
    -
    1371  language[3] = '\0';
    -
    1372  } else {
    -
    1373  // Set up default language if it is not set.
    -
    1374  const char kUndefinedLanguage[] = "und";
    -
    1375  if (language[0] == 0)
    -
    1376  strcpy(language, kUndefinedLanguage);
    +
    1365 uint32_t WVTTSampleEntry::ComputeSizeInternal() {
    +
    1366  // 6 for the (anonymous) reserved bytes for SampleEntry class.
    +
    1367  return HeaderSize() + 6 + sizeof(data_reference_index) +
    +
    1368  config.ComputeSize() + label.ComputeSize();
    +
    1369 }
    +
    1370 
    +
    1371 MediaHeader::MediaHeader()
    +
    1372  : creation_time(0), modification_time(0), timescale(0), duration(0) {
    +
    1373  language[0] = 0;
    +
    1374 }
    +
    1375 MediaHeader::~MediaHeader() {}
    +
    1376 FourCC MediaHeader::BoxType() const { return FOURCC_MDHD; }
    1377 
    -
    1378  // Lang format: bit(1) pad, unsigned int(5)[3] language.
    -
    1379  uint16_t lang = 0;
    -
    1380  for (int i = 0; i < 3; ++i)
    -
    1381  lang |= (language[i] - 0x60) << ((2 - i) * 5);
    -
    1382  RCHECK(buffer->ReadWriteUInt16(&lang));
    -
    1383  }
    -
    1384 
    -
    1385  RCHECK(buffer->IgnoreBytes(2)); // predefined.
    -
    1386  return true;
    -
    1387 }
    -
    1388 
    -
    1389 uint32_t MediaHeader::ComputeSizeInternal() {
    -
    1390  version = IsFitIn32Bits(creation_time, modification_time, duration) ? 0 : 1;
    -
    1391  return HeaderSize() + sizeof(timescale) +
    -
    1392  sizeof(uint32_t) * (1 + version) * 3 + 2 + // 2 bytes language.
    -
    1393  2; // 2 bytes predefined.
    -
    1394 }
    -
    1395 
    -
    1396 VideoMediaHeader::VideoMediaHeader()
    -
    1397  : graphicsmode(0), opcolor_red(0), opcolor_green(0), opcolor_blue(0) {
    -
    1398  const uint32_t kVideoMediaHeaderFlags = 1;
    -
    1399  flags = kVideoMediaHeaderFlags;
    -
    1400 }
    -
    1401 VideoMediaHeader::~VideoMediaHeader() {}
    -
    1402 FourCC VideoMediaHeader::BoxType() const { return FOURCC_VMHD; }
    -
    1403 bool VideoMediaHeader::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1404  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    1405  buffer->ReadWriteUInt16(&graphicsmode) &&
    -
    1406  buffer->ReadWriteUInt16(&opcolor_red) &&
    -
    1407  buffer->ReadWriteUInt16(&opcolor_green) &&
    -
    1408  buffer->ReadWriteUInt16(&opcolor_blue));
    -
    1409  return true;
    -
    1410 }
    -
    1411 
    -
    1412 uint32_t VideoMediaHeader::ComputeSizeInternal() {
    -
    1413  return HeaderSize() + sizeof(graphicsmode) + sizeof(opcolor_red) +
    -
    1414  sizeof(opcolor_green) + sizeof(opcolor_blue);
    +
    1378 bool MediaHeader::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1379  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    1380 
    +
    1381  uint8_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    +
    1382  RCHECK(buffer->ReadWriteUInt64NBytes(&creation_time, num_bytes) &&
    +
    1383  buffer->ReadWriteUInt64NBytes(&modification_time, num_bytes) &&
    +
    1384  buffer->ReadWriteUInt32(&timescale) &&
    +
    1385  buffer->ReadWriteUInt64NBytes(&duration, num_bytes));
    +
    1386 
    +
    1387  if (buffer->Reading()) {
    +
    1388  // Read language codes into temp first then use BitReader to read the
    +
    1389  // values. ISO-639-2/T language code: unsigned int(5)[3] language (2 bytes).
    +
    1390  std::vector<uint8_t> temp;
    +
    1391  RCHECK(buffer->ReadWriteVector(&temp, 2));
    +
    1392 
    +
    1393  BitReader bit_reader(&temp[0], 2);
    +
    1394  bit_reader.SkipBits(1);
    +
    1395  for (int i = 0; i < 3; ++i) {
    +
    1396  CHECK(bit_reader.ReadBits(5, &language[i]));
    +
    1397  language[i] += 0x60;
    +
    1398  }
    +
    1399  language[3] = '\0';
    +
    1400  } else {
    +
    1401  // Set up default language if it is not set.
    +
    1402  const char kUndefinedLanguage[] = "und";
    +
    1403  if (language[0] == 0)
    +
    1404  strcpy(language, kUndefinedLanguage);
    +
    1405 
    +
    1406  // Lang format: bit(1) pad, unsigned int(5)[3] language.
    +
    1407  uint16_t lang = 0;
    +
    1408  for (int i = 0; i < 3; ++i)
    +
    1409  lang |= (language[i] - 0x60) << ((2 - i) * 5);
    +
    1410  RCHECK(buffer->ReadWriteUInt16(&lang));
    +
    1411  }
    +
    1412 
    +
    1413  RCHECK(buffer->IgnoreBytes(2)); // predefined.
    +
    1414  return true;
    1415 }
    1416 
    -
    1417 SoundMediaHeader::SoundMediaHeader() : balance(0) {}
    -
    1418 SoundMediaHeader::~SoundMediaHeader() {}
    -
    1419 FourCC SoundMediaHeader::BoxType() const { return FOURCC_SMHD; }
    -
    1420 bool SoundMediaHeader::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1421  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    1422  buffer->ReadWriteUInt16(&balance) &&
    -
    1423  buffer->IgnoreBytes(2)); // reserved.
    -
    1424  return true;
    -
    1425 }
    -
    1426 
    -
    1427 uint32_t SoundMediaHeader::ComputeSizeInternal() {
    -
    1428  return HeaderSize() + sizeof(balance) + sizeof(uint16_t);
    -
    1429 }
    -
    1430 
    -
    1431 SubtitleMediaHeader::SubtitleMediaHeader() {}
    -
    1432 SubtitleMediaHeader::~SubtitleMediaHeader() {}
    -
    1433 
    -
    1434 FourCC SubtitleMediaHeader::BoxType() const { return FOURCC_sthd; }
    -
    1435 
    -
    1436 bool SubtitleMediaHeader::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1437  return ReadWriteHeaderInternal(buffer);
    +
    1417 uint32_t MediaHeader::ComputeSizeInternal() {
    +
    1418  version = IsFitIn32Bits(creation_time, modification_time, duration) ? 0 : 1;
    +
    1419  return HeaderSize() + sizeof(timescale) +
    +
    1420  sizeof(uint32_t) * (1 + version) * 3 + 2 + // 2 bytes language.
    +
    1421  2; // 2 bytes predefined.
    +
    1422 }
    +
    1423 
    +
    1424 VideoMediaHeader::VideoMediaHeader()
    +
    1425  : graphicsmode(0), opcolor_red(0), opcolor_green(0), opcolor_blue(0) {
    +
    1426  const uint32_t kVideoMediaHeaderFlags = 1;
    +
    1427  flags = kVideoMediaHeaderFlags;
    +
    1428 }
    +
    1429 VideoMediaHeader::~VideoMediaHeader() {}
    +
    1430 FourCC VideoMediaHeader::BoxType() const { return FOURCC_VMHD; }
    +
    1431 bool VideoMediaHeader::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1432  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    1433  buffer->ReadWriteUInt16(&graphicsmode) &&
    +
    1434  buffer->ReadWriteUInt16(&opcolor_red) &&
    +
    1435  buffer->ReadWriteUInt16(&opcolor_green) &&
    +
    1436  buffer->ReadWriteUInt16(&opcolor_blue));
    +
    1437  return true;
    1438 }
    1439 
    -
    1440 uint32_t SubtitleMediaHeader::ComputeSizeInternal() {
    -
    1441  return HeaderSize();
    -
    1442 }
    -
    1443 
    -
    1444 DataEntryUrl::DataEntryUrl() {
    -
    1445  const uint32_t kDataEntryUrlFlags = 1;
    -
    1446  flags = kDataEntryUrlFlags;
    -
    1447 }
    -
    1448 DataEntryUrl::~DataEntryUrl() {}
    -
    1449 FourCC DataEntryUrl::BoxType() const { return FOURCC_URL; }
    -
    1450 bool DataEntryUrl::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1451  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    1452  if (buffer->Reading()) {
    -
    1453  RCHECK(buffer->ReadWriteVector(&location, buffer->Size() - buffer->Pos()));
    -
    1454  } else {
    -
    1455  RCHECK(buffer->ReadWriteVector(&location, location.size()));
    -
    1456  }
    -
    1457  return true;
    -
    1458 }
    -
    1459 
    -
    1460 uint32_t DataEntryUrl::ComputeSizeInternal() {
    -
    1461  return HeaderSize() + location.size();
    -
    1462 }
    +
    1440 uint32_t VideoMediaHeader::ComputeSizeInternal() {
    +
    1441  return HeaderSize() + sizeof(graphicsmode) + sizeof(opcolor_red) +
    +
    1442  sizeof(opcolor_green) + sizeof(opcolor_blue);
    +
    1443 }
    +
    1444 
    +
    1445 SoundMediaHeader::SoundMediaHeader() : balance(0) {}
    +
    1446 SoundMediaHeader::~SoundMediaHeader() {}
    +
    1447 FourCC SoundMediaHeader::BoxType() const { return FOURCC_SMHD; }
    +
    1448 bool SoundMediaHeader::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1449  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    1450  buffer->ReadWriteUInt16(&balance) &&
    +
    1451  buffer->IgnoreBytes(2)); // reserved.
    +
    1452  return true;
    +
    1453 }
    +
    1454 
    +
    1455 uint32_t SoundMediaHeader::ComputeSizeInternal() {
    +
    1456  return HeaderSize() + sizeof(balance) + sizeof(uint16_t);
    +
    1457 }
    +
    1458 
    +
    1459 SubtitleMediaHeader::SubtitleMediaHeader() {}
    +
    1460 SubtitleMediaHeader::~SubtitleMediaHeader() {}
    +
    1461 
    +
    1462 FourCC SubtitleMediaHeader::BoxType() const { return FOURCC_sthd; }
    1463 
    -
    1464 DataReference::DataReference() {
    -
    1465  // Default 1 entry.
    -
    1466  data_entry.resize(1);
    -
    1467 }
    -
    1468 DataReference::~DataReference() {}
    -
    1469 FourCC DataReference::BoxType() const { return FOURCC_DREF; }
    -
    1470 bool DataReference::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1471  uint32_t entry_count = data_entry.size();
    -
    1472  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    1473  buffer->ReadWriteUInt32(&entry_count));
    -
    1474  data_entry.resize(entry_count);
    -
    1475  RCHECK(buffer->PrepareChildren());
    -
    1476  for (uint32_t i = 0; i < entry_count; ++i)
    -
    1477  RCHECK(buffer->ReadWriteChild(&data_entry[i]));
    -
    1478  return true;
    -
    1479 }
    -
    1480 
    -
    1481 uint32_t DataReference::ComputeSizeInternal() {
    -
    1482  uint32_t count = data_entry.size();
    -
    1483  uint32_t box_size = HeaderSize() + sizeof(count);
    -
    1484  for (uint32_t i = 0; i < count; ++i)
    -
    1485  box_size += data_entry[i].ComputeSize();
    -
    1486  return box_size;
    -
    1487 }
    -
    1488 
    -
    1489 DataInformation::DataInformation() {}
    -
    1490 DataInformation::~DataInformation() {}
    -
    1491 FourCC DataInformation::BoxType() const { return FOURCC_DINF; }
    -
    1492 
    -
    1493 bool DataInformation::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1494  return ReadWriteHeaderInternal(buffer) &&
    -
    1495  buffer->PrepareChildren() &&
    -
    1496  buffer->ReadWriteChild(&dref);
    -
    1497 }
    -
    1498 
    -
    1499 uint32_t DataInformation::ComputeSizeInternal() {
    -
    1500  return HeaderSize() + dref.ComputeSize();
    -
    1501 }
    -
    1502 
    -
    1503 MediaInformation::MediaInformation() {}
    -
    1504 MediaInformation::~MediaInformation() {}
    -
    1505 FourCC MediaInformation::BoxType() const { return FOURCC_MINF; }
    -
    1506 
    -
    1507 bool MediaInformation::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1508  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    1509  buffer->PrepareChildren() &&
    -
    1510  buffer->ReadWriteChild(&dinf) &&
    -
    1511  buffer->ReadWriteChild(&sample_table));
    -
    1512  switch (sample_table.description.type) {
    -
    1513  case kVideo:
    -
    1514  RCHECK(buffer->ReadWriteChild(&vmhd));
    -
    1515  break;
    -
    1516  case kAudio:
    -
    1517  RCHECK(buffer->ReadWriteChild(&smhd));
    -
    1518  break;
    -
    1519  case kText:
    -
    1520  RCHECK(buffer->ReadWriteChild(&sthd));
    -
    1521  break;
    -
    1522  default:
    -
    1523  NOTIMPLEMENTED();
    -
    1524  }
    -
    1525  // Hint is not supported for now.
    -
    1526  return true;
    -
    1527 }
    -
    1528 
    -
    1529 uint32_t MediaInformation::ComputeSizeInternal() {
    -
    1530  uint32_t box_size =
    -
    1531  HeaderSize() + dinf.ComputeSize() + sample_table.ComputeSize();
    -
    1532  switch (sample_table.description.type) {
    -
    1533  case kVideo:
    -
    1534  box_size += vmhd.ComputeSize();
    -
    1535  break;
    -
    1536  case kAudio:
    -
    1537  box_size += smhd.ComputeSize();
    -
    1538  break;
    -
    1539  case kText:
    -
    1540  box_size += sthd.ComputeSize();
    -
    1541  break;
    -
    1542  default:
    -
    1543  NOTIMPLEMENTED();
    -
    1544  }
    -
    1545  return box_size;
    -
    1546 }
    -
    1547 
    -
    1548 Media::Media() {}
    -
    1549 Media::~Media() {}
    -
    1550 FourCC Media::BoxType() const { return FOURCC_MDIA; }
    -
    1551 
    -
    1552 bool Media::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1553  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    1554  buffer->PrepareChildren() &&
    -
    1555  buffer->ReadWriteChild(&header) &&
    -
    1556  buffer->ReadWriteChild(&handler));
    -
    1557  if (buffer->Reading()) {
    -
    1558  // Maddeningly, the HandlerReference box specifies how to parse the
    -
    1559  // SampleDescription box, making the latter the only box (of those that we
    -
    1560  // support) which cannot be parsed correctly on its own (or even with
    -
    1561  // information from its strict ancestor tree). We thus copy the handler type
    -
    1562  // to the sample description box *before* parsing it to provide this
    -
    1563  // information while parsing.
    -
    1564  information.sample_table.description.type = handler.type;
    -
    1565  } else {
    -
    1566  DCHECK_EQ(information.sample_table.description.type, handler.type);
    -
    1567  }
    -
    1568  RCHECK(buffer->ReadWriteChild(&information));
    -
    1569  return true;
    -
    1570 }
    -
    1571 
    -
    1572 uint32_t Media::ComputeSizeInternal() {
    -
    1573  return HeaderSize() + header.ComputeSize() + handler.ComputeSize() +
    -
    1574  information.ComputeSize();
    -
    1575 }
    -
    1576 
    -
    1577 Track::Track() {}
    -
    1578 Track::~Track() {}
    -
    1579 FourCC Track::BoxType() const { return FOURCC_TRAK; }
    -
    1580 
    -
    1581 bool Track::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1582  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    1583  buffer->PrepareChildren() &&
    -
    1584  buffer->ReadWriteChild(&header) &&
    -
    1585  buffer->ReadWriteChild(&media) &&
    -
    1586  buffer->TryReadWriteChild(&edit) &&
    -
    1587  buffer->TryReadWriteChild(&sample_encryption));
    -
    1588  return true;
    -
    1589 }
    -
    1590 
    -
    1591 uint32_t Track::ComputeSizeInternal() {
    -
    1592  return HeaderSize() + header.ComputeSize() + media.ComputeSize() +
    -
    1593  edit.ComputeSize();
    -
    1594 }
    -
    1595 
    -
    1596 MovieExtendsHeader::MovieExtendsHeader() : fragment_duration(0) {}
    -
    1597 MovieExtendsHeader::~MovieExtendsHeader() {}
    -
    1598 FourCC MovieExtendsHeader::BoxType() const { return FOURCC_MEHD; }
    +
    1464 bool SubtitleMediaHeader::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1465  return ReadWriteHeaderInternal(buffer);
    +
    1466 }
    +
    1467 
    +
    1468 uint32_t SubtitleMediaHeader::ComputeSizeInternal() {
    +
    1469  return HeaderSize();
    +
    1470 }
    +
    1471 
    +
    1472 DataEntryUrl::DataEntryUrl() {
    +
    1473  const uint32_t kDataEntryUrlFlags = 1;
    +
    1474  flags = kDataEntryUrlFlags;
    +
    1475 }
    +
    1476 DataEntryUrl::~DataEntryUrl() {}
    +
    1477 FourCC DataEntryUrl::BoxType() const { return FOURCC_URL; }
    +
    1478 bool DataEntryUrl::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1479  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    1480  if (buffer->Reading()) {
    +
    1481  RCHECK(buffer->ReadWriteVector(&location, buffer->Size() - buffer->Pos()));
    +
    1482  } else {
    +
    1483  RCHECK(buffer->ReadWriteVector(&location, location.size()));
    +
    1484  }
    +
    1485  return true;
    +
    1486 }
    +
    1487 
    +
    1488 uint32_t DataEntryUrl::ComputeSizeInternal() {
    +
    1489  return HeaderSize() + location.size();
    +
    1490 }
    +
    1491 
    +
    1492 DataReference::DataReference() {
    +
    1493  // Default 1 entry.
    +
    1494  data_entry.resize(1);
    +
    1495 }
    +
    1496 DataReference::~DataReference() {}
    +
    1497 FourCC DataReference::BoxType() const { return FOURCC_DREF; }
    +
    1498 bool DataReference::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1499  uint32_t entry_count = data_entry.size();
    +
    1500  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    1501  buffer->ReadWriteUInt32(&entry_count));
    +
    1502  data_entry.resize(entry_count);
    +
    1503  RCHECK(buffer->PrepareChildren());
    +
    1504  for (uint32_t i = 0; i < entry_count; ++i)
    +
    1505  RCHECK(buffer->ReadWriteChild(&data_entry[i]));
    +
    1506  return true;
    +
    1507 }
    +
    1508 
    +
    1509 uint32_t DataReference::ComputeSizeInternal() {
    +
    1510  uint32_t count = data_entry.size();
    +
    1511  uint32_t box_size = HeaderSize() + sizeof(count);
    +
    1512  for (uint32_t i = 0; i < count; ++i)
    +
    1513  box_size += data_entry[i].ComputeSize();
    +
    1514  return box_size;
    +
    1515 }
    +
    1516 
    +
    1517 DataInformation::DataInformation() {}
    +
    1518 DataInformation::~DataInformation() {}
    +
    1519 FourCC DataInformation::BoxType() const { return FOURCC_DINF; }
    +
    1520 
    +
    1521 bool DataInformation::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1522  return ReadWriteHeaderInternal(buffer) &&
    +
    1523  buffer->PrepareChildren() &&
    +
    1524  buffer->ReadWriteChild(&dref);
    +
    1525 }
    +
    1526 
    +
    1527 uint32_t DataInformation::ComputeSizeInternal() {
    +
    1528  return HeaderSize() + dref.ComputeSize();
    +
    1529 }
    +
    1530 
    +
    1531 MediaInformation::MediaInformation() {}
    +
    1532 MediaInformation::~MediaInformation() {}
    +
    1533 FourCC MediaInformation::BoxType() const { return FOURCC_MINF; }
    +
    1534 
    +
    1535 bool MediaInformation::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1536  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    1537  buffer->PrepareChildren() &&
    +
    1538  buffer->ReadWriteChild(&dinf) &&
    +
    1539  buffer->ReadWriteChild(&sample_table));
    +
    1540  switch (sample_table.description.type) {
    +
    1541  case kVideo:
    +
    1542  RCHECK(buffer->ReadWriteChild(&vmhd));
    +
    1543  break;
    +
    1544  case kAudio:
    +
    1545  RCHECK(buffer->ReadWriteChild(&smhd));
    +
    1546  break;
    +
    1547  case kText:
    +
    1548  RCHECK(buffer->ReadWriteChild(&sthd));
    +
    1549  break;
    +
    1550  default:
    +
    1551  NOTIMPLEMENTED();
    +
    1552  }
    +
    1553  // Hint is not supported for now.
    +
    1554  return true;
    +
    1555 }
    +
    1556 
    +
    1557 uint32_t MediaInformation::ComputeSizeInternal() {
    +
    1558  uint32_t box_size =
    +
    1559  HeaderSize() + dinf.ComputeSize() + sample_table.ComputeSize();
    +
    1560  switch (sample_table.description.type) {
    +
    1561  case kVideo:
    +
    1562  box_size += vmhd.ComputeSize();
    +
    1563  break;
    +
    1564  case kAudio:
    +
    1565  box_size += smhd.ComputeSize();
    +
    1566  break;
    +
    1567  case kText:
    +
    1568  box_size += sthd.ComputeSize();
    +
    1569  break;
    +
    1570  default:
    +
    1571  NOTIMPLEMENTED();
    +
    1572  }
    +
    1573  return box_size;
    +
    1574 }
    +
    1575 
    +
    1576 Media::Media() {}
    +
    1577 Media::~Media() {}
    +
    1578 FourCC Media::BoxType() const { return FOURCC_MDIA; }
    +
    1579 
    +
    1580 bool Media::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1581  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    1582  buffer->PrepareChildren() &&
    +
    1583  buffer->ReadWriteChild(&header) &&
    +
    1584  buffer->ReadWriteChild(&handler));
    +
    1585  if (buffer->Reading()) {
    +
    1586  // Maddeningly, the HandlerReference box specifies how to parse the
    +
    1587  // SampleDescription box, making the latter the only box (of those that we
    +
    1588  // support) which cannot be parsed correctly on its own (or even with
    +
    1589  // information from its strict ancestor tree). We thus copy the handler type
    +
    1590  // to the sample description box *before* parsing it to provide this
    +
    1591  // information while parsing.
    +
    1592  information.sample_table.description.type = handler.type;
    +
    1593  } else {
    +
    1594  DCHECK_EQ(information.sample_table.description.type, handler.type);
    +
    1595  }
    +
    1596  RCHECK(buffer->ReadWriteChild(&information));
    +
    1597  return true;
    +
    1598 }
    1599 
    -
    1600 bool MovieExtendsHeader::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1601  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    1602  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    -
    1603  RCHECK(buffer->ReadWriteUInt64NBytes(&fragment_duration, num_bytes));
    -
    1604  return true;
    -
    1605 }
    -
    1606 
    -
    1607 uint32_t MovieExtendsHeader::ComputeSizeInternal() {
    -
    1608  // This box is optional. Skip it if it is not used.
    -
    1609  if (fragment_duration == 0)
    -
    1610  return 0;
    -
    1611  version = IsFitIn32Bits(fragment_duration) ? 0 : 1;
    -
    1612  return HeaderSize() + sizeof(uint32_t) * (1 + version);
    -
    1613 }
    -
    1614 
    -
    1615 TrackExtends::TrackExtends()
    -
    1616  : track_id(0),
    -
    1617  default_sample_description_index(0),
    -
    1618  default_sample_duration(0),
    -
    1619  default_sample_size(0),
    -
    1620  default_sample_flags(0) {}
    -
    1621 TrackExtends::~TrackExtends() {}
    -
    1622 FourCC TrackExtends::BoxType() const { return FOURCC_TREX; }
    +
    1600 uint32_t Media::ComputeSizeInternal() {
    +
    1601  return HeaderSize() + header.ComputeSize() + handler.ComputeSize() +
    +
    1602  information.ComputeSize();
    +
    1603 }
    +
    1604 
    +
    1605 Track::Track() {}
    +
    1606 Track::~Track() {}
    +
    1607 FourCC Track::BoxType() const { return FOURCC_TRAK; }
    +
    1608 
    +
    1609 bool Track::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1610  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    1611  buffer->PrepareChildren() &&
    +
    1612  buffer->ReadWriteChild(&header) &&
    +
    1613  buffer->ReadWriteChild(&media) &&
    +
    1614  buffer->TryReadWriteChild(&edit) &&
    +
    1615  buffer->TryReadWriteChild(&sample_encryption));
    +
    1616  return true;
    +
    1617 }
    +
    1618 
    +
    1619 uint32_t Track::ComputeSizeInternal() {
    +
    1620  return HeaderSize() + header.ComputeSize() + media.ComputeSize() +
    +
    1621  edit.ComputeSize();
    +
    1622 }
    1623 
    -
    1624 bool TrackExtends::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1625  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    1626  buffer->ReadWriteUInt32(&track_id) &&
    -
    1627  buffer->ReadWriteUInt32(&default_sample_description_index) &&
    -
    1628  buffer->ReadWriteUInt32(&default_sample_duration) &&
    -
    1629  buffer->ReadWriteUInt32(&default_sample_size) &&
    -
    1630  buffer->ReadWriteUInt32(&default_sample_flags));
    -
    1631  return true;
    -
    1632 }
    -
    1633 
    -
    1634 uint32_t TrackExtends::ComputeSizeInternal() {
    -
    1635  return HeaderSize() + sizeof(track_id) +
    -
    1636  sizeof(default_sample_description_index) +
    -
    1637  sizeof(default_sample_duration) + sizeof(default_sample_size) +
    -
    1638  sizeof(default_sample_flags);
    -
    1639 }
    -
    1640 
    -
    1641 MovieExtends::MovieExtends() {}
    -
    1642 MovieExtends::~MovieExtends() {}
    -
    1643 FourCC MovieExtends::BoxType() const { return FOURCC_MVEX; }
    -
    1644 
    -
    1645 bool MovieExtends::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1646  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    1647  buffer->PrepareChildren() &&
    -
    1648  buffer->TryReadWriteChild(&header));
    -
    1649  if (buffer->Reading()) {
    -
    1650  DCHECK(buffer->reader());
    -
    1651  RCHECK(buffer->reader()->ReadChildren(&tracks));
    -
    1652  } else {
    -
    1653  for (uint32_t i = 0; i < tracks.size(); ++i)
    -
    1654  RCHECK(buffer->ReadWriteChild(&tracks[i]));
    -
    1655  }
    -
    1656  return true;
    -
    1657 }
    -
    1658 
    -
    1659 uint32_t MovieExtends::ComputeSizeInternal() {
    -
    1660  // This box is optional. Skip it if it does not contain any track.
    -
    1661  if (tracks.size() == 0)
    -
    1662  return 0;
    -
    1663  uint32_t box_size = HeaderSize() + header.ComputeSize();
    -
    1664  for (uint32_t i = 0; i < tracks.size(); ++i)
    -
    1665  box_size += tracks[i].ComputeSize();
    -
    1666  return box_size;
    +
    1624 MovieExtendsHeader::MovieExtendsHeader() : fragment_duration(0) {}
    +
    1625 MovieExtendsHeader::~MovieExtendsHeader() {}
    +
    1626 FourCC MovieExtendsHeader::BoxType() const { return FOURCC_MEHD; }
    +
    1627 
    +
    1628 bool MovieExtendsHeader::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1629  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    1630  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    +
    1631  RCHECK(buffer->ReadWriteUInt64NBytes(&fragment_duration, num_bytes));
    +
    1632  return true;
    +
    1633 }
    +
    1634 
    +
    1635 uint32_t MovieExtendsHeader::ComputeSizeInternal() {
    +
    1636  // This box is optional. Skip it if it is not used.
    +
    1637  if (fragment_duration == 0)
    +
    1638  return 0;
    +
    1639  version = IsFitIn32Bits(fragment_duration) ? 0 : 1;
    +
    1640  return HeaderSize() + sizeof(uint32_t) * (1 + version);
    +
    1641 }
    +
    1642 
    +
    1643 TrackExtends::TrackExtends()
    +
    1644  : track_id(0),
    +
    1645  default_sample_description_index(0),
    +
    1646  default_sample_duration(0),
    +
    1647  default_sample_size(0),
    +
    1648  default_sample_flags(0) {}
    +
    1649 TrackExtends::~TrackExtends() {}
    +
    1650 FourCC TrackExtends::BoxType() const { return FOURCC_TREX; }
    +
    1651 
    +
    1652 bool TrackExtends::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1653  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    1654  buffer->ReadWriteUInt32(&track_id) &&
    +
    1655  buffer->ReadWriteUInt32(&default_sample_description_index) &&
    +
    1656  buffer->ReadWriteUInt32(&default_sample_duration) &&
    +
    1657  buffer->ReadWriteUInt32(&default_sample_size) &&
    +
    1658  buffer->ReadWriteUInt32(&default_sample_flags));
    +
    1659  return true;
    +
    1660 }
    +
    1661 
    +
    1662 uint32_t TrackExtends::ComputeSizeInternal() {
    +
    1663  return HeaderSize() + sizeof(track_id) +
    +
    1664  sizeof(default_sample_description_index) +
    +
    1665  sizeof(default_sample_duration) + sizeof(default_sample_size) +
    +
    1666  sizeof(default_sample_flags);
    1667 }
    1668 
    -
    1669 Movie::Movie() {}
    -
    1670 Movie::~Movie() {}
    -
    1671 FourCC Movie::BoxType() const { return FOURCC_MOOV; }
    +
    1669 MovieExtends::MovieExtends() {}
    +
    1670 MovieExtends::~MovieExtends() {}
    +
    1671 FourCC MovieExtends::BoxType() const { return FOURCC_MVEX; }
    1672 
    -
    1673 bool Movie::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1673 bool MovieExtends::ReadWriteInternal(BoxBuffer* buffer) {
    1674  RCHECK(ReadWriteHeaderInternal(buffer) &&
    1675  buffer->PrepareChildren() &&
    -
    1676  buffer->ReadWriteChild(&header) &&
    -
    1677  buffer->TryReadWriteChild(&extends));
    -
    1678  if (buffer->Reading()) {
    -
    1679  BoxReader* reader = buffer->reader();
    -
    1680  DCHECK(reader);
    -
    1681  RCHECK(reader->ReadChildren(&tracks) &&
    -
    1682  reader->TryReadChildren(&pssh));
    -
    1683  } else {
    -
    1684  for (uint32_t i = 0; i < tracks.size(); ++i)
    -
    1685  RCHECK(buffer->ReadWriteChild(&tracks[i]));
    -
    1686  for (uint32_t i = 0; i < pssh.size(); ++i)
    -
    1687  RCHECK(buffer->ReadWriteChild(&pssh[i]));
    -
    1688  }
    -
    1689  return true;
    -
    1690 }
    -
    1691 
    -
    1692 uint32_t Movie::ComputeSizeInternal() {
    -
    1693  uint32_t box_size =
    -
    1694  HeaderSize() + header.ComputeSize() + extends.ComputeSize();
    -
    1695  for (uint32_t i = 0; i < tracks.size(); ++i)
    -
    1696  box_size += tracks[i].ComputeSize();
    -
    1697  for (uint32_t i = 0; i < pssh.size(); ++i)
    -
    1698  box_size += pssh[i].ComputeSize();
    -
    1699  return box_size;
    -
    1700 }
    -
    1701 
    -
    1702 TrackFragmentDecodeTime::TrackFragmentDecodeTime() : decode_time(0) {}
    -
    1703 TrackFragmentDecodeTime::~TrackFragmentDecodeTime() {}
    -
    1704 FourCC TrackFragmentDecodeTime::BoxType() const { return FOURCC_TFDT; }
    -
    1705 
    -
    1706 bool TrackFragmentDecodeTime::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1707  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    1708  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    -
    1709  RCHECK(buffer->ReadWriteUInt64NBytes(&decode_time, num_bytes));
    -
    1710  return true;
    -
    1711 }
    -
    1712 
    -
    1713 uint32_t TrackFragmentDecodeTime::ComputeSizeInternal() {
    -
    1714  version = IsFitIn32Bits(decode_time) ? 0 : 1;
    -
    1715  return HeaderSize() + sizeof(uint32_t) * (1 + version);
    -
    1716 }
    -
    1717 
    -
    1718 MovieFragmentHeader::MovieFragmentHeader() : sequence_number(0) {}
    -
    1719 MovieFragmentHeader::~MovieFragmentHeader() {}
    -
    1720 FourCC MovieFragmentHeader::BoxType() const { return FOURCC_MFHD; }
    -
    1721 
    -
    1722 bool MovieFragmentHeader::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1723  return ReadWriteHeaderInternal(buffer) &&
    -
    1724  buffer->ReadWriteUInt32(&sequence_number);
    -
    1725 }
    -
    1726 
    -
    1727 uint32_t MovieFragmentHeader::ComputeSizeInternal() {
    -
    1728  return HeaderSize() + sizeof(sequence_number);
    -
    1729 }
    -
    1730 
    -
    1731 TrackFragmentHeader::TrackFragmentHeader()
    -
    1732  : track_id(0),
    -
    1733  sample_description_index(0),
    -
    1734  default_sample_duration(0),
    -
    1735  default_sample_size(0),
    -
    1736  default_sample_flags(0) {}
    -
    1737 
    -
    1738 TrackFragmentHeader::~TrackFragmentHeader() {}
    -
    1739 FourCC TrackFragmentHeader::BoxType() const { return FOURCC_TFHD; }
    +
    1676  buffer->TryReadWriteChild(&header));
    +
    1677  if (buffer->Reading()) {
    +
    1678  DCHECK(buffer->reader());
    +
    1679  RCHECK(buffer->reader()->ReadChildren(&tracks));
    +
    1680  } else {
    +
    1681  for (uint32_t i = 0; i < tracks.size(); ++i)
    +
    1682  RCHECK(buffer->ReadWriteChild(&tracks[i]));
    +
    1683  }
    +
    1684  return true;
    +
    1685 }
    +
    1686 
    +
    1687 uint32_t MovieExtends::ComputeSizeInternal() {
    +
    1688  // This box is optional. Skip it if it does not contain any track.
    +
    1689  if (tracks.size() == 0)
    +
    1690  return 0;
    +
    1691  uint32_t box_size = HeaderSize() + header.ComputeSize();
    +
    1692  for (uint32_t i = 0; i < tracks.size(); ++i)
    +
    1693  box_size += tracks[i].ComputeSize();
    +
    1694  return box_size;
    +
    1695 }
    +
    1696 
    +
    1697 Movie::Movie() {}
    +
    1698 Movie::~Movie() {}
    +
    1699 FourCC Movie::BoxType() const { return FOURCC_MOOV; }
    +
    1700 
    +
    1701 bool Movie::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1702  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    1703  buffer->PrepareChildren() &&
    +
    1704  buffer->ReadWriteChild(&header) &&
    +
    1705  buffer->TryReadWriteChild(&extends));
    +
    1706  if (buffer->Reading()) {
    +
    1707  BoxReader* reader = buffer->reader();
    +
    1708  DCHECK(reader);
    +
    1709  RCHECK(reader->ReadChildren(&tracks) &&
    +
    1710  reader->TryReadChildren(&pssh));
    +
    1711  } else {
    +
    1712  for (uint32_t i = 0; i < tracks.size(); ++i)
    +
    1713  RCHECK(buffer->ReadWriteChild(&tracks[i]));
    +
    1714  for (uint32_t i = 0; i < pssh.size(); ++i)
    +
    1715  RCHECK(buffer->ReadWriteChild(&pssh[i]));
    +
    1716  }
    +
    1717  return true;
    +
    1718 }
    +
    1719 
    +
    1720 uint32_t Movie::ComputeSizeInternal() {
    +
    1721  uint32_t box_size =
    +
    1722  HeaderSize() + header.ComputeSize() + extends.ComputeSize();
    +
    1723  for (uint32_t i = 0; i < tracks.size(); ++i)
    +
    1724  box_size += tracks[i].ComputeSize();
    +
    1725  for (uint32_t i = 0; i < pssh.size(); ++i)
    +
    1726  box_size += pssh[i].ComputeSize();
    +
    1727  return box_size;
    +
    1728 }
    +
    1729 
    +
    1730 TrackFragmentDecodeTime::TrackFragmentDecodeTime() : decode_time(0) {}
    +
    1731 TrackFragmentDecodeTime::~TrackFragmentDecodeTime() {}
    +
    1732 FourCC TrackFragmentDecodeTime::BoxType() const { return FOURCC_TFDT; }
    +
    1733 
    +
    1734 bool TrackFragmentDecodeTime::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1735  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    1736  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    +
    1737  RCHECK(buffer->ReadWriteUInt64NBytes(&decode_time, num_bytes));
    +
    1738  return true;
    +
    1739 }
    1740 
    -
    1741 bool TrackFragmentHeader::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1742  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    1743  buffer->ReadWriteUInt32(&track_id));
    -
    1744 
    -
    1745  if (flags & kBaseDataOffsetPresentMask) {
    -
    1746  // MSE requires 'default-base-is-moof' to be set and
    -
    1747  // 'base-data-offset-present' not to be set. We omit these checks as some
    -
    1748  // valid files in the wild don't follow these rules, though they use moof as
    -
    1749  // base.
    -
    1750  uint64_t base_data_offset;
    -
    1751  RCHECK(buffer->ReadWriteUInt64(&base_data_offset));
    -
    1752  DLOG(WARNING) << "base-data-offset-present is not expected. Assumes "
    -
    1753  "default-base-is-moof.";
    -
    1754  }
    -
    1755 
    -
    1756  if (flags & kSampleDescriptionIndexPresentMask) {
    -
    1757  RCHECK(buffer->ReadWriteUInt32(&sample_description_index));
    -
    1758  } else if (buffer->Reading()) {
    -
    1759  sample_description_index = 0;
    -
    1760  }
    -
    1761 
    -
    1762  if (flags & kDefaultSampleDurationPresentMask) {
    -
    1763  RCHECK(buffer->ReadWriteUInt32(&default_sample_duration));
    -
    1764  } else if (buffer->Reading()) {
    -
    1765  default_sample_duration = 0;
    -
    1766  }
    -
    1767 
    -
    1768  if (flags & kDefaultSampleSizePresentMask) {
    -
    1769  RCHECK(buffer->ReadWriteUInt32(&default_sample_size));
    -
    1770  } else if (buffer->Reading()) {
    -
    1771  default_sample_size = 0;
    -
    1772  }
    -
    1773 
    -
    1774  if (flags & kDefaultSampleFlagsPresentMask)
    -
    1775  RCHECK(buffer->ReadWriteUInt32(&default_sample_flags));
    -
    1776  return true;
    -
    1777 }
    -
    1778 
    -
    1779 uint32_t TrackFragmentHeader::ComputeSizeInternal() {
    -
    1780  uint32_t box_size = HeaderSize() + sizeof(track_id);
    -
    1781  if (flags & kSampleDescriptionIndexPresentMask)
    -
    1782  box_size += sizeof(sample_description_index);
    -
    1783  if (flags & kDefaultSampleDurationPresentMask)
    -
    1784  box_size += sizeof(default_sample_duration);
    -
    1785  if (flags & kDefaultSampleSizePresentMask)
    -
    1786  box_size += sizeof(default_sample_size);
    -
    1787  if (flags & kDefaultSampleFlagsPresentMask)
    -
    1788  box_size += sizeof(default_sample_flags);
    -
    1789  return box_size;
    -
    1790 }
    -
    1791 
    -
    1792 TrackFragmentRun::TrackFragmentRun() : sample_count(0), data_offset(0) {}
    -
    1793 TrackFragmentRun::~TrackFragmentRun() {}
    -
    1794 FourCC TrackFragmentRun::BoxType() const { return FOURCC_TRUN; }
    +
    1741 uint32_t TrackFragmentDecodeTime::ComputeSizeInternal() {
    +
    1742  version = IsFitIn32Bits(decode_time) ? 0 : 1;
    +
    1743  return HeaderSize() + sizeof(uint32_t) * (1 + version);
    +
    1744 }
    +
    1745 
    +
    1746 MovieFragmentHeader::MovieFragmentHeader() : sequence_number(0) {}
    +
    1747 MovieFragmentHeader::~MovieFragmentHeader() {}
    +
    1748 FourCC MovieFragmentHeader::BoxType() const { return FOURCC_MFHD; }
    +
    1749 
    +
    1750 bool MovieFragmentHeader::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1751  return ReadWriteHeaderInternal(buffer) &&
    +
    1752  buffer->ReadWriteUInt32(&sequence_number);
    +
    1753 }
    +
    1754 
    +
    1755 uint32_t MovieFragmentHeader::ComputeSizeInternal() {
    +
    1756  return HeaderSize() + sizeof(sequence_number);
    +
    1757 }
    +
    1758 
    +
    1759 TrackFragmentHeader::TrackFragmentHeader()
    +
    1760  : track_id(0),
    +
    1761  sample_description_index(0),
    +
    1762  default_sample_duration(0),
    +
    1763  default_sample_size(0),
    +
    1764  default_sample_flags(0) {}
    +
    1765 
    +
    1766 TrackFragmentHeader::~TrackFragmentHeader() {}
    +
    1767 FourCC TrackFragmentHeader::BoxType() const { return FOURCC_TFHD; }
    +
    1768 
    +
    1769 bool TrackFragmentHeader::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1770  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    1771  buffer->ReadWriteUInt32(&track_id));
    +
    1772 
    +
    1773  if (flags & kBaseDataOffsetPresentMask) {
    +
    1774  // MSE requires 'default-base-is-moof' to be set and
    +
    1775  // 'base-data-offset-present' not to be set. We omit these checks as some
    +
    1776  // valid files in the wild don't follow these rules, though they use moof as
    +
    1777  // base.
    +
    1778  uint64_t base_data_offset;
    +
    1779  RCHECK(buffer->ReadWriteUInt64(&base_data_offset));
    +
    1780  DLOG(WARNING) << "base-data-offset-present is not expected. Assumes "
    +
    1781  "default-base-is-moof.";
    +
    1782  }
    +
    1783 
    +
    1784  if (flags & kSampleDescriptionIndexPresentMask) {
    +
    1785  RCHECK(buffer->ReadWriteUInt32(&sample_description_index));
    +
    1786  } else if (buffer->Reading()) {
    +
    1787  sample_description_index = 0;
    +
    1788  }
    +
    1789 
    +
    1790  if (flags & kDefaultSampleDurationPresentMask) {
    +
    1791  RCHECK(buffer->ReadWriteUInt32(&default_sample_duration));
    +
    1792  } else if (buffer->Reading()) {
    +
    1793  default_sample_duration = 0;
    +
    1794  }
    1795 
    -
    1796 bool TrackFragmentRun::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1797  if (!buffer->Reading()) {
    -
    1798  // Determine whether version 0 or version 1 should be used.
    -
    1799  // Use version 0 if possible, use version 1 if there is a negative
    -
    1800  // sample_offset value.
    -
    1801  version = 0;
    -
    1802  if (flags & kSampleCompTimeOffsetsPresentMask) {
    -
    1803  for (uint32_t i = 0; i < sample_count; ++i) {
    -
    1804  if (sample_composition_time_offsets[i] < 0) {
    -
    1805  version = 1;
    -
    1806  break;
    -
    1807  }
    -
    1808  }
    -
    1809  }
    -
    1810  }
    -
    1811 
    -
    1812  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    1813  buffer->ReadWriteUInt32(&sample_count));
    -
    1814 
    -
    1815  bool data_offset_present = (flags & kDataOffsetPresentMask) != 0;
    -
    1816  bool first_sample_flags_present = (flags & kFirstSampleFlagsPresentMask) != 0;
    -
    1817  bool sample_duration_present = (flags & kSampleDurationPresentMask) != 0;
    -
    1818  bool sample_size_present = (flags & kSampleSizePresentMask) != 0;
    -
    1819  bool sample_flags_present = (flags & kSampleFlagsPresentMask) != 0;
    -
    1820  bool sample_composition_time_offsets_present =
    -
    1821  (flags & kSampleCompTimeOffsetsPresentMask) != 0;
    -
    1822 
    -
    1823  if (data_offset_present) {
    -
    1824  RCHECK(buffer->ReadWriteUInt32(&data_offset));
    -
    1825  } else {
    -
    1826  // NOTE: If the data-offset is not present, then the data for this run
    -
    1827  // starts immediately after the data of the previous run, or at the
    -
    1828  // base-data-offset defined by the track fragment header if this is the
    -
    1829  // first run in a track fragment. If the data-offset is present, it is
    -
    1830  // relative to the base-data-offset established in the track fragment
    -
    1831  // header.
    -
    1832  NOTIMPLEMENTED();
    -
    1833  }
    -
    1834 
    -
    1835  uint32_t first_sample_flags;
    -
    1836 
    -
    1837  if (buffer->Reading()) {
    -
    1838  if (first_sample_flags_present)
    -
    1839  RCHECK(buffer->ReadWriteUInt32(&first_sample_flags));
    -
    1840 
    -
    1841  if (sample_duration_present)
    -
    1842  sample_durations.resize(sample_count);
    -
    1843  if (sample_size_present)
    -
    1844  sample_sizes.resize(sample_count);
    -
    1845  if (sample_flags_present)
    -
    1846  sample_flags.resize(sample_count);
    -
    1847  if (sample_composition_time_offsets_present)
    -
    1848  sample_composition_time_offsets.resize(sample_count);
    -
    1849  } else {
    -
    1850  if (first_sample_flags_present) {
    -
    1851  first_sample_flags = sample_flags[0];
    -
    1852  DCHECK(sample_flags.size() == 1);
    -
    1853  RCHECK(buffer->ReadWriteUInt32(&first_sample_flags));
    -
    1854  }
    -
    1855 
    -
    1856  if (sample_duration_present)
    -
    1857  DCHECK(sample_durations.size() == sample_count);
    -
    1858  if (sample_size_present)
    -
    1859  DCHECK(sample_sizes.size() == sample_count);
    -
    1860  if (sample_flags_present)
    -
    1861  DCHECK(sample_flags.size() == sample_count);
    -
    1862  if (sample_composition_time_offsets_present)
    -
    1863  DCHECK(sample_composition_time_offsets.size() == sample_count);
    -
    1864  }
    -
    1865 
    -
    1866  for (uint32_t i = 0; i < sample_count; ++i) {
    -
    1867  if (sample_duration_present)
    -
    1868  RCHECK(buffer->ReadWriteUInt32(&sample_durations[i]));
    -
    1869  if (sample_size_present)
    -
    1870  RCHECK(buffer->ReadWriteUInt32(&sample_sizes[i]));
    -
    1871  if (sample_flags_present)
    -
    1872  RCHECK(buffer->ReadWriteUInt32(&sample_flags[i]));
    -
    1873 
    -
    1874  if (sample_composition_time_offsets_present) {
    -
    1875  if (version == 0) {
    -
    1876  uint32_t sample_offset = sample_composition_time_offsets[i];
    -
    1877  RCHECK(buffer->ReadWriteUInt32(&sample_offset));
    -
    1878  sample_composition_time_offsets[i] = sample_offset;
    -
    1879  } else {
    -
    1880  int32_t sample_offset = sample_composition_time_offsets[i];
    -
    1881  RCHECK(buffer->ReadWriteInt32(&sample_offset));
    -
    1882  sample_composition_time_offsets[i] = sample_offset;
    -
    1883  }
    -
    1884  }
    -
    1885  }
    -
    1886 
    -
    1887  if (buffer->Reading()) {
    -
    1888  if (first_sample_flags_present) {
    -
    1889  if (sample_flags.size() == 0) {
    -
    1890  sample_flags.push_back(first_sample_flags);
    -
    1891  } else {
    -
    1892  sample_flags[0] = first_sample_flags;
    -
    1893  }
    -
    1894  }
    -
    1895  }
    -
    1896  return true;
    -
    1897 }
    -
    1898 
    -
    1899 uint32_t TrackFragmentRun::ComputeSizeInternal() {
    -
    1900  uint32_t box_size = HeaderSize() + sizeof(sample_count);
    -
    1901  if (flags & kDataOffsetPresentMask)
    -
    1902  box_size += sizeof(data_offset);
    -
    1903  if (flags & kFirstSampleFlagsPresentMask)
    -
    1904  box_size += sizeof(uint32_t);
    -
    1905  uint32_t fields = (flags & kSampleDurationPresentMask ? 1 : 0) +
    -
    1906  (flags & kSampleSizePresentMask ? 1 : 0) +
    -
    1907  (flags & kSampleFlagsPresentMask ? 1 : 0) +
    -
    1908  (flags & kSampleCompTimeOffsetsPresentMask ? 1 : 0);
    -
    1909  box_size += fields * sizeof(uint32_t) * sample_count;
    -
    1910  return box_size;
    -
    1911 }
    -
    1912 
    -
    1913 SampleToGroup::SampleToGroup() : grouping_type(0), grouping_type_parameter(0) {}
    -
    1914 SampleToGroup::~SampleToGroup() {}
    -
    1915 FourCC SampleToGroup::BoxType() const { return FOURCC_SBGP; }
    -
    1916 
    -
    1917 bool SampleToGroup::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1918  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    1919  buffer->ReadWriteUInt32(&grouping_type));
    -
    1920  if (version == 1)
    -
    1921  RCHECK(buffer->ReadWriteUInt32(&grouping_type_parameter));
    -
    1922 
    -
    1923  if (grouping_type != FOURCC_SEIG) {
    -
    1924  DCHECK(buffer->Reading());
    -
    1925  DLOG(WARNING) << "Sample group "
    -
    1926  << FourCCToString(static_cast<FourCC>(grouping_type))
    -
    1927  << " is not supported.";
    -
    1928  return true;
    -
    1929  }
    -
    1930 
    -
    1931  uint32_t count = entries.size();
    -
    1932  RCHECK(buffer->ReadWriteUInt32(&count));
    -
    1933  entries.resize(count);
    -
    1934  for (uint32_t i = 0; i < count; ++i) {
    -
    1935  RCHECK(buffer->ReadWriteUInt32(&entries[i].sample_count) &&
    -
    1936  buffer->ReadWriteUInt32(&entries[i].group_description_index));
    -
    1937  }
    -
    1938  return true;
    +
    1796  if (flags & kDefaultSampleSizePresentMask) {
    +
    1797  RCHECK(buffer->ReadWriteUInt32(&default_sample_size));
    +
    1798  } else if (buffer->Reading()) {
    +
    1799  default_sample_size = 0;
    +
    1800  }
    +
    1801 
    +
    1802  if (flags & kDefaultSampleFlagsPresentMask)
    +
    1803  RCHECK(buffer->ReadWriteUInt32(&default_sample_flags));
    +
    1804  return true;
    +
    1805 }
    +
    1806 
    +
    1807 uint32_t TrackFragmentHeader::ComputeSizeInternal() {
    +
    1808  uint32_t box_size = HeaderSize() + sizeof(track_id);
    +
    1809  if (flags & kSampleDescriptionIndexPresentMask)
    +
    1810  box_size += sizeof(sample_description_index);
    +
    1811  if (flags & kDefaultSampleDurationPresentMask)
    +
    1812  box_size += sizeof(default_sample_duration);
    +
    1813  if (flags & kDefaultSampleSizePresentMask)
    +
    1814  box_size += sizeof(default_sample_size);
    +
    1815  if (flags & kDefaultSampleFlagsPresentMask)
    +
    1816  box_size += sizeof(default_sample_flags);
    +
    1817  return box_size;
    +
    1818 }
    +
    1819 
    +
    1820 TrackFragmentRun::TrackFragmentRun() : sample_count(0), data_offset(0) {}
    +
    1821 TrackFragmentRun::~TrackFragmentRun() {}
    +
    1822 FourCC TrackFragmentRun::BoxType() const { return FOURCC_TRUN; }
    +
    1823 
    +
    1824 bool TrackFragmentRun::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1825  if (!buffer->Reading()) {
    +
    1826  // Determine whether version 0 or version 1 should be used.
    +
    1827  // Use version 0 if possible, use version 1 if there is a negative
    +
    1828  // sample_offset value.
    +
    1829  version = 0;
    +
    1830  if (flags & kSampleCompTimeOffsetsPresentMask) {
    +
    1831  for (uint32_t i = 0; i < sample_count; ++i) {
    +
    1832  if (sample_composition_time_offsets[i] < 0) {
    +
    1833  version = 1;
    +
    1834  break;
    +
    1835  }
    +
    1836  }
    +
    1837  }
    +
    1838  }
    +
    1839 
    +
    1840  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    1841  buffer->ReadWriteUInt32(&sample_count));
    +
    1842 
    +
    1843  bool data_offset_present = (flags & kDataOffsetPresentMask) != 0;
    +
    1844  bool first_sample_flags_present = (flags & kFirstSampleFlagsPresentMask) != 0;
    +
    1845  bool sample_duration_present = (flags & kSampleDurationPresentMask) != 0;
    +
    1846  bool sample_size_present = (flags & kSampleSizePresentMask) != 0;
    +
    1847  bool sample_flags_present = (flags & kSampleFlagsPresentMask) != 0;
    +
    1848  bool sample_composition_time_offsets_present =
    +
    1849  (flags & kSampleCompTimeOffsetsPresentMask) != 0;
    +
    1850 
    +
    1851  if (data_offset_present) {
    +
    1852  RCHECK(buffer->ReadWriteUInt32(&data_offset));
    +
    1853  } else {
    +
    1854  // NOTE: If the data-offset is not present, then the data for this run
    +
    1855  // starts immediately after the data of the previous run, or at the
    +
    1856  // base-data-offset defined by the track fragment header if this is the
    +
    1857  // first run in a track fragment. If the data-offset is present, it is
    +
    1858  // relative to the base-data-offset established in the track fragment
    +
    1859  // header.
    +
    1860  NOTIMPLEMENTED();
    +
    1861  }
    +
    1862 
    +
    1863  uint32_t first_sample_flags;
    +
    1864 
    +
    1865  if (buffer->Reading()) {
    +
    1866  if (first_sample_flags_present)
    +
    1867  RCHECK(buffer->ReadWriteUInt32(&first_sample_flags));
    +
    1868 
    +
    1869  if (sample_duration_present)
    +
    1870  sample_durations.resize(sample_count);
    +
    1871  if (sample_size_present)
    +
    1872  sample_sizes.resize(sample_count);
    +
    1873  if (sample_flags_present)
    +
    1874  sample_flags.resize(sample_count);
    +
    1875  if (sample_composition_time_offsets_present)
    +
    1876  sample_composition_time_offsets.resize(sample_count);
    +
    1877  } else {
    +
    1878  if (first_sample_flags_present) {
    +
    1879  first_sample_flags = sample_flags[0];
    +
    1880  DCHECK(sample_flags.size() == 1);
    +
    1881  RCHECK(buffer->ReadWriteUInt32(&first_sample_flags));
    +
    1882  }
    +
    1883 
    +
    1884  if (sample_duration_present)
    +
    1885  DCHECK(sample_durations.size() == sample_count);
    +
    1886  if (sample_size_present)
    +
    1887  DCHECK(sample_sizes.size() == sample_count);
    +
    1888  if (sample_flags_present)
    +
    1889  DCHECK(sample_flags.size() == sample_count);
    +
    1890  if (sample_composition_time_offsets_present)
    +
    1891  DCHECK(sample_composition_time_offsets.size() == sample_count);
    +
    1892  }
    +
    1893 
    +
    1894  for (uint32_t i = 0; i < sample_count; ++i) {
    +
    1895  if (sample_duration_present)
    +
    1896  RCHECK(buffer->ReadWriteUInt32(&sample_durations[i]));
    +
    1897  if (sample_size_present)
    +
    1898  RCHECK(buffer->ReadWriteUInt32(&sample_sizes[i]));
    +
    1899  if (sample_flags_present)
    +
    1900  RCHECK(buffer->ReadWriteUInt32(&sample_flags[i]));
    +
    1901 
    +
    1902  if (sample_composition_time_offsets_present) {
    +
    1903  if (version == 0) {
    +
    1904  uint32_t sample_offset = sample_composition_time_offsets[i];
    +
    1905  RCHECK(buffer->ReadWriteUInt32(&sample_offset));
    +
    1906  sample_composition_time_offsets[i] = sample_offset;
    +
    1907  } else {
    +
    1908  int32_t sample_offset = sample_composition_time_offsets[i];
    +
    1909  RCHECK(buffer->ReadWriteInt32(&sample_offset));
    +
    1910  sample_composition_time_offsets[i] = sample_offset;
    +
    1911  }
    +
    1912  }
    +
    1913  }
    +
    1914 
    +
    1915  if (buffer->Reading()) {
    +
    1916  if (first_sample_flags_present) {
    +
    1917  if (sample_flags.size() == 0) {
    +
    1918  sample_flags.push_back(first_sample_flags);
    +
    1919  } else {
    +
    1920  sample_flags[0] = first_sample_flags;
    +
    1921  }
    +
    1922  }
    +
    1923  }
    +
    1924  return true;
    +
    1925 }
    +
    1926 
    +
    1927 uint32_t TrackFragmentRun::ComputeSizeInternal() {
    +
    1928  uint32_t box_size = HeaderSize() + sizeof(sample_count);
    +
    1929  if (flags & kDataOffsetPresentMask)
    +
    1930  box_size += sizeof(data_offset);
    +
    1931  if (flags & kFirstSampleFlagsPresentMask)
    +
    1932  box_size += sizeof(uint32_t);
    +
    1933  uint32_t fields = (flags & kSampleDurationPresentMask ? 1 : 0) +
    +
    1934  (flags & kSampleSizePresentMask ? 1 : 0) +
    +
    1935  (flags & kSampleFlagsPresentMask ? 1 : 0) +
    +
    1936  (flags & kSampleCompTimeOffsetsPresentMask ? 1 : 0);
    +
    1937  box_size += fields * sizeof(uint32_t) * sample_count;
    +
    1938  return box_size;
    1939 }
    1940 
    -
    1941 uint32_t SampleToGroup::ComputeSizeInternal() {
    -
    1942  // This box is optional. Skip it if it is not used.
    -
    1943  if (entries.empty())
    -
    1944  return 0;
    -
    1945  return HeaderSize() + sizeof(grouping_type) +
    -
    1946  (version == 1 ? sizeof(grouping_type_parameter) : 0) +
    -
    1947  sizeof(uint32_t) + entries.size() * sizeof(entries[0]);
    -
    1948 }
    -
    1949 
    -
    1950 CencSampleEncryptionInfoEntry::CencSampleEncryptionInfoEntry()
    -
    1951  : is_encrypted(false), iv_size(0) {
    -
    1952 }
    -
    1953 CencSampleEncryptionInfoEntry::~CencSampleEncryptionInfoEntry() {};
    -
    1954 
    -
    1955 SampleGroupDescription::SampleGroupDescription() : grouping_type(0) {}
    -
    1956 SampleGroupDescription::~SampleGroupDescription() {}
    -
    1957 FourCC SampleGroupDescription::BoxType() const { return FOURCC_SGPD; }
    +
    1941 SampleToGroup::SampleToGroup() : grouping_type(0), grouping_type_parameter(0) {}
    +
    1942 SampleToGroup::~SampleToGroup() {}
    +
    1943 FourCC SampleToGroup::BoxType() const { return FOURCC_SBGP; }
    +
    1944 
    +
    1945 bool SampleToGroup::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1946  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    1947  buffer->ReadWriteUInt32(&grouping_type));
    +
    1948  if (version == 1)
    +
    1949  RCHECK(buffer->ReadWriteUInt32(&grouping_type_parameter));
    +
    1950 
    +
    1951  if (grouping_type != FOURCC_SEIG) {
    +
    1952  DCHECK(buffer->Reading());
    +
    1953  DLOG(WARNING) << "Sample group "
    +
    1954  << FourCCToString(static_cast<FourCC>(grouping_type))
    +
    1955  << " is not supported.";
    +
    1956  return true;
    +
    1957  }
    1958 
    -
    1959 bool SampleGroupDescription::ReadWriteInternal(BoxBuffer* buffer) {
    -
    1960  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    1961  buffer->ReadWriteUInt32(&grouping_type));
    -
    1962 
    -
    1963  if (grouping_type != FOURCC_SEIG) {
    -
    1964  DCHECK(buffer->Reading());
    -
    1965  DLOG(WARNING) << "Sample group '" << grouping_type << "' is not supported.";
    -
    1966  return true;
    -
    1967  }
    +
    1959  uint32_t count = entries.size();
    +
    1960  RCHECK(buffer->ReadWriteUInt32(&count));
    +
    1961  entries.resize(count);
    +
    1962  for (uint32_t i = 0; i < count; ++i) {
    +
    1963  RCHECK(buffer->ReadWriteUInt32(&entries[i].sample_count) &&
    +
    1964  buffer->ReadWriteUInt32(&entries[i].group_description_index));
    +
    1965  }
    +
    1966  return true;
    +
    1967 }
    1968 
    -
    1969  const size_t kEntrySize = sizeof(uint32_t) + kCencKeyIdSize;
    -
    1970  uint32_t default_length = 0;
    -
    1971  if (version == 1) {
    -
    1972  if (buffer->Reading()) {
    -
    1973  RCHECK(buffer->ReadWriteUInt32(&default_length));
    -
    1974  RCHECK(default_length == 0 || default_length >= kEntrySize);
    -
    1975  } else {
    -
    1976  default_length = kEntrySize;
    -
    1977  RCHECK(buffer->ReadWriteUInt32(&default_length));
    -
    1978  }
    -
    1979  }
    -
    1980 
    -
    1981  uint32_t count = entries.size();
    -
    1982  RCHECK(buffer->ReadWriteUInt32(&count));
    -
    1983  entries.resize(count);
    -
    1984  for (uint32_t i = 0; i < count; ++i) {
    -
    1985  if (version == 1) {
    -
    1986  if (buffer->Reading() && default_length == 0) {
    -
    1987  uint32_t description_length = 0;
    -
    1988  RCHECK(buffer->ReadWriteUInt32(&description_length));
    -
    1989  RCHECK(description_length >= kEntrySize);
    -
    1990  }
    -
    1991  }
    -
    1992 
    -
    1993  if (!buffer->Reading()) {
    -
    1994  if (entries[i].key_id.size() != kCencKeyIdSize) {
    -
    1995  LOG(WARNING) << "CENC defines key id length of " << kCencKeyIdSize
    -
    1996  << " bytes; got " << entries[i].key_id.size()
    -
    1997  << ". Resized accordingly.";
    -
    1998  entries[i].key_id.resize(kCencKeyIdSize);
    -
    1999  }
    -
    2000  }
    -
    2001 
    -
    2002  uint8_t flag = entries[i].is_encrypted ? 1 : 0;
    -
    2003  RCHECK(buffer->IgnoreBytes(2) && // reserved.
    -
    2004  buffer->ReadWriteUInt8(&flag) &&
    -
    2005  buffer->ReadWriteUInt8(&entries[i].iv_size) &&
    -
    2006  buffer->ReadWriteVector(&entries[i].key_id, kCencKeyIdSize));
    -
    2007 
    -
    2008  if (buffer->Reading()) {
    -
    2009  entries[i].is_encrypted = (flag != 0);
    -
    2010  if (entries[i].is_encrypted) {
    -
    2011  RCHECK(entries[i].iv_size == 8 || entries[i].iv_size == 16);
    -
    2012  } else {
    -
    2013  RCHECK(entries[i].iv_size == 0);
    -
    2014  }
    -
    2015  }
    -
    2016  }
    -
    2017  return true;
    -
    2018 }
    -
    2019 
    -
    2020 uint32_t SampleGroupDescription::ComputeSizeInternal() {
    -
    2021  // Version 0 is obsoleted, so always generate version 1 box.
    -
    2022  version = 1;
    -
    2023  // This box is optional. Skip it if it is not used.
    -
    2024  if (entries.empty())
    -
    2025  return 0;
    -
    2026  const size_t kEntrySize = sizeof(uint32_t) + kCencKeyIdSize;
    -
    2027  return HeaderSize() + sizeof(grouping_type) +
    -
    2028  (version == 1 ? sizeof(uint32_t) : 0) + sizeof(uint32_t) +
    -
    2029  entries.size() * kEntrySize;
    -
    2030 }
    -
    2031 
    -
    2032 TrackFragment::TrackFragment() : decode_time_absent(false) {}
    -
    2033 TrackFragment::~TrackFragment() {}
    -
    2034 FourCC TrackFragment::BoxType() const { return FOURCC_TRAF; }
    +
    1969 uint32_t SampleToGroup::ComputeSizeInternal() {
    +
    1970  // This box is optional. Skip it if it is not used.
    +
    1971  if (entries.empty())
    +
    1972  return 0;
    +
    1973  return HeaderSize() + sizeof(grouping_type) +
    +
    1974  (version == 1 ? sizeof(grouping_type_parameter) : 0) +
    +
    1975  sizeof(uint32_t) + entries.size() * sizeof(entries[0]);
    +
    1976 }
    +
    1977 
    +
    1978 CencSampleEncryptionInfoEntry::CencSampleEncryptionInfoEntry()
    +
    1979  : is_encrypted(false), iv_size(0) {
    +
    1980 }
    +
    1981 CencSampleEncryptionInfoEntry::~CencSampleEncryptionInfoEntry() {};
    +
    1982 
    +
    1983 SampleGroupDescription::SampleGroupDescription() : grouping_type(0) {}
    +
    1984 SampleGroupDescription::~SampleGroupDescription() {}
    +
    1985 FourCC SampleGroupDescription::BoxType() const { return FOURCC_SGPD; }
    +
    1986 
    +
    1987 bool SampleGroupDescription::ReadWriteInternal(BoxBuffer* buffer) {
    +
    1988  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    1989  buffer->ReadWriteUInt32(&grouping_type));
    +
    1990 
    +
    1991  if (grouping_type != FOURCC_SEIG) {
    +
    1992  DCHECK(buffer->Reading());
    +
    1993  DLOG(WARNING) << "Sample group '" << grouping_type << "' is not supported.";
    +
    1994  return true;
    +
    1995  }
    +
    1996 
    +
    1997  const size_t kEntrySize = sizeof(uint32_t) + kCencKeyIdSize;
    +
    1998  uint32_t default_length = 0;
    +
    1999  if (version == 1) {
    +
    2000  if (buffer->Reading()) {
    +
    2001  RCHECK(buffer->ReadWriteUInt32(&default_length));
    +
    2002  RCHECK(default_length == 0 || default_length >= kEntrySize);
    +
    2003  } else {
    +
    2004  default_length = kEntrySize;
    +
    2005  RCHECK(buffer->ReadWriteUInt32(&default_length));
    +
    2006  }
    +
    2007  }
    +
    2008 
    +
    2009  uint32_t count = entries.size();
    +
    2010  RCHECK(buffer->ReadWriteUInt32(&count));
    +
    2011  entries.resize(count);
    +
    2012  for (uint32_t i = 0; i < count; ++i) {
    +
    2013  if (version == 1) {
    +
    2014  if (buffer->Reading() && default_length == 0) {
    +
    2015  uint32_t description_length = 0;
    +
    2016  RCHECK(buffer->ReadWriteUInt32(&description_length));
    +
    2017  RCHECK(description_length >= kEntrySize);
    +
    2018  }
    +
    2019  }
    +
    2020 
    +
    2021  if (!buffer->Reading()) {
    +
    2022  if (entries[i].key_id.size() != kCencKeyIdSize) {
    +
    2023  LOG(WARNING) << "CENC defines key id length of " << kCencKeyIdSize
    +
    2024  << " bytes; got " << entries[i].key_id.size()
    +
    2025  << ". Resized accordingly.";
    +
    2026  entries[i].key_id.resize(kCencKeyIdSize);
    +
    2027  }
    +
    2028  }
    +
    2029 
    +
    2030  uint8_t flag = entries[i].is_encrypted ? 1 : 0;
    +
    2031  RCHECK(buffer->IgnoreBytes(2) && // reserved.
    +
    2032  buffer->ReadWriteUInt8(&flag) &&
    +
    2033  buffer->ReadWriteUInt8(&entries[i].iv_size) &&
    +
    2034  buffer->ReadWriteVector(&entries[i].key_id, kCencKeyIdSize));
    2035 
    -
    2036 bool TrackFragment::ReadWriteInternal(BoxBuffer* buffer) {
    -
    2037  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    2038  buffer->PrepareChildren() &&
    -
    2039  buffer->ReadWriteChild(&header));
    -
    2040  if (buffer->Reading()) {
    -
    2041  DCHECK(buffer->reader());
    -
    2042  decode_time_absent = !buffer->reader()->ChildExist(&decode_time);
    -
    2043  if (!decode_time_absent)
    -
    2044  RCHECK(buffer->ReadWriteChild(&decode_time));
    -
    2045  RCHECK(buffer->reader()->TryReadChildren(&runs));
    -
    2046 
    -
    2047  // There could be multiple SampleGroupDescription and SampleToGroup boxes
    -
    2048  // with different grouping types. For common encryption, the relevant
    -
    2049  // grouping type is 'seig'. Continue reading until 'seig' is found, or
    -
    2050  // until running out of child boxes.
    -
    2051  while (sample_to_group.grouping_type != FOURCC_SEIG &&
    -
    2052  buffer->reader()->ChildExist(&sample_to_group)) {
    -
    2053  RCHECK(buffer->reader()->ReadChild(&sample_to_group));
    -
    2054  }
    -
    2055  while (sample_group_description.grouping_type != FOURCC_SEIG &&
    -
    2056  buffer->reader()->ChildExist(&sample_group_description)) {
    -
    2057  RCHECK(buffer->reader()->ReadChild(&sample_group_description));
    -
    2058  }
    -
    2059  } else {
    -
    2060  if (!decode_time_absent)
    -
    2061  RCHECK(buffer->ReadWriteChild(&decode_time));
    -
    2062  for (uint32_t i = 0; i < runs.size(); ++i)
    -
    2063  RCHECK(buffer->ReadWriteChild(&runs[i]));
    -
    2064  RCHECK(buffer->TryReadWriteChild(&sample_to_group) &&
    -
    2065  buffer->TryReadWriteChild(&sample_group_description));
    -
    2066  }
    -
    2067  return buffer->TryReadWriteChild(&auxiliary_size) &&
    -
    2068  buffer->TryReadWriteChild(&auxiliary_offset) &&
    -
    2069  buffer->TryReadWriteChild(&sample_encryption);
    -
    2070 }
    -
    2071 
    -
    2072 uint32_t TrackFragment::ComputeSizeInternal() {
    -
    2073  uint32_t box_size =
    -
    2074  HeaderSize() + header.ComputeSize() + decode_time.ComputeSize() +
    -
    2075  sample_to_group.ComputeSize() + sample_group_description.ComputeSize() +
    -
    2076  auxiliary_size.ComputeSize() + auxiliary_offset.ComputeSize() +
    -
    2077  sample_encryption.ComputeSize();
    -
    2078  for (uint32_t i = 0; i < runs.size(); ++i)
    -
    2079  box_size += runs[i].ComputeSize();
    -
    2080  return box_size;
    -
    2081 }
    -
    2082 
    -
    2083 MovieFragment::MovieFragment() {}
    -
    2084 MovieFragment::~MovieFragment() {}
    -
    2085 FourCC MovieFragment::BoxType() const { return FOURCC_MOOF; }
    -
    2086 
    -
    2087 bool MovieFragment::ReadWriteInternal(BoxBuffer* buffer) {
    -
    2088  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    2089  buffer->PrepareChildren() &&
    -
    2090  buffer->ReadWriteChild(&header));
    -
    2091  if (buffer->Reading()) {
    -
    2092  BoxReader* reader = buffer->reader();
    -
    2093  DCHECK(reader);
    -
    2094  RCHECK(reader->ReadChildren(&tracks) &&
    -
    2095  reader->TryReadChildren(&pssh));
    -
    2096  } else {
    -
    2097  for (uint32_t i = 0; i < tracks.size(); ++i)
    -
    2098  RCHECK(buffer->ReadWriteChild(&tracks[i]));
    -
    2099  for (uint32_t i = 0; i < pssh.size(); ++i)
    -
    2100  RCHECK(buffer->ReadWriteChild(&pssh[i]));
    -
    2101  }
    -
    2102  return true;
    -
    2103 }
    -
    2104 
    -
    2105 uint32_t MovieFragment::ComputeSizeInternal() {
    -
    2106  uint32_t box_size = HeaderSize() + header.ComputeSize();
    -
    2107  for (uint32_t i = 0; i < tracks.size(); ++i)
    -
    2108  box_size += tracks[i].ComputeSize();
    -
    2109  for (uint32_t i = 0; i < pssh.size(); ++i)
    -
    2110  box_size += pssh[i].ComputeSize();
    -
    2111  return box_size;
    -
    2112 }
    -
    2113 
    -
    2114 SegmentIndex::SegmentIndex()
    -
    2115  : reference_id(0),
    -
    2116  timescale(0),
    -
    2117  earliest_presentation_time(0),
    -
    2118  first_offset(0) {}
    -
    2119 SegmentIndex::~SegmentIndex() {}
    -
    2120 FourCC SegmentIndex::BoxType() const { return FOURCC_SIDX; }
    -
    2121 
    -
    2122 bool SegmentIndex::ReadWriteInternal(BoxBuffer* buffer) {
    -
    2123  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    2124  buffer->ReadWriteUInt32(&reference_id) &&
    -
    2125  buffer->ReadWriteUInt32(&timescale));
    -
    2126 
    -
    2127  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    -
    2128  RCHECK(
    -
    2129  buffer->ReadWriteUInt64NBytes(&earliest_presentation_time, num_bytes) &&
    -
    2130  buffer->ReadWriteUInt64NBytes(&first_offset, num_bytes));
    -
    2131 
    -
    2132  uint16_t reference_count = references.size();
    -
    2133  RCHECK(buffer->IgnoreBytes(2) && // reserved.
    -
    2134  buffer->ReadWriteUInt16(&reference_count));
    -
    2135  references.resize(reference_count);
    -
    2136 
    -
    2137  uint32_t reference_type_size;
    -
    2138  uint32_t sap;
    -
    2139  for (uint32_t i = 0; i < reference_count; ++i) {
    -
    2140  if (!buffer->Reading()) {
    -
    2141  reference_type_size = references[i].referenced_size;
    -
    2142  if (references[i].reference_type)
    -
    2143  reference_type_size |= (1 << 31);
    -
    2144  sap = (references[i].sap_type << 28) | references[i].sap_delta_time;
    -
    2145  if (references[i].starts_with_sap)
    -
    2146  sap |= (1 << 31);
    -
    2147  }
    -
    2148  RCHECK(buffer->ReadWriteUInt32(&reference_type_size) &&
    -
    2149  buffer->ReadWriteUInt32(&references[i].subsegment_duration) &&
    -
    2150  buffer->ReadWriteUInt32(&sap));
    -
    2151  if (buffer->Reading()) {
    -
    2152  references[i].reference_type = (reference_type_size >> 31) ? true : false;
    -
    2153  references[i].referenced_size = reference_type_size & ~(1 << 31);
    -
    2154  references[i].starts_with_sap = (sap >> 31) ? true : false;
    -
    2155  references[i].sap_type =
    -
    2156  static_cast<SegmentReference::SAPType>((sap >> 28) & 0x07);
    -
    2157  references[i].sap_delta_time = sap & ~(0xF << 28);
    -
    2158  }
    -
    2159  }
    -
    2160  return true;
    -
    2161 }
    -
    2162 
    -
    2163 uint32_t SegmentIndex::ComputeSizeInternal() {
    -
    2164  version = IsFitIn32Bits(earliest_presentation_time, first_offset) ? 0 : 1;
    -
    2165  return HeaderSize() + sizeof(reference_id) + sizeof(timescale) +
    -
    2166  sizeof(uint32_t) * (1 + version) * 2 + 2 * sizeof(uint16_t) +
    -
    2167  3 * sizeof(uint32_t) * references.size();
    -
    2168 }
    -
    2169 
    -
    2170 MediaData::MediaData() : data_size(0) {}
    -
    2171 MediaData::~MediaData() {}
    -
    2172 FourCC MediaData::BoxType() const { return FOURCC_MDAT; }
    -
    2173 
    -
    2174 bool MediaData::ReadWriteInternal(BoxBuffer* buffer) {
    -
    2175  NOTIMPLEMENTED() << "Actual data is parsed and written separately.";
    -
    2176  return false;
    -
    2177 }
    -
    2178 
    -
    2179 uint32_t MediaData::ComputeSizeInternal() {
    -
    2180  return HeaderSize() + data_size;
    -
    2181 }
    -
    2182 
    -
    2183 CueSourceIDBox::CueSourceIDBox() : source_id(kCueSourceIdNotSet) {}
    -
    2184 CueSourceIDBox::~CueSourceIDBox() {}
    -
    2185 
    -
    2186 FourCC CueSourceIDBox::BoxType() const { return FOURCC_vsid; }
    -
    2187 
    -
    2188 bool CueSourceIDBox::ReadWriteInternal(BoxBuffer* buffer) {
    -
    2189  RCHECK(ReadWriteHeaderInternal(buffer) && buffer->ReadWriteInt32(&source_id));
    -
    2190  return true;
    -
    2191 }
    -
    2192 
    -
    2193 uint32_t CueSourceIDBox::ComputeSizeInternal() {
    -
    2194  if (source_id == kCueSourceIdNotSet)
    -
    2195  return 0;
    -
    2196  return HeaderSize() + sizeof(source_id);
    -
    2197 }
    -
    2198 
    -
    2199 CueTimeBox::CueTimeBox() {}
    -
    2200 CueTimeBox::~CueTimeBox() {}
    +
    2036  if (buffer->Reading()) {
    +
    2037  entries[i].is_encrypted = (flag != 0);
    +
    2038  if (entries[i].is_encrypted) {
    +
    2039  RCHECK(entries[i].iv_size == 8 || entries[i].iv_size == 16);
    +
    2040  } else {
    +
    2041  RCHECK(entries[i].iv_size == 0);
    +
    2042  }
    +
    2043  }
    +
    2044  }
    +
    2045  return true;
    +
    2046 }
    +
    2047 
    +
    2048 uint32_t SampleGroupDescription::ComputeSizeInternal() {
    +
    2049  // Version 0 is obsoleted, so always generate version 1 box.
    +
    2050  version = 1;
    +
    2051  // This box is optional. Skip it if it is not used.
    +
    2052  if (entries.empty())
    +
    2053  return 0;
    +
    2054  const size_t kEntrySize = sizeof(uint32_t) + kCencKeyIdSize;
    +
    2055  return HeaderSize() + sizeof(grouping_type) +
    +
    2056  (version == 1 ? sizeof(uint32_t) : 0) + sizeof(uint32_t) +
    +
    2057  entries.size() * kEntrySize;
    +
    2058 }
    +
    2059 
    +
    2060 TrackFragment::TrackFragment() : decode_time_absent(false) {}
    +
    2061 TrackFragment::~TrackFragment() {}
    +
    2062 FourCC TrackFragment::BoxType() const { return FOURCC_TRAF; }
    +
    2063 
    +
    2064 bool TrackFragment::ReadWriteInternal(BoxBuffer* buffer) {
    +
    2065  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    2066  buffer->PrepareChildren() &&
    +
    2067  buffer->ReadWriteChild(&header));
    +
    2068  if (buffer->Reading()) {
    +
    2069  DCHECK(buffer->reader());
    +
    2070  decode_time_absent = !buffer->reader()->ChildExist(&decode_time);
    +
    2071  if (!decode_time_absent)
    +
    2072  RCHECK(buffer->ReadWriteChild(&decode_time));
    +
    2073  RCHECK(buffer->reader()->TryReadChildren(&runs));
    +
    2074 
    +
    2075  // There could be multiple SampleGroupDescription and SampleToGroup boxes
    +
    2076  // with different grouping types. For common encryption, the relevant
    +
    2077  // grouping type is 'seig'. Continue reading until 'seig' is found, or
    +
    2078  // until running out of child boxes.
    +
    2079  while (sample_to_group.grouping_type != FOURCC_SEIG &&
    +
    2080  buffer->reader()->ChildExist(&sample_to_group)) {
    +
    2081  RCHECK(buffer->reader()->ReadChild(&sample_to_group));
    +
    2082  }
    +
    2083  while (sample_group_description.grouping_type != FOURCC_SEIG &&
    +
    2084  buffer->reader()->ChildExist(&sample_group_description)) {
    +
    2085  RCHECK(buffer->reader()->ReadChild(&sample_group_description));
    +
    2086  }
    +
    2087  } else {
    +
    2088  if (!decode_time_absent)
    +
    2089  RCHECK(buffer->ReadWriteChild(&decode_time));
    +
    2090  for (uint32_t i = 0; i < runs.size(); ++i)
    +
    2091  RCHECK(buffer->ReadWriteChild(&runs[i]));
    +
    2092  RCHECK(buffer->TryReadWriteChild(&sample_to_group) &&
    +
    2093  buffer->TryReadWriteChild(&sample_group_description));
    +
    2094  }
    +
    2095  return buffer->TryReadWriteChild(&auxiliary_size) &&
    +
    2096  buffer->TryReadWriteChild(&auxiliary_offset) &&
    +
    2097  buffer->TryReadWriteChild(&sample_encryption);
    +
    2098 }
    +
    2099 
    +
    2100 uint32_t TrackFragment::ComputeSizeInternal() {
    +
    2101  uint32_t box_size =
    +
    2102  HeaderSize() + header.ComputeSize() + decode_time.ComputeSize() +
    +
    2103  sample_to_group.ComputeSize() + sample_group_description.ComputeSize() +
    +
    2104  auxiliary_size.ComputeSize() + auxiliary_offset.ComputeSize() +
    +
    2105  sample_encryption.ComputeSize();
    +
    2106  for (uint32_t i = 0; i < runs.size(); ++i)
    +
    2107  box_size += runs[i].ComputeSize();
    +
    2108  return box_size;
    +
    2109 }
    +
    2110 
    +
    2111 MovieFragment::MovieFragment() {}
    +
    2112 MovieFragment::~MovieFragment() {}
    +
    2113 FourCC MovieFragment::BoxType() const { return FOURCC_MOOF; }
    +
    2114 
    +
    2115 bool MovieFragment::ReadWriteInternal(BoxBuffer* buffer) {
    +
    2116  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    2117  buffer->PrepareChildren() &&
    +
    2118  buffer->ReadWriteChild(&header));
    +
    2119  if (buffer->Reading()) {
    +
    2120  BoxReader* reader = buffer->reader();
    +
    2121  DCHECK(reader);
    +
    2122  RCHECK(reader->ReadChildren(&tracks) &&
    +
    2123  reader->TryReadChildren(&pssh));
    +
    2124  } else {
    +
    2125  for (uint32_t i = 0; i < tracks.size(); ++i)
    +
    2126  RCHECK(buffer->ReadWriteChild(&tracks[i]));
    +
    2127  for (uint32_t i = 0; i < pssh.size(); ++i)
    +
    2128  RCHECK(buffer->ReadWriteChild(&pssh[i]));
    +
    2129  }
    +
    2130  return true;
    +
    2131 }
    +
    2132 
    +
    2133 uint32_t MovieFragment::ComputeSizeInternal() {
    +
    2134  uint32_t box_size = HeaderSize() + header.ComputeSize();
    +
    2135  for (uint32_t i = 0; i < tracks.size(); ++i)
    +
    2136  box_size += tracks[i].ComputeSize();
    +
    2137  for (uint32_t i = 0; i < pssh.size(); ++i)
    +
    2138  box_size += pssh[i].ComputeSize();
    +
    2139  return box_size;
    +
    2140 }
    +
    2141 
    +
    2142 SegmentIndex::SegmentIndex()
    +
    2143  : reference_id(0),
    +
    2144  timescale(0),
    +
    2145  earliest_presentation_time(0),
    +
    2146  first_offset(0) {}
    +
    2147 SegmentIndex::~SegmentIndex() {}
    +
    2148 FourCC SegmentIndex::BoxType() const { return FOURCC_SIDX; }
    +
    2149 
    +
    2150 bool SegmentIndex::ReadWriteInternal(BoxBuffer* buffer) {
    +
    2151  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    2152  buffer->ReadWriteUInt32(&reference_id) &&
    +
    2153  buffer->ReadWriteUInt32(&timescale));
    +
    2154 
    +
    2155  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
    +
    2156  RCHECK(
    +
    2157  buffer->ReadWriteUInt64NBytes(&earliest_presentation_time, num_bytes) &&
    +
    2158  buffer->ReadWriteUInt64NBytes(&first_offset, num_bytes));
    +
    2159 
    +
    2160  uint16_t reference_count = references.size();
    +
    2161  RCHECK(buffer->IgnoreBytes(2) && // reserved.
    +
    2162  buffer->ReadWriteUInt16(&reference_count));
    +
    2163  references.resize(reference_count);
    +
    2164 
    +
    2165  uint32_t reference_type_size;
    +
    2166  uint32_t sap;
    +
    2167  for (uint32_t i = 0; i < reference_count; ++i) {
    +
    2168  if (!buffer->Reading()) {
    +
    2169  reference_type_size = references[i].referenced_size;
    +
    2170  if (references[i].reference_type)
    +
    2171  reference_type_size |= (1 << 31);
    +
    2172  sap = (references[i].sap_type << 28) | references[i].sap_delta_time;
    +
    2173  if (references[i].starts_with_sap)
    +
    2174  sap |= (1 << 31);
    +
    2175  }
    +
    2176  RCHECK(buffer->ReadWriteUInt32(&reference_type_size) &&
    +
    2177  buffer->ReadWriteUInt32(&references[i].subsegment_duration) &&
    +
    2178  buffer->ReadWriteUInt32(&sap));
    +
    2179  if (buffer->Reading()) {
    +
    2180  references[i].reference_type = (reference_type_size >> 31) ? true : false;
    +
    2181  references[i].referenced_size = reference_type_size & ~(1 << 31);
    +
    2182  references[i].starts_with_sap = (sap >> 31) ? true : false;
    +
    2183  references[i].sap_type =
    +
    2184  static_cast<SegmentReference::SAPType>((sap >> 28) & 0x07);
    +
    2185  references[i].sap_delta_time = sap & ~(0xF << 28);
    +
    2186  }
    +
    2187  }
    +
    2188  return true;
    +
    2189 }
    +
    2190 
    +
    2191 uint32_t SegmentIndex::ComputeSizeInternal() {
    +
    2192  version = IsFitIn32Bits(earliest_presentation_time, first_offset) ? 0 : 1;
    +
    2193  return HeaderSize() + sizeof(reference_id) + sizeof(timescale) +
    +
    2194  sizeof(uint32_t) * (1 + version) * 2 + 2 * sizeof(uint16_t) +
    +
    2195  3 * sizeof(uint32_t) * references.size();
    +
    2196 }
    +
    2197 
    +
    2198 MediaData::MediaData() : data_size(0) {}
    +
    2199 MediaData::~MediaData() {}
    +
    2200 FourCC MediaData::BoxType() const { return FOURCC_MDAT; }
    2201 
    -
    2202 FourCC CueTimeBox::BoxType() const {
    -
    2203  return FOURCC_ctim;
    -
    2204 }
    -
    2205 
    -
    2206 bool CueTimeBox::ReadWriteInternal(BoxBuffer* buffer) {
    -
    2207  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    2208  return buffer->ReadWriteString(
    -
    2209  &cue_current_time,
    -
    2210  buffer->Reading() ? buffer->BytesLeft() : cue_current_time.size());
    -
    2211 }
    -
    2212 
    -
    2213 uint32_t CueTimeBox::ComputeSizeInternal() {
    -
    2214  if (cue_current_time.empty())
    -
    2215  return 0;
    -
    2216  return HeaderSize() + cue_current_time.size();
    -
    2217 }
    -
    2218 
    -
    2219 CueIDBox::CueIDBox() {}
    -
    2220 CueIDBox::~CueIDBox() {}
    -
    2221 
    -
    2222 FourCC CueIDBox::BoxType() const {
    -
    2223  return FOURCC_iden;
    -
    2224 }
    -
    2225 
    -
    2226 bool CueIDBox::ReadWriteInternal(BoxBuffer* buffer) {
    -
    2227  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    2228  return buffer->ReadWriteString(
    -
    2229  &cue_id, buffer->Reading() ? buffer->BytesLeft() : cue_id.size());
    -
    2230 }
    -
    2231 
    -
    2232 uint32_t CueIDBox::ComputeSizeInternal() {
    -
    2233  if (cue_id.empty())
    -
    2234  return 0;
    -
    2235  return HeaderSize() + cue_id.size();
    -
    2236 }
    -
    2237 
    -
    2238 CueSettingsBox::CueSettingsBox() {}
    -
    2239 CueSettingsBox::~CueSettingsBox() {}
    +
    2202 bool MediaData::ReadWriteInternal(BoxBuffer* buffer) {
    +
    2203  NOTIMPLEMENTED() << "Actual data is parsed and written separately.";
    +
    2204  return false;
    +
    2205 }
    +
    2206 
    +
    2207 uint32_t MediaData::ComputeSizeInternal() {
    +
    2208  return HeaderSize() + data_size;
    +
    2209 }
    +
    2210 
    +
    2211 CueSourceIDBox::CueSourceIDBox() : source_id(kCueSourceIdNotSet) {}
    +
    2212 CueSourceIDBox::~CueSourceIDBox() {}
    +
    2213 
    +
    2214 FourCC CueSourceIDBox::BoxType() const { return FOURCC_vsid; }
    +
    2215 
    +
    2216 bool CueSourceIDBox::ReadWriteInternal(BoxBuffer* buffer) {
    +
    2217  RCHECK(ReadWriteHeaderInternal(buffer) && buffer->ReadWriteInt32(&source_id));
    +
    2218  return true;
    +
    2219 }
    +
    2220 
    +
    2221 uint32_t CueSourceIDBox::ComputeSizeInternal() {
    +
    2222  if (source_id == kCueSourceIdNotSet)
    +
    2223  return 0;
    +
    2224  return HeaderSize() + sizeof(source_id);
    +
    2225 }
    +
    2226 
    +
    2227 CueTimeBox::CueTimeBox() {}
    +
    2228 CueTimeBox::~CueTimeBox() {}
    +
    2229 
    +
    2230 FourCC CueTimeBox::BoxType() const {
    +
    2231  return FOURCC_ctim;
    +
    2232 }
    +
    2233 
    +
    2234 bool CueTimeBox::ReadWriteInternal(BoxBuffer* buffer) {
    +
    2235  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    2236  return buffer->ReadWriteString(
    +
    2237  &cue_current_time,
    +
    2238  buffer->Reading() ? buffer->BytesLeft() : cue_current_time.size());
    +
    2239 }
    2240 
    -
    2241 FourCC CueSettingsBox::BoxType() const {
    -
    2242  return FOURCC_sttg;
    -
    2243 }
    -
    2244 
    -
    2245 bool CueSettingsBox::ReadWriteInternal(BoxBuffer* buffer) {
    -
    2246  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    2247  return buffer->ReadWriteString(
    -
    2248  &settings, buffer->Reading() ? buffer->BytesLeft() : settings.size());
    -
    2249 }
    -
    2250 
    -
    2251 uint32_t CueSettingsBox::ComputeSizeInternal() {
    -
    2252  if (settings.empty())
    -
    2253  return 0;
    -
    2254  return HeaderSize() + settings.size();
    -
    2255 }
    -
    2256 
    -
    2257 CuePayloadBox::CuePayloadBox() {}
    -
    2258 CuePayloadBox::~CuePayloadBox() {}
    +
    2241 uint32_t CueTimeBox::ComputeSizeInternal() {
    +
    2242  if (cue_current_time.empty())
    +
    2243  return 0;
    +
    2244  return HeaderSize() + cue_current_time.size();
    +
    2245 }
    +
    2246 
    +
    2247 CueIDBox::CueIDBox() {}
    +
    2248 CueIDBox::~CueIDBox() {}
    +
    2249 
    +
    2250 FourCC CueIDBox::BoxType() const {
    +
    2251  return FOURCC_iden;
    +
    2252 }
    +
    2253 
    +
    2254 bool CueIDBox::ReadWriteInternal(BoxBuffer* buffer) {
    +
    2255  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    2256  return buffer->ReadWriteString(
    +
    2257  &cue_id, buffer->Reading() ? buffer->BytesLeft() : cue_id.size());
    +
    2258 }
    2259 
    -
    2260 FourCC CuePayloadBox::BoxType() const {
    -
    2261  return FOURCC_payl;
    -
    2262 }
    -
    2263 
    -
    2264 bool CuePayloadBox::ReadWriteInternal(BoxBuffer* buffer) {
    -
    2265  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    2266  return buffer->ReadWriteString(
    -
    2267  &cue_text, buffer->Reading() ? buffer->BytesLeft() : cue_text.size());
    -
    2268 }
    -
    2269 
    -
    2270 uint32_t CuePayloadBox::ComputeSizeInternal() {
    -
    2271  return HeaderSize() + cue_text.size();
    -
    2272 }
    -
    2273 
    -
    2274 VTTEmptyCueBox::VTTEmptyCueBox() {}
    -
    2275 VTTEmptyCueBox::~VTTEmptyCueBox() {}
    -
    2276 
    -
    2277 FourCC VTTEmptyCueBox::BoxType() const {
    -
    2278  return FOURCC_vtte;
    -
    2279 }
    -
    2280 
    -
    2281 bool VTTEmptyCueBox::ReadWriteInternal(BoxBuffer* buffer) {
    -
    2282  return ReadWriteHeaderInternal(buffer);
    +
    2260 uint32_t CueIDBox::ComputeSizeInternal() {
    +
    2261  if (cue_id.empty())
    +
    2262  return 0;
    +
    2263  return HeaderSize() + cue_id.size();
    +
    2264 }
    +
    2265 
    +
    2266 CueSettingsBox::CueSettingsBox() {}
    +
    2267 CueSettingsBox::~CueSettingsBox() {}
    +
    2268 
    +
    2269 FourCC CueSettingsBox::BoxType() const {
    +
    2270  return FOURCC_sttg;
    +
    2271 }
    +
    2272 
    +
    2273 bool CueSettingsBox::ReadWriteInternal(BoxBuffer* buffer) {
    +
    2274  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    2275  return buffer->ReadWriteString(
    +
    2276  &settings, buffer->Reading() ? buffer->BytesLeft() : settings.size());
    +
    2277 }
    +
    2278 
    +
    2279 uint32_t CueSettingsBox::ComputeSizeInternal() {
    +
    2280  if (settings.empty())
    +
    2281  return 0;
    +
    2282  return HeaderSize() + settings.size();
    2283 }
    2284 
    -
    2285 uint32_t VTTEmptyCueBox::ComputeSizeInternal() {
    -
    2286  return HeaderSize();
    -
    2287 }
    -
    2288 
    -
    2289 VTTAdditionalTextBox::VTTAdditionalTextBox() {}
    -
    2290 VTTAdditionalTextBox::~VTTAdditionalTextBox() {}
    +
    2285 CuePayloadBox::CuePayloadBox() {}
    +
    2286 CuePayloadBox::~CuePayloadBox() {}
    +
    2287 
    +
    2288 FourCC CuePayloadBox::BoxType() const {
    +
    2289  return FOURCC_payl;
    +
    2290 }
    2291 
    - -
    2293  return FOURCC_vtta;
    -
    2294 }
    -
    2295 
    -
    2296 bool VTTAdditionalTextBox::ReadWriteInternal(BoxBuffer* buffer) {
    -
    2297  RCHECK(ReadWriteHeaderInternal(buffer));
    -
    2298  return buffer->ReadWriteString(
    -
    2299  &cue_additional_text,
    -
    2300  buffer->Reading() ? buffer->BytesLeft() : cue_additional_text.size());
    -
    2301 }
    -
    2302 
    -
    2303 uint32_t VTTAdditionalTextBox::ComputeSizeInternal() {
    -
    2304  return HeaderSize() + cue_additional_text.size();
    -
    2305 }
    -
    2306 
    -
    2307 VTTCueBox::VTTCueBox() {}
    -
    2308 VTTCueBox::~VTTCueBox() {}
    -
    2309 
    -
    2310 FourCC VTTCueBox::BoxType() const {
    -
    2311  return FOURCC_vttc;
    -
    2312 }
    -
    2313 
    -
    2314 bool VTTCueBox::ReadWriteInternal(BoxBuffer* buffer) {
    -
    2315  RCHECK(ReadWriteHeaderInternal(buffer) &&
    -
    2316  buffer->PrepareChildren() &&
    -
    2317  buffer->ReadWriteChild(&cue_source_id) &&
    -
    2318  buffer->ReadWriteChild(&cue_id) &&
    -
    2319  buffer->ReadWriteChild(&cue_time) &&
    -
    2320  buffer->ReadWriteChild(&cue_settings) &&
    -
    2321  buffer->ReadWriteChild(&cue_payload));
    -
    2322  return true;
    -
    2323 }
    -
    2324 
    -
    2325 uint32_t VTTCueBox::ComputeSizeInternal() {
    -
    2326  return HeaderSize() + cue_source_id.ComputeSize() + cue_id.ComputeSize() +
    -
    2327  cue_time.ComputeSize() + cue_settings.ComputeSize() +
    -
    2328  cue_payload.ComputeSize();
    +
    2292 bool CuePayloadBox::ReadWriteInternal(BoxBuffer* buffer) {
    +
    2293  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    2294  return buffer->ReadWriteString(
    +
    2295  &cue_text, buffer->Reading() ? buffer->BytesLeft() : cue_text.size());
    +
    2296 }
    +
    2297 
    +
    2298 uint32_t CuePayloadBox::ComputeSizeInternal() {
    +
    2299  return HeaderSize() + cue_text.size();
    +
    2300 }
    +
    2301 
    +
    2302 VTTEmptyCueBox::VTTEmptyCueBox() {}
    +
    2303 VTTEmptyCueBox::~VTTEmptyCueBox() {}
    +
    2304 
    +
    2305 FourCC VTTEmptyCueBox::BoxType() const {
    +
    2306  return FOURCC_vtte;
    +
    2307 }
    +
    2308 
    +
    2309 bool VTTEmptyCueBox::ReadWriteInternal(BoxBuffer* buffer) {
    +
    2310  return ReadWriteHeaderInternal(buffer);
    +
    2311 }
    +
    2312 
    +
    2313 uint32_t VTTEmptyCueBox::ComputeSizeInternal() {
    +
    2314  return HeaderSize();
    +
    2315 }
    +
    2316 
    +
    2317 VTTAdditionalTextBox::VTTAdditionalTextBox() {}
    +
    2318 VTTAdditionalTextBox::~VTTAdditionalTextBox() {}
    +
    2319 
    + +
    2321  return FOURCC_vtta;
    +
    2322 }
    +
    2323 
    +
    2324 bool VTTAdditionalTextBox::ReadWriteInternal(BoxBuffer* buffer) {
    +
    2325  RCHECK(ReadWriteHeaderInternal(buffer));
    +
    2326  return buffer->ReadWriteString(
    +
    2327  &cue_additional_text,
    +
    2328  buffer->Reading() ? buffer->BytesLeft() : cue_additional_text.size());
    2329 }
    2330 
    -
    2331 } // namespace mp4
    -
    2332 } // namespace media
    -
    2333 } // namespace edash_packager
    - -
    FourCC BoxType() const override
    - - +
    2331 uint32_t VTTAdditionalTextBox::ComputeSizeInternal() {
    +
    2332  return HeaderSize() + cue_additional_text.size();
    +
    2333 }
    +
    2334 
    +
    2335 VTTCueBox::VTTCueBox() {}
    +
    2336 VTTCueBox::~VTTCueBox() {}
    +
    2337 
    +
    2338 FourCC VTTCueBox::BoxType() const {
    +
    2339  return FOURCC_vttc;
    +
    2340 }
    +
    2341 
    +
    2342 bool VTTCueBox::ReadWriteInternal(BoxBuffer* buffer) {
    +
    2343  RCHECK(ReadWriteHeaderInternal(buffer) &&
    +
    2344  buffer->PrepareChildren() &&
    +
    2345  buffer->ReadWriteChild(&cue_source_id) &&
    +
    2346  buffer->ReadWriteChild(&cue_id) &&
    +
    2347  buffer->ReadWriteChild(&cue_time) &&
    +
    2348  buffer->ReadWriteChild(&cue_settings) &&
    +
    2349  buffer->ReadWriteChild(&cue_payload));
    +
    2350  return true;
    +
    2351 }
    +
    2352 
    +
    2353 uint32_t VTTCueBox::ComputeSizeInternal() {
    +
    2354  return HeaderSize() + cue_source_id.ComputeSize() + cue_id.ComputeSize() +
    +
    2355  cue_time.ComputeSize() + cue_settings.ComputeSize() +
    +
    2356  cue_payload.ComputeSize();
    +
    2357 }
    +
    2358 
    +
    2359 } // namespace mp4
    +
    2360 } // namespace media
    +
    2361 } // namespace edash_packager
    + +
    FourCC BoxType() const override
    + +
    bool ReadChildren(std::vector< T > *children) WARN_UNUSED_RESULT
    Definition: box_reader.h:133
    - +
    bool ReadChild(Box *child) WARN_UNUSED_RESULT
    Definition: box_reader.cc:123
    - - - + + +
    virtual bool ReadWriteHeaderInternal(BoxBuffer *buffer)
    Definition: box.cc:60
    - - + +
    bool ReadWriteHeaderInternal(BoxBuffer *buffer) final
    Definition: box.cc:79
    - + - -
    bool ParseFromSampleEncryptionData(size_t iv_size, std::vector< SampleEncryptionEntry > *sample_encryption_entries) const
    + +
    bool ParseFromSampleEncryptionData(size_t iv_size, std::vector< SampleEncryptionEntry > *sample_encryption_entries) const
    - - - - - + + + + + - - + + - +
    bool ChildExist(Box *child) WARN_UNUSED_RESULT
    Definition: box_reader.cc:136
    - - + + - - - - - - + + + + + +
    bool ReadWriteUInt64NBytes(uint64_t *v, size_t num_bytes)
    Definition: box_buffer.h:117
    - - - - - - - - - - + + + + + + + + + + - - - + + +
    bool ReadWriteString(std::string *str, size_t size)
    Definition: box_buffer.h:139
    - - + +
    bool IgnoreBytes(size_t num_bytes)
    Definition: box_buffer.h:189
    A class to read bit streams.
    Definition: bit_reader.h:17
    - - + + - + - - - - + + + + - - + + - - + +
    virtual uint32_t HeaderSize() const
    Definition: box.cc:54
    - +
    void Write(BufferWriter *writer)
    Definition: box.cc:25
    - - -
    bool ParseFromBuffer(uint8_t iv_size, bool has_subsamples, BufferReader *reader)
    - - - - - + + +
    bool ParseFromBuffer(uint8_t iv_size, bool has_subsamples, BufferReader *reader)
    + + + + +
    bool TryReadChildren(std::vector< T > *children) WARN_UNUSED_RESULT
    Definition: box_reader.h:139
    Class for reading MP4 boxes.
    Definition: box_reader.h:24
    - - - - + + + + -
    bool ReadWrite(uint8_t iv_size, bool has_subsamples, BoxBuffer *buffer)
    +
    bool ReadWrite(uint8_t iv_size, bool has_subsamples, BoxBuffer *buffer)
    - - + +
    uint32_t HeaderSize() const final
    Definition: box.cc:74
    - - - + + + diff --git a/docs/dd/def/classedash__packager_1_1media_1_1TextTrackConfig.html b/docs/dd/def/classedash__packager_1_1media_1_1TextTrackConfig.html index 905e1ef83b..1f4dec85e6 100644 --- a/docs/dd/def/classedash__packager_1_1media_1_1TextTrackConfig.html +++ b/docs/dd/def/classedash__packager_1_1media_1_1TextTrackConfig.html @@ -125,7 +125,7 @@ const std::string & id diff --git a/docs/dd/df2/webm_2multi__segment__segmenter_8h_source.html b/docs/dd/df2/webm_2multi__segment__segmenter_8h_source.html index 2cdc6106dd..29cd1ac545 100644 --- a/docs/dd/df2/webm_2multi__segment__segmenter_8h_source.html +++ b/docs/dd/df2/webm_2multi__segment__segmenter_8h_source.html @@ -149,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dfa/structedash__packager_1_1media_1_1MuxerOptions-members.html b/docs/dd/dfa/structedash__packager_1_1media_1_1MuxerOptions-members.html index 00a6e49f49..dffb48666e 100644 --- a/docs/dd/dfa/structedash__packager_1_1media_1_1MuxerOptions-members.html +++ b/docs/dd/dfa/structedash__packager_1_1media_1_1MuxerOptions-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d07/structedash__packager_1_1media_1_1mp4_1_1CueIDBox.html b/docs/de/d07/structedash__packager_1_1media_1_1mp4_1_1CueIDBox.html index bc9ebfe900..1f54560c9a 100644 --- a/docs/de/d07/structedash__packager_1_1media_1_1mp4_1_1CueIDBox.html +++ b/docs/de/d07/structedash__packager_1_1media_1_1mp4_1_1CueIDBox.html @@ -136,7 +136,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 690 of file box_definitions.h.

    +

    Definition at line 694 of file box_definitions.h.

    Member Function Documentation

    @@ -162,7 +162,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 2222 of file box_definitions.cc.

    +

    Definition at line 2250 of file box_definitions.cc.

    @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/de/d0f/local__file_8h_source.html b/docs/de/d0f/local__file_8h_source.html index 985c0ddeb9..01d0e4d3ff 100644 --- a/docs/de/d0f/local__file_8h_source.html +++ b/docs/de/d0f/local__file_8h_source.html @@ -152,7 +152,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d12/container__names_8h_source.html b/docs/de/d12/container__names_8h_source.html index 4304c4f96a..c305737065 100644 --- a/docs/de/d12/container__names_8h_source.html +++ b/docs/de/d12/container__names_8h_source.html @@ -159,7 +159,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d15/media__stream_8cc_source.html b/docs/de/d15/media__stream_8cc_source.html index c150af6455..02f0b94897 100644 --- a/docs/de/d15/media__stream_8cc_source.html +++ b/docs/de/d15/media__stream_8cc_source.html @@ -210,7 +210,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d17/cluster__builder_8cc_source.html b/docs/de/d17/cluster__builder_8cc_source.html index 3fa09de680..80f90af230 100644 --- a/docs/de/d17/cluster__builder_8cc_source.html +++ b/docs/de/d17/cluster__builder_8cc_source.html @@ -330,7 +330,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d18/classedash__packager_1_1media_1_1WebVttMediaParser-members.html b/docs/de/d18/classedash__packager_1_1media_1_1WebVttMediaParser-members.html index 1c9465e51d..38b7d31fc8 100644 --- a/docs/de/d18/classedash__packager_1_1media_1_1WebVttMediaParser-members.html +++ b/docs/de/d18/classedash__packager_1_1media_1_1WebVttMediaParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d19/classedash__packager_1_1media_1_1File.html b/docs/de/d19/classedash__packager_1_1media_1_1File.html index c80019c73f..a4ac0926b3 100644 --- a/docs/de/d19/classedash__packager_1_1media_1_1File.html +++ b/docs/de/d19/classedash__packager_1_1media_1_1File.html @@ -811,7 +811,7 @@ class ThreadedIoFile diff --git a/docs/de/d1e/mp4_2single__segment__segmenter_8cc_source.html b/docs/de/d1e/mp4_2single__segment__segmenter_8cc_source.html index 8874902094..d78a1e6557 100644 --- a/docs/de/d1e/mp4_2single__segment__segmenter_8cc_source.html +++ b/docs/de/d1e/mp4_2single__segment__segmenter_8cc_source.html @@ -333,7 +333,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d1f/structedash__packager_1_1media_1_1StreamDescriptor.html b/docs/de/d1f/structedash__packager_1_1media_1_1StreamDescriptor.html index e85aaea623..9a0fd5bb8b 100644 --- a/docs/de/d1f/structedash__packager_1_1media_1_1StreamDescriptor.html +++ b/docs/de/d1f/structedash__packager_1_1media_1_1StreamDescriptor.html @@ -131,7 +131,7 @@ MediaContainerName output_ diff --git a/docs/de/d34/offset__byte__queue_8h_source.html b/docs/de/d34/offset__byte__queue_8h_source.html index 55bec29a32..92c193e0a7 100644 --- a/docs/de/d34/offset__byte__queue_8h_source.html +++ b/docs/de/d34/offset__byte__queue_8h_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d3e/buffer__reader_8h_source.html b/docs/de/d3e/buffer__reader_8h_source.html index 6ebaf55f71..7c50d3b387 100644 --- a/docs/de/d3e/buffer__reader_8h_source.html +++ b/docs/de/d3e/buffer__reader_8h_source.html @@ -163,7 +163,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html b/docs/de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html index fa13f3699f..34c6f5bf11 100644 --- a/docs/de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html +++ b/docs/de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html @@ -177,7 +177,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 359 of file box_definitions.cc.

    +

    Definition at line 375 of file box_definitions.cc.

    @@ -188,7 +188,7 @@ Additional Inherited Members diff --git a/docs/de/d48/classedash__packager_1_1media_1_1VP8Parser-members.html b/docs/de/d48/classedash__packager_1_1media_1_1VP8Parser-members.html index dc472bdb13..b947fb9124 100644 --- a/docs/de/d48/classedash__packager_1_1media_1_1VP8Parser-members.html +++ b/docs/de/d48/classedash__packager_1_1media_1_1VP8Parser-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d4a/muxer__listener__internal_8h_source.html b/docs/de/d4a/muxer__listener__internal_8h_source.html index 7be25997d5..151180ce43 100644 --- a/docs/de/d4a/muxer__listener__internal_8h_source.html +++ b/docs/de/d4a/muxer__listener__internal_8h_source.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d4c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat-members.html b/docs/de/d4c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat-members.html index 86a59d1fc4..211826cf52 100644 --- a/docs/de/d4c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat-members.html +++ b/docs/de/d4c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d57/structedash__packager_1_1media_1_1MuxerOptions.html b/docs/de/d57/structedash__packager_1_1media_1_1MuxerOptions.html index 7022e466d5..2f054e9e0b 100644 --- a/docs/de/d57/structedash__packager_1_1media_1_1MuxerOptions.html +++ b/docs/de/d57/structedash__packager_1_1media_1_1MuxerOptions.html @@ -271,7 +271,7 @@ std::string  diff --git a/docs/de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.html b/docs/de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.html index 24de2d173f..26f37a8b59 100644 --- a/docs/de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.html +++ b/docs/de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.html @@ -148,7 +148,7 @@ const scoped_refptr
    diff --git a/docs/de/d5a/structedash__packager_1_1media_1_1mp4_1_1SchemeType-members.html b/docs/de/d5a/structedash__packager_1_1media_1_1mp4_1_1SchemeType-members.html index 1589ba7c4f..0e7f74c430 100644 --- a/docs/de/d5a/structedash__packager_1_1media_1_1mp4_1_1SchemeType-members.html +++ b/docs/de/d5a/structedash__packager_1_1media_1_1mp4_1_1SchemeType-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d5b/adts__header_8cc_source.html b/docs/de/d5b/adts__header_8cc_source.html index f0e6e2c672..09c36a40d7 100644 --- a/docs/de/d5b/adts__header_8cc_source.html +++ b/docs/de/d5b/adts__header_8cc_source.html @@ -207,7 +207,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d5c/mpd__flags_8h_source.html b/docs/de/d5c/mpd__flags_8h_source.html index d3e7bf2d2b..8c82cf54eb 100644 --- a/docs/de/d5c/mpd__flags_8h_source.html +++ b/docs/de/d5c/mpd__flags_8h_source.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d68/structedash__packager_1_1media_1_1mp4_1_1Track-members.html b/docs/de/d68/structedash__packager_1_1media_1_1mp4_1_1Track-members.html index 20b2874ac7..2a45a60604 100644 --- a/docs/de/d68/structedash__packager_1_1media_1_1mp4_1_1Track-members.html +++ b/docs/de/d68/structedash__packager_1_1media_1_1mp4_1_1Track-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d6a/classedash__packager_1_1media_1_1webm_1_1WebMMuxer.html b/docs/de/d6a/classedash__packager_1_1media_1_1webm_1_1WebMMuxer.html index 4d07c5ccf3..04e1fb27ec 100644 --- a/docs/de/d6a/classedash__packager_1_1media_1_1webm_1_1WebMMuxer.html +++ b/docs/de/d6a/classedash__packager_1_1media_1_1webm_1_1WebMMuxer.html @@ -179,7 +179,7 @@ base::Clock * clock () diff --git a/docs/de/d6e/language__utils_8h_source.html b/docs/de/d6e/language__utils_8h_source.html index 2bb43b6c7b..5b106b414c 100644 --- a/docs/de/d6e/language__utils_8h_source.html +++ b/docs/de/d6e/language__utils_8h_source.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d70/http__key__fetcher_8cc_source.html b/docs/de/d70/http__key__fetcher_8cc_source.html index b9f51c5c10..293354f887 100644 --- a/docs/de/d70/http__key__fetcher_8cc_source.html +++ b/docs/de/d70/http__key__fetcher_8cc_source.html @@ -236,7 +236,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d77/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html b/docs/de/d77/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html index e691ba5aac..1d12efc412 100644 --- a/docs/de/d77/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html +++ b/docs/de/d77/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d77/webm__content__encodings__client_8cc_source.html b/docs/de/d77/webm__content__encodings__client_8cc_source.html index 428d03ba33..e9d5da397d 100644 --- a/docs/de/d77/webm__content__encodings__client_8cc_source.html +++ b/docs/de/d77/webm__content__encodings__client_8cc_source.html @@ -361,7 +361,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d7b/mp4__media__parser_8h_source.html b/docs/de/d7b/mp4__media__parser_8h_source.html index bc86f57a5f..840f2367dc 100644 --- a/docs/de/d7b/mp4__media__parser_8h_source.html +++ b/docs/de/d7b/mp4__media__parser_8h_source.html @@ -203,21 +203,21 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    123 #endif // MEDIA_FORMATS_MP4_MP4_MEDIA_PARSER_H_
    -
    bool Parse(const uint8_t *buf, int size) override
    +
    bool Parse(const uint8_t *buf, int size) override
    - -
    bool LoadMoov(const std::string &file_path)
    + +
    bool LoadMoov(const std::string &file_path)
    base::Callback< bool(uint32_t track_id, const scoped_refptr< MediaSample > &media_sample)> NewSampleCB
    Definition: media_parser.h:43
    KeySource is responsible for encryption key acquisition.
    Definition: key_source.h:29
    base::Callback< void(const std::vector< scoped_refptr< StreamInfo > > &stream_info)> InitCB
    Definition: media_parser.h:34
    -
    void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) override
    +
    void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) override
    Class for reading MP4 boxes.
    Definition: box_reader.h:24
    diff --git a/docs/de/d83/box__definitions__comparison_8h_source.html b/docs/de/d83/box__definitions__comparison_8h_source.html index 205523a4de..bf45f4f1ee 100644 --- a/docs/de/d83/box__definitions__comparison_8h_source.html +++ b/docs/de/d83/box__definitions__comparison_8h_source.html @@ -293,257 +293,263 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    204 
    205 inline bool operator==(const ESDescriptor& lhs, const ESDescriptor& rhs) {
    206  return lhs.esid() == rhs.esid() && lhs.object_type() == rhs.object_type() &&
    -
    207  lhs.decoder_specific_info() == rhs.decoder_specific_info();
    -
    208 }
    -
    209 
    -
    210 inline bool operator==(const ElementaryStreamDescriptor& lhs,
    -
    211  const ElementaryStreamDescriptor& rhs) {
    -
    212  return lhs.es_descriptor == rhs.es_descriptor;
    -
    213 }
    -
    214 
    -
    215 inline bool operator==(const DTSSpecific& lhs,
    -
    216  const DTSSpecific& rhs) {
    -
    217  return lhs.data == rhs.data;
    -
    218 }
    -
    219 
    -
    220 inline bool operator==(const AudioSampleEntry& lhs,
    -
    221  const AudioSampleEntry& rhs) {
    -
    222  return lhs.format == rhs.format &&
    -
    223  lhs.data_reference_index == rhs.data_reference_index &&
    -
    224  lhs.channelcount == rhs.channelcount &&
    -
    225  lhs.samplesize == rhs.samplesize && lhs.samplerate == rhs.samplerate &&
    -
    226  lhs.sinf == rhs.sinf && lhs.esds == rhs.esds &&
    -
    227  lhs.ddts == rhs.ddts;
    -
    228 }
    -
    229 
    -
    230 inline bool operator==(const WebVTTConfigurationBox& lhs,
    -
    231  const WebVTTConfigurationBox& rhs) {
    -
    232  return lhs.config == rhs.config;
    -
    233 }
    -
    234 
    -
    235 inline bool operator==(const WebVTTSourceLabelBox& lhs,
    -
    236  const WebVTTSourceLabelBox& rhs) {
    -
    237  return lhs.source_label == rhs.source_label;
    -
    238 }
    -
    239 
    -
    240 inline bool operator==(const WVTTSampleEntry& lhs,
    -
    241  const WVTTSampleEntry& rhs) {
    -
    242  return lhs.config == rhs.config && lhs.label == rhs.label;
    -
    243 }
    -
    244 
    -
    245 inline bool operator==(const MediaHeader& lhs, const MediaHeader& rhs) {
    -
    246  return lhs.creation_time == rhs.creation_time &&
    -
    247  lhs.modification_time == rhs.modification_time &&
    -
    248  lhs.timescale == rhs.timescale && lhs.duration == rhs.duration &&
    -
    249  strcmp(lhs.language, rhs.language) == 0;
    -
    250 }
    -
    251 
    -
    252 inline bool operator==(const VideoMediaHeader& lhs,
    -
    253  const VideoMediaHeader& rhs) {
    -
    254  return lhs.graphicsmode == rhs.graphicsmode &&
    -
    255  lhs.opcolor_red == rhs.opcolor_red &&
    -
    256  lhs.opcolor_green == rhs.opcolor_green &&
    -
    257  lhs.opcolor_blue == rhs.opcolor_blue;
    -
    258 }
    -
    259 
    -
    260 inline bool operator==(const SoundMediaHeader& lhs,
    -
    261  const SoundMediaHeader& rhs) {
    -
    262  return lhs.balance == rhs.balance;
    -
    263 }
    -
    264 
    -
    265 inline bool operator==(const SubtitleMediaHeader& lhs,
    -
    266  const SubtitleMediaHeader& rhs) {
    -
    267  return true;
    -
    268 }
    -
    269 
    -
    270 inline bool operator==(const DataEntryUrl& lhs, const DataEntryUrl& rhs) {
    -
    271  return lhs.flags == rhs.flags && lhs.location == rhs.location;
    -
    272 }
    -
    273 
    -
    274 inline bool operator==(const DataReference& lhs, const DataReference& rhs) {
    -
    275  return lhs.data_entry == rhs.data_entry;
    -
    276 }
    -
    277 
    -
    278 inline bool operator==(const DataInformation& lhs, const DataInformation& rhs) {
    -
    279  return lhs.dref == rhs.dref;
    -
    280 }
    -
    281 
    -
    282 inline bool operator==(const MediaInformation& lhs,
    -
    283  const MediaInformation& rhs) {
    -
    284  return lhs.dinf == rhs.dinf && lhs.sample_table == rhs.sample_table &&
    -
    285  lhs.vmhd == rhs.vmhd && lhs.smhd == rhs.smhd;
    +
    207  lhs.max_bitrate() == rhs.max_bitrate() &&
    +
    208  lhs.avg_bitrate() == rhs.avg_bitrate() &&
    +
    209  lhs.decoder_specific_info() == rhs.decoder_specific_info();
    +
    210 }
    +
    211 
    +
    212 inline bool operator==(const ElementaryStreamDescriptor& lhs,
    +
    213  const ElementaryStreamDescriptor& rhs) {
    +
    214  return lhs.es_descriptor == rhs.es_descriptor;
    +
    215 }
    +
    216 
    +
    217 inline bool operator==(const DTSSpecific& lhs,
    +
    218  const DTSSpecific& rhs) {
    +
    219  return lhs.sampling_frequency == rhs.sampling_frequency &&
    +
    220  lhs.max_bitrate == rhs.max_bitrate &&
    +
    221  lhs.avg_bitrate == rhs.avg_bitrate &&
    +
    222  lhs.pcm_sample_depth == rhs.pcm_sample_depth &&
    +
    223  lhs.extra_data == rhs.extra_data;
    +
    224 }
    +
    225 
    +
    226 inline bool operator==(const AudioSampleEntry& lhs,
    +
    227  const AudioSampleEntry& rhs) {
    +
    228  return lhs.format == rhs.format &&
    +
    229  lhs.data_reference_index == rhs.data_reference_index &&
    +
    230  lhs.channelcount == rhs.channelcount &&
    +
    231  lhs.samplesize == rhs.samplesize && lhs.samplerate == rhs.samplerate &&
    +
    232  lhs.sinf == rhs.sinf && lhs.esds == rhs.esds &&
    +
    233  lhs.ddts == rhs.ddts;
    +
    234 }
    +
    235 
    +
    236 inline bool operator==(const WebVTTConfigurationBox& lhs,
    +
    237  const WebVTTConfigurationBox& rhs) {
    +
    238  return lhs.config == rhs.config;
    +
    239 }
    +
    240 
    +
    241 inline bool operator==(const WebVTTSourceLabelBox& lhs,
    +
    242  const WebVTTSourceLabelBox& rhs) {
    +
    243  return lhs.source_label == rhs.source_label;
    +
    244 }
    +
    245 
    +
    246 inline bool operator==(const WVTTSampleEntry& lhs,
    +
    247  const WVTTSampleEntry& rhs) {
    +
    248  return lhs.config == rhs.config && lhs.label == rhs.label;
    +
    249 }
    +
    250 
    +
    251 inline bool operator==(const MediaHeader& lhs, const MediaHeader& rhs) {
    +
    252  return lhs.creation_time == rhs.creation_time &&
    +
    253  lhs.modification_time == rhs.modification_time &&
    +
    254  lhs.timescale == rhs.timescale && lhs.duration == rhs.duration &&
    +
    255  strcmp(lhs.language, rhs.language) == 0;
    +
    256 }
    +
    257 
    +
    258 inline bool operator==(const VideoMediaHeader& lhs,
    +
    259  const VideoMediaHeader& rhs) {
    +
    260  return lhs.graphicsmode == rhs.graphicsmode &&
    +
    261  lhs.opcolor_red == rhs.opcolor_red &&
    +
    262  lhs.opcolor_green == rhs.opcolor_green &&
    +
    263  lhs.opcolor_blue == rhs.opcolor_blue;
    +
    264 }
    +
    265 
    +
    266 inline bool operator==(const SoundMediaHeader& lhs,
    +
    267  const SoundMediaHeader& rhs) {
    +
    268  return lhs.balance == rhs.balance;
    +
    269 }
    +
    270 
    +
    271 inline bool operator==(const SubtitleMediaHeader& lhs,
    +
    272  const SubtitleMediaHeader& rhs) {
    +
    273  return true;
    +
    274 }
    +
    275 
    +
    276 inline bool operator==(const DataEntryUrl& lhs, const DataEntryUrl& rhs) {
    +
    277  return lhs.flags == rhs.flags && lhs.location == rhs.location;
    +
    278 }
    +
    279 
    +
    280 inline bool operator==(const DataReference& lhs, const DataReference& rhs) {
    +
    281  return lhs.data_entry == rhs.data_entry;
    +
    282 }
    +
    283 
    +
    284 inline bool operator==(const DataInformation& lhs, const DataInformation& rhs) {
    +
    285  return lhs.dref == rhs.dref;
    286 }
    287 
    -
    288 inline bool operator==(const Media& lhs, const Media& rhs) {
    -
    289  return lhs.header == rhs.header && lhs.handler == rhs.handler &&
    -
    290  lhs.information == rhs.information;
    -
    291 }
    -
    292 
    -
    293 inline bool operator==(const Track& lhs, const Track& rhs) {
    -
    294  return lhs.header == rhs.header && lhs.media == rhs.media &&
    -
    295  lhs.edit == rhs.edit && lhs.sample_encryption == rhs.sample_encryption;
    -
    296 }
    -
    297 
    -
    298 inline bool operator==(const MovieExtendsHeader& lhs,
    -
    299  const MovieExtendsHeader& rhs) {
    -
    300  return lhs.fragment_duration == rhs.fragment_duration;
    -
    301 }
    -
    302 
    -
    303 inline bool operator==(const TrackExtends& lhs, const TrackExtends& rhs) {
    -
    304  return lhs.track_id == rhs.track_id &&
    -
    305  lhs.default_sample_description_index ==
    -
    306  rhs.default_sample_description_index &&
    -
    307  lhs.default_sample_duration == rhs.default_sample_duration &&
    -
    308  lhs.default_sample_size == rhs.default_sample_size &&
    -
    309  lhs.default_sample_flags == rhs.default_sample_flags;
    -
    310 }
    -
    311 
    -
    312 inline bool operator==(const MovieExtends& lhs, const MovieExtends& rhs) {
    -
    313  return lhs.header == rhs.header && lhs.tracks == rhs.tracks;
    -
    314 }
    -
    315 
    -
    316 inline bool operator==(const Movie& lhs, const Movie& rhs) {
    -
    317  return lhs.header == rhs.header && lhs.extends == rhs.extends &&
    -
    318  lhs.tracks == rhs.tracks && lhs.pssh == rhs.pssh;
    -
    319 }
    -
    320 
    -
    321 inline bool operator==(const TrackFragmentDecodeTime& lhs,
    -
    322  const TrackFragmentDecodeTime& rhs) {
    -
    323  return lhs.decode_time == rhs.decode_time;
    -
    324 }
    -
    325 
    -
    326 inline bool operator==(const MovieFragmentHeader& lhs,
    -
    327  const MovieFragmentHeader& rhs) {
    -
    328  return lhs.sequence_number == rhs.sequence_number;
    -
    329 }
    -
    330 
    -
    331 inline bool operator==(const TrackFragmentHeader& lhs,
    -
    332  const TrackFragmentHeader& rhs) {
    -
    333  return lhs.flags == rhs.flags && lhs.track_id == rhs.track_id &&
    -
    334  lhs.sample_description_index == rhs.sample_description_index &&
    -
    335  lhs.default_sample_duration == rhs.default_sample_duration &&
    -
    336  lhs.default_sample_size == rhs.default_sample_size &&
    -
    337  lhs.default_sample_flags == rhs.default_sample_flags;
    -
    338 }
    -
    339 
    -
    340 inline bool operator==(const TrackFragmentRun& lhs,
    -
    341  const TrackFragmentRun& rhs) {
    -
    342  return lhs.flags == rhs.flags && lhs.sample_count == rhs.sample_count &&
    -
    343  lhs.data_offset == rhs.data_offset &&
    -
    344  lhs.sample_flags == rhs.sample_flags &&
    -
    345  lhs.sample_sizes == rhs.sample_sizes &&
    -
    346  lhs.sample_durations == rhs.sample_durations &&
    -
    347  lhs.sample_composition_time_offsets ==
    -
    348  rhs.sample_composition_time_offsets;
    -
    349 }
    -
    350 
    -
    351 inline bool operator==(const SampleToGroupEntry& lhs,
    -
    352  const SampleToGroupEntry& rhs) {
    -
    353  return lhs.sample_count == rhs.sample_count &&
    -
    354  lhs.group_description_index == rhs.group_description_index;
    +
    288 inline bool operator==(const MediaInformation& lhs,
    +
    289  const MediaInformation& rhs) {
    +
    290  return lhs.dinf == rhs.dinf && lhs.sample_table == rhs.sample_table &&
    +
    291  lhs.vmhd == rhs.vmhd && lhs.smhd == rhs.smhd;
    +
    292 }
    +
    293 
    +
    294 inline bool operator==(const Media& lhs, const Media& rhs) {
    +
    295  return lhs.header == rhs.header && lhs.handler == rhs.handler &&
    +
    296  lhs.information == rhs.information;
    +
    297 }
    +
    298 
    +
    299 inline bool operator==(const Track& lhs, const Track& rhs) {
    +
    300  return lhs.header == rhs.header && lhs.media == rhs.media &&
    +
    301  lhs.edit == rhs.edit && lhs.sample_encryption == rhs.sample_encryption;
    +
    302 }
    +
    303 
    +
    304 inline bool operator==(const MovieExtendsHeader& lhs,
    +
    305  const MovieExtendsHeader& rhs) {
    +
    306  return lhs.fragment_duration == rhs.fragment_duration;
    +
    307 }
    +
    308 
    +
    309 inline bool operator==(const TrackExtends& lhs, const TrackExtends& rhs) {
    +
    310  return lhs.track_id == rhs.track_id &&
    +
    311  lhs.default_sample_description_index ==
    +
    312  rhs.default_sample_description_index &&
    +
    313  lhs.default_sample_duration == rhs.default_sample_duration &&
    +
    314  lhs.default_sample_size == rhs.default_sample_size &&
    +
    315  lhs.default_sample_flags == rhs.default_sample_flags;
    +
    316 }
    +
    317 
    +
    318 inline bool operator==(const MovieExtends& lhs, const MovieExtends& rhs) {
    +
    319  return lhs.header == rhs.header && lhs.tracks == rhs.tracks;
    +
    320 }
    +
    321 
    +
    322 inline bool operator==(const Movie& lhs, const Movie& rhs) {
    +
    323  return lhs.header == rhs.header && lhs.extends == rhs.extends &&
    +
    324  lhs.tracks == rhs.tracks && lhs.pssh == rhs.pssh;
    +
    325 }
    +
    326 
    +
    327 inline bool operator==(const TrackFragmentDecodeTime& lhs,
    +
    328  const TrackFragmentDecodeTime& rhs) {
    +
    329  return lhs.decode_time == rhs.decode_time;
    +
    330 }
    +
    331 
    +
    332 inline bool operator==(const MovieFragmentHeader& lhs,
    +
    333  const MovieFragmentHeader& rhs) {
    +
    334  return lhs.sequence_number == rhs.sequence_number;
    +
    335 }
    +
    336 
    +
    337 inline bool operator==(const TrackFragmentHeader& lhs,
    +
    338  const TrackFragmentHeader& rhs) {
    +
    339  return lhs.flags == rhs.flags && lhs.track_id == rhs.track_id &&
    +
    340  lhs.sample_description_index == rhs.sample_description_index &&
    +
    341  lhs.default_sample_duration == rhs.default_sample_duration &&
    +
    342  lhs.default_sample_size == rhs.default_sample_size &&
    +
    343  lhs.default_sample_flags == rhs.default_sample_flags;
    +
    344 }
    +
    345 
    +
    346 inline bool operator==(const TrackFragmentRun& lhs,
    +
    347  const TrackFragmentRun& rhs) {
    +
    348  return lhs.flags == rhs.flags && lhs.sample_count == rhs.sample_count &&
    +
    349  lhs.data_offset == rhs.data_offset &&
    +
    350  lhs.sample_flags == rhs.sample_flags &&
    +
    351  lhs.sample_sizes == rhs.sample_sizes &&
    +
    352  lhs.sample_durations == rhs.sample_durations &&
    +
    353  lhs.sample_composition_time_offsets ==
    +
    354  rhs.sample_composition_time_offsets;
    355 }
    356 
    -
    357 inline bool operator==(const SampleToGroup& lhs,
    -
    358  const SampleToGroup& rhs) {
    -
    359  return lhs.grouping_type == rhs.grouping_type &&
    -
    360  lhs.grouping_type_parameter == rhs.grouping_type_parameter &&
    -
    361  lhs.entries == rhs.entries;
    -
    362 }
    -
    363 
    -
    364 inline bool operator==(const CencSampleEncryptionInfoEntry& lhs,
    -
    365  const CencSampleEncryptionInfoEntry& rhs) {
    -
    366  return lhs.is_encrypted == rhs.is_encrypted &&
    -
    367  lhs.iv_size == rhs.iv_size &&
    -
    368  lhs.key_id == rhs.key_id;
    -
    369 }
    -
    370 
    -
    371 inline bool operator==(const SampleGroupDescription& lhs,
    -
    372  const SampleGroupDescription& rhs) {
    -
    373  return lhs.grouping_type == rhs.grouping_type &&
    -
    374  lhs.entries == rhs.entries;
    +
    357 inline bool operator==(const SampleToGroupEntry& lhs,
    +
    358  const SampleToGroupEntry& rhs) {
    +
    359  return lhs.sample_count == rhs.sample_count &&
    +
    360  lhs.group_description_index == rhs.group_description_index;
    +
    361 }
    +
    362 
    +
    363 inline bool operator==(const SampleToGroup& lhs,
    +
    364  const SampleToGroup& rhs) {
    +
    365  return lhs.grouping_type == rhs.grouping_type &&
    +
    366  lhs.grouping_type_parameter == rhs.grouping_type_parameter &&
    +
    367  lhs.entries == rhs.entries;
    +
    368 }
    +
    369 
    +
    370 inline bool operator==(const CencSampleEncryptionInfoEntry& lhs,
    +
    371  const CencSampleEncryptionInfoEntry& rhs) {
    +
    372  return lhs.is_encrypted == rhs.is_encrypted &&
    +
    373  lhs.iv_size == rhs.iv_size &&
    +
    374  lhs.key_id == rhs.key_id;
    375 }
    376 
    -
    377 inline bool operator==(const TrackFragment& lhs, const TrackFragment& rhs) {
    -
    378  return lhs.header == rhs.header && lhs.runs == rhs.runs &&
    -
    379  lhs.decode_time == rhs.decode_time &&
    -
    380  lhs.auxiliary_offset == rhs.auxiliary_offset &&
    -
    381  lhs.auxiliary_size == rhs.auxiliary_size &&
    -
    382  lhs.sample_encryption == rhs.sample_encryption;
    -
    383 }
    -
    384 
    -
    385 inline bool operator==(const MovieFragment& lhs, const MovieFragment& rhs) {
    -
    386  return lhs.header == rhs.header && lhs.tracks == rhs.tracks &&
    -
    387  lhs.pssh == rhs.pssh;
    -
    388 }
    -
    389 
    -
    390 inline bool operator==(const SegmentReference& lhs,
    -
    391  const SegmentReference& rhs) {
    -
    392  return lhs.reference_type == rhs.reference_type &&
    -
    393  lhs.referenced_size == rhs.referenced_size &&
    -
    394  lhs.subsegment_duration == rhs.subsegment_duration &&
    -
    395  lhs.starts_with_sap == rhs.starts_with_sap &&
    -
    396  lhs.sap_type == rhs.sap_type &&
    -
    397  lhs.sap_delta_time == rhs.sap_delta_time;
    -
    398 }
    -
    399 
    -
    400 inline bool operator==(const SegmentIndex& lhs, const SegmentIndex& rhs) {
    -
    401  return lhs.reference_id == rhs.reference_id &&
    -
    402  lhs.timescale == rhs.timescale &&
    -
    403  lhs.earliest_presentation_time == rhs.earliest_presentation_time &&
    -
    404  lhs.first_offset == rhs.first_offset &&
    -
    405  lhs.references == rhs.references;
    -
    406 }
    -
    407 
    -
    408 inline bool operator==(const CueSourceIDBox& lhs,
    -
    409  const CueSourceIDBox& rhs) {
    -
    410  return lhs.source_id == rhs.source_id;
    -
    411 }
    -
    412 
    -
    413 inline bool operator==(const CueTimeBox& lhs,
    -
    414  const CueTimeBox& rhs) {
    -
    415  return lhs.cue_current_time == rhs.cue_current_time;
    -
    416 }
    -
    417 
    -
    418 inline bool operator==(const CueIDBox& lhs,
    -
    419  const CueIDBox& rhs) {
    -
    420  return lhs.cue_id == rhs.cue_id;
    -
    421 }
    -
    422 
    -
    423 inline bool operator==(const CueSettingsBox& lhs,
    -
    424  const CueSettingsBox& rhs) {
    -
    425  return lhs.settings == rhs.settings;
    -
    426 }
    -
    427 
    -
    428 inline bool operator==(const CuePayloadBox& lhs,
    -
    429  const CuePayloadBox& rhs) {
    -
    430  return lhs.cue_text == rhs.cue_text;
    -
    431 }
    -
    432 
    -
    433 inline bool operator==(const VTTEmptyCueBox& lhs, const VTTEmptyCueBox& rhs) {
    -
    434  return true;
    -
    435 }
    -
    436 
    -
    437 inline bool operator==(const VTTAdditionalTextBox& lhs,
    -
    438  const VTTAdditionalTextBox& rhs) {
    -
    439  return lhs.cue_additional_text == rhs.cue_additional_text;
    -
    440 }
    -
    441 
    -
    442 inline bool operator==(const VTTCueBox& lhs,
    -
    443  const VTTCueBox& rhs) {
    -
    444  return lhs.cue_source_id == rhs.cue_source_id && lhs.cue_id == rhs.cue_id &&
    -
    445  lhs.cue_time == rhs.cue_time && lhs.cue_settings == rhs.cue_settings &&
    -
    446  lhs.cue_payload == rhs.cue_payload;
    -
    447 }
    -
    448 
    -
    449 } // namespace mp4
    -
    450 } // namespace media
    -
    451 } // namespace edash_packager
    -
    452 
    -
    453 #endif // MEDIA_FORMATS_MP4_BOX_DEFINITIONS_COMPARISON_H_
    +
    377 inline bool operator==(const SampleGroupDescription& lhs,
    +
    378  const SampleGroupDescription& rhs) {
    +
    379  return lhs.grouping_type == rhs.grouping_type &&
    +
    380  lhs.entries == rhs.entries;
    +
    381 }
    +
    382 
    +
    383 inline bool operator==(const TrackFragment& lhs, const TrackFragment& rhs) {
    +
    384  return lhs.header == rhs.header && lhs.runs == rhs.runs &&
    +
    385  lhs.decode_time == rhs.decode_time &&
    +
    386  lhs.auxiliary_offset == rhs.auxiliary_offset &&
    +
    387  lhs.auxiliary_size == rhs.auxiliary_size &&
    +
    388  lhs.sample_encryption == rhs.sample_encryption;
    +
    389 }
    +
    390 
    +
    391 inline bool operator==(const MovieFragment& lhs, const MovieFragment& rhs) {
    +
    392  return lhs.header == rhs.header && lhs.tracks == rhs.tracks &&
    +
    393  lhs.pssh == rhs.pssh;
    +
    394 }
    +
    395 
    +
    396 inline bool operator==(const SegmentReference& lhs,
    +
    397  const SegmentReference& rhs) {
    +
    398  return lhs.reference_type == rhs.reference_type &&
    +
    399  lhs.referenced_size == rhs.referenced_size &&
    +
    400  lhs.subsegment_duration == rhs.subsegment_duration &&
    +
    401  lhs.starts_with_sap == rhs.starts_with_sap &&
    +
    402  lhs.sap_type == rhs.sap_type &&
    +
    403  lhs.sap_delta_time == rhs.sap_delta_time;
    +
    404 }
    +
    405 
    +
    406 inline bool operator==(const SegmentIndex& lhs, const SegmentIndex& rhs) {
    +
    407  return lhs.reference_id == rhs.reference_id &&
    +
    408  lhs.timescale == rhs.timescale &&
    +
    409  lhs.earliest_presentation_time == rhs.earliest_presentation_time &&
    +
    410  lhs.first_offset == rhs.first_offset &&
    +
    411  lhs.references == rhs.references;
    +
    412 }
    +
    413 
    +
    414 inline bool operator==(const CueSourceIDBox& lhs,
    +
    415  const CueSourceIDBox& rhs) {
    +
    416  return lhs.source_id == rhs.source_id;
    +
    417 }
    +
    418 
    +
    419 inline bool operator==(const CueTimeBox& lhs,
    +
    420  const CueTimeBox& rhs) {
    +
    421  return lhs.cue_current_time == rhs.cue_current_time;
    +
    422 }
    +
    423 
    +
    424 inline bool operator==(const CueIDBox& lhs,
    +
    425  const CueIDBox& rhs) {
    +
    426  return lhs.cue_id == rhs.cue_id;
    +
    427 }
    +
    428 
    +
    429 inline bool operator==(const CueSettingsBox& lhs,
    +
    430  const CueSettingsBox& rhs) {
    +
    431  return lhs.settings == rhs.settings;
    +
    432 }
    +
    433 
    +
    434 inline bool operator==(const CuePayloadBox& lhs,
    +
    435  const CuePayloadBox& rhs) {
    +
    436  return lhs.cue_text == rhs.cue_text;
    +
    437 }
    +
    438 
    +
    439 inline bool operator==(const VTTEmptyCueBox& lhs, const VTTEmptyCueBox& rhs) {
    +
    440  return true;
    +
    441 }
    +
    442 
    +
    443 inline bool operator==(const VTTAdditionalTextBox& lhs,
    +
    444  const VTTAdditionalTextBox& rhs) {
    +
    445  return lhs.cue_additional_text == rhs.cue_additional_text;
    +
    446 }
    +
    447 
    +
    448 inline bool operator==(const VTTCueBox& lhs,
    +
    449  const VTTCueBox& rhs) {
    +
    450  return lhs.cue_source_id == rhs.cue_source_id && lhs.cue_id == rhs.cue_id &&
    +
    451  lhs.cue_time == rhs.cue_time && lhs.cue_settings == rhs.cue_settings &&
    +
    452  lhs.cue_payload == rhs.cue_payload;
    +
    453 }
    +
    454 
    +
    455 } // namespace mp4
    +
    456 } // namespace media
    +
    457 } // namespace edash_packager
    +
    458 
    +
    459 #endif // MEDIA_FORMATS_MP4_BOX_DEFINITIONS_COMPARISON_H_
    diff --git a/docs/de/d87/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo-members.html b/docs/de/d87/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo-members.html index 151627ecf8..d8b038a9db 100644 --- a/docs/de/d87/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo-members.html +++ b/docs/de/d87/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.html b/docs/de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.html index e528367d2c..cbc09fd99a 100644 --- a/docs/de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.html +++ b/docs/de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.html @@ -142,7 +142,7 @@ Additional Inherited Members diff --git a/docs/de/d8d/structedash__packager_1_1media_1_1H264SliceHeader.html b/docs/de/d8d/structedash__packager_1_1media_1_1H264SliceHeader.html index 6e89e4a18c..c3e76be5c2 100644 --- a/docs/de/d8d/structedash__packager_1_1media_1_1H264SliceHeader.html +++ b/docs/de/d8d/structedash__packager_1_1media_1_1H264SliceHeader.html @@ -276,7 +276,7 @@ int slice_beta_offset_div2 diff --git a/docs/de/d93/classedash__packager_1_1media_1_1ByteQueue-members.html b/docs/de/d93/classedash__packager_1_1media_1_1ByteQueue-members.html index b2618f59e5..5345f3de34 100644 --- a/docs/de/d93/classedash__packager_1_1media_1_1ByteQueue-members.html +++ b/docs/de/d93/classedash__packager_1_1media_1_1ByteQueue-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d98/classedash__packager_1_1media_1_1WebMAudioClient.html b/docs/de/d98/classedash__packager_1_1media_1_1WebMAudioClient.html index 5638b12492..ff2bb998cb 100644 --- a/docs/de/d98/classedash__packager_1_1media_1_1WebMAudioClient.html +++ b/docs/de/d98/classedash__packager_1_1media_1_1WebMAudioClient.html @@ -199,7 +199,7 @@ An empty scoped_refptr if there was unexpected values in the provided parameters diff --git a/docs/de/d9d/classedash__packager_1_1media_1_1TracksBuilder-members.html b/docs/de/d9d/classedash__packager_1_1media_1_1TracksBuilder-members.html index bccee9fb2a..d54f06c77d 100644 --- a/docs/de/d9d/classedash__packager_1_1media_1_1TracksBuilder-members.html +++ b/docs/de/d9d/classedash__packager_1_1media_1_1TracksBuilder-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d9e/classedash__packager_1_1media_1_1TextTrack.html b/docs/de/d9e/classedash__packager_1_1media_1_1TextTrack.html index bc49b78f5d..59aaa1ccf2 100644 --- a/docs/de/d9e/classedash__packager_1_1media_1_1TextTrack.html +++ b/docs/de/d9e/classedash__packager_1_1media_1_1TextTrack.html @@ -109,7 +109,7 @@ virtual void addWebVTTCue< diff --git a/docs/de/da0/classedash__packager_1_1media_1_1AesCbcCtsDecryptor-members.html b/docs/de/da0/classedash__packager_1_1media_1_1AesCbcCtsDecryptor-members.html index 867464cd35..98e7d54750 100644 --- a/docs/de/da0/classedash__packager_1_1media_1_1AesCbcCtsDecryptor-members.html +++ b/docs/de/da0/classedash__packager_1_1media_1_1AesCbcCtsDecryptor-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/da5/classedash__packager_1_1media_1_1WebMParserClient.html b/docs/de/da5/classedash__packager_1_1media_1_1WebMParserClient.html index 14934f2bc7..9fc9b4e0fb 100644 --- a/docs/de/da5/classedash__packager_1_1media_1_1WebMParserClient.html +++ b/docs/de/da5/classedash__packager_1_1media_1_1WebMParserClient.html @@ -150,7 +150,7 @@ Protected Member Functions diff --git a/docs/de/da6/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html b/docs/de/da6/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html index 0db6742891..9141bf3461 100644 --- a/docs/de/da6/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html +++ b/docs/de/da6/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/da7/classedash__packager_1_1media_1_1AudioTimestampHelper-members.html b/docs/de/da7/classedash__packager_1_1media_1_1AudioTimestampHelper-members.html index 595ac6d26d..3e895c6bb7 100644 --- a/docs/de/da7/classedash__packager_1_1media_1_1AudioTimestampHelper-members.html +++ b/docs/de/da7/classedash__packager_1_1media_1_1AudioTimestampHelper-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dab/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun-members.html b/docs/de/dab/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun-members.html index 158a813db3..12fe362f3b 100644 --- a/docs/de/dab/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun-members.html +++ b/docs/de/dab/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun-members.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dad/validate__flag_8cc_source.html b/docs/de/dad/validate__flag_8cc_source.html index 15950f8908..20c9139a82 100644 --- a/docs/de/dad/validate__flag_8cc_source.html +++ b/docs/de/dad/validate__flag_8cc_source.html @@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/db1/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor.html b/docs/de/db1/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor.html index ba3aa53007..36f7763b9f 100644 --- a/docs/de/db1/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor.html +++ b/docs/de/db1/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor.html @@ -113,6 +113,18 @@ uint16_t esid () const void set_esid (uint16_t esid)   + +uint32_t max_bitrate () const +  + +void set_max_bitrate (uint32_t max_bitrate) +  + +uint32_t avg_bitrate () const +  + +void set_avg_bitrate (uint32_t avg_bitrate) +  ObjectType object_type () const   @@ -127,11 +139,14 @@ void set_decoder_specific_   bool IsAAC () const   + +bool IsDTS () const + 

    Detailed Description

    This class parses object type and decoder specific information from an elementary stream descriptor, which is usually contained in an esds box. Please refer to ISO 14496 Part 1 7.2.6.5 for more details.

    -

    Definition at line 32 of file es_descriptor.h.

    +

    Definition at line 36 of file es_descriptor.h.

    Member Function Documentation

    @@ -155,7 +170,7 @@ void set_decoder_specific_
    Returns
    true if the stream is AAC.
    -

    Definition at line 56 of file es_descriptor.h.

    +

    Definition at line 66 of file es_descriptor.h.

    @@ -166,7 +181,7 @@ void set_decoder_specific_ diff --git a/docs/de/db4/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo-members.html b/docs/de/db4/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo-members.html index 633524a858..caaf8506d5 100644 --- a/docs/de/db4/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo-members.html +++ b/docs/de/db4/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dc1/demuxer_8h_source.html b/docs/de/dc1/demuxer_8h_source.html index de48ef14fa..d2b2ec6c4f 100644 --- a/docs/de/dc1/demuxer_8h_source.html +++ b/docs/de/dc1/demuxer_8h_source.html @@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html b/docs/de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html index 19f3c06cb5..70305c1a92 100644 --- a/docs/de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html +++ b/docs/de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html @@ -171,7 +171,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 141 of file box_definitions.cc.

    +

    Definition at line 157 of file box_definitions.cc.

    @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/de/dcc/mock__mpd__notifier_8cc_source.html b/docs/de/dcc/mock__mpd__notifier_8cc_source.html index 27d29f0dd7..bf50453a35 100644 --- a/docs/de/dcc/mock__mpd__notifier_8cc_source.html +++ b/docs/de/dcc/mock__mpd__notifier_8cc_source.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dcf/file__closer_8h_source.html b/docs/de/dcf/file__closer_8h_source.html index 915a9e4758..33876bb0e3 100644 --- a/docs/de/dcf/file__closer_8h_source.html +++ b/docs/de/dcf/file__closer_8h_source.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dd4/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer-members.html b/docs/de/dd4/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer-members.html index 22fba153f0..764ce2bbea 100644 --- a/docs/de/dd4/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer-members.html +++ b/docs/de/dd4/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dd6/content__protection__element_8h_source.html b/docs/de/dd6/content__protection__element_8h_source.html index 05fa35e726..3ccba8dbf6 100644 --- a/docs/de/dd6/content__protection__element_8h_source.html +++ b/docs/de/dd6/content__protection__element_8h_source.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dd6/muxer__listener__test__helper_8cc_source.html b/docs/de/dd6/muxer__listener__test__helper_8cc_source.html index 0765f8128f..a685cc2fa9 100644 --- a/docs/de/dd6/muxer__listener__test__helper_8cc_source.html +++ b/docs/de/dd6/muxer__listener__test__helper_8cc_source.html @@ -206,7 +206,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html b/docs/de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html index 77f9719f50..4e5f5d0ad6 100644 --- a/docs/de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html +++ b/docs/de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html @@ -142,7 +142,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 474 of file box_definitions.h.

    +

    Definition at line 478 of file box_definitions.h.

    Member Function Documentation

    @@ -168,7 +168,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 1550 of file box_definitions.cc.

    +

    Definition at line 1578 of file box_definitions.cc.

    @@ -179,7 +179,7 @@ Additional Inherited Members diff --git a/docs/de/de9/classedash__packager_1_1media_1_1LibcryptoThreading.html b/docs/de/de9/classedash__packager_1_1media_1_1LibcryptoThreading.html index 9bdb3fe132..7848475849 100644 --- a/docs/de/de9/classedash__packager_1_1media_1_1LibcryptoThreading.html +++ b/docs/de/de9/classedash__packager_1_1media_1_1LibcryptoThreading.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dfa/muxer__listener_8h_source.html b/docs/de/dfa/muxer__listener_8h_source.html index d8653abc80..7ed523d289 100644 --- a/docs/de/dfa/muxer__listener_8h_source.html +++ b/docs/de/dfa/muxer__listener_8h_source.html @@ -204,7 +204,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dfb/structedash__packager_1_1media_1_1H264ModificationOfPicNum-members.html b/docs/de/dfb/structedash__packager_1_1media_1_1H264ModificationOfPicNum-members.html index 7feb63c0a9..2309bb7c13 100644 --- a/docs/de/dfb/structedash__packager_1_1media_1_1H264ModificationOfPicNum-members.html +++ b/docs/de/dfb/structedash__packager_1_1media_1_1H264ModificationOfPicNum-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dfc/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264-members.html b/docs/de/dfc/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264-members.html index 48a5a5f3f7..a4e276d449 100644 --- a/docs/de/dfc/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264-members.html +++ b/docs/de/dfc/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dfd/stream__info_8cc_source.html b/docs/de/dfd/stream__info_8cc_source.html index 57778dc033..c8984f3fa5 100644 --- a/docs/de/dfd/stream__info_8cc_source.html +++ b/docs/de/dfd/stream__info_8cc_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d0c/classedash__packager_1_1media_1_1VPCodecConfiguration-members.html b/docs/df/d0c/classedash__packager_1_1media_1_1VPCodecConfiguration-members.html index 9f26f0d54b..5e7aae8d22 100644 --- a/docs/df/d0c/classedash__packager_1_1media_1_1VPCodecConfiguration-members.html +++ b/docs/df/d0c/classedash__packager_1_1media_1_1VPCodecConfiguration-members.html @@ -131,7 +131,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d1a/offset__byte__queue_8cc_source.html b/docs/df/d1a/offset__byte__queue_8cc_source.html index 4373bdc7ed..9ba792915b 100644 --- a/docs/df/d1a/offset__byte__queue_8cc_source.html +++ b/docs/df/d1a/offset__byte__queue_8cc_source.html @@ -164,7 +164,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d1c/composition__offset__iterator_8h_source.html b/docs/df/d1c/composition__offset__iterator_8h_source.html index a9c9f509e1..4d4e935eab 100644 --- a/docs/df/d1c/composition__offset__iterator_8h_source.html +++ b/docs/df/d1c/composition__offset__iterator_8h_source.html @@ -140,14 +140,14 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    CompositionOffsetIterator(const CompositionTimeToSample &composition_time_to_sample)
    Create CompositionOffsetIterator from composition time to sample box.
    - + diff --git a/docs/df/d1f/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator-members.html b/docs/df/d1f/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator-members.html index 2483e28418..ad3a006f77 100644 --- a/docs/df/d1f/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator-members.html +++ b/docs/df/d1f/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator-members.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html b/docs/df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html index 03385bcb53..16ff7b2542 100644 --- a/docs/df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html +++ b/docs/df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html @@ -175,7 +175,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 565 of file box_definitions.h.

    +

    Definition at line 569 of file box_definitions.h.

    Member Function Documentation

    @@ -201,7 +201,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 1794 of file box_definitions.cc.

    +

    Definition at line 1822 of file box_definitions.cc.

    @@ -212,7 +212,7 @@ Additional Inherited Members diff --git a/docs/df/d22/validate__flag_8h_source.html b/docs/df/d22/validate__flag_8h_source.html index c8b7024650..37e39cfbeb 100644 --- a/docs/df/d22/validate__flag_8h_source.html +++ b/docs/df/d22/validate__flag_8h_source.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d30/classedash__packager_1_1media_1_1ContentEncoding.html b/docs/df/d30/classedash__packager_1_1media_1_1ContentEncoding.html index ce5c4dd06d..a626d3caa8 100644 --- a/docs/df/d30/classedash__packager_1_1media_1_1ContentEncoding.html +++ b/docs/df/d30/classedash__packager_1_1media_1_1ContentEncoding.html @@ -208,7 +208,7 @@ Static Public Attributes diff --git a/docs/df/d31/muxer__util_8cc_source.html b/docs/df/d31/muxer__util_8cc_source.html index 3deef7b64d..84d6758908 100644 --- a/docs/df/d31/muxer__util_8cc_source.html +++ b/docs/df/d31/muxer__util_8cc_source.html @@ -247,7 +247,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d32/audio__stream__info_8h_source.html b/docs/df/d32/audio__stream__info_8h_source.html index bf6d5c4723..6c7ab87180 100644 --- a/docs/df/d32/audio__stream__info_8h_source.html +++ b/docs/df/d32/audio__stream__info_8h_source.html @@ -130,7 +130,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    41 
    43 class AudioStreamInfo : public StreamInfo {
    44  public:
    -
    46  AudioStreamInfo(int track_id,
    +
    46  AudioStreamInfo(int track_id,
    47  uint32_t time_scale,
    48  uint64_t duration,
    49  AudioCodec codec,
    @@ -139,57 +139,63 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    52  uint8_t sample_bits,
    53  uint8_t num_channels,
    54  uint32_t sampling_frequency,
    -
    55  const uint8_t* extra_data,
    -
    56  size_t extra_data_size,
    -
    57  bool is_encrypted);
    -
    58 
    -
    61  bool IsValidConfig() const override;
    -
    62  std::string ToString() const override;
    -
    64 
    -
    65  AudioCodec codec() const { return codec_; }
    -
    66  uint8_t sample_bits() const { return sample_bits_; }
    -
    67  uint8_t sample_bytes() const { return sample_bits_ / 8; }
    -
    68  uint8_t num_channels() const { return num_channels_; }
    -
    69  uint32_t sampling_frequency() const { return sampling_frequency_; }
    -
    70  uint32_t bytes_per_frame() const {
    -
    71  return static_cast<uint32_t>(num_channels_) * sample_bits_ / 8;
    -
    72  }
    -
    73 
    -
    74  void set_codec(AudioCodec codec) { codec_ = codec; }
    -
    75  void set_sampling_frequency(const uint32_t sampling_frequency) {
    -
    76  sampling_frequency_ = sampling_frequency;
    -
    77  }
    -
    78 
    -
    81  static std::string GetCodecString(AudioCodec codec,
    -
    82  uint8_t audio_object_type);
    -
    83 
    -
    84  private:
    -
    85  ~AudioStreamInfo() override;
    -
    86 
    -
    87  AudioCodec codec_;
    -
    88  uint8_t sample_bits_;
    -
    89  uint8_t num_channels_;
    -
    90  uint32_t sampling_frequency_;
    -
    91 
    -
    92  // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
    -
    93  // generated copy constructor and assignment operator. Since the extra data is
    -
    94  // typically small, the performance impact is minimal.
    -
    95 };
    -
    96 
    -
    97 } // namespace media
    -
    98 } // namespace edash_packager
    -
    99 
    -
    100 #endif // MEDIA_BASE_AUDIO_STREAM_INFO_H_
    +
    55  uint32_t max_bitrate,
    +
    56  uint32_t avg_bitrate,
    +
    57  const uint8_t* extra_data,
    +
    58  size_t extra_data_size,
    +
    59  bool is_encrypted);
    +
    60 
    +
    63  bool IsValidConfig() const override;
    +
    64  std::string ToString() const override;
    +
    66 
    +
    67  AudioCodec codec() const { return codec_; }
    +
    68  uint8_t sample_bits() const { return sample_bits_; }
    +
    69  uint8_t sample_bytes() const { return sample_bits_ / 8; }
    +
    70  uint8_t num_channels() const { return num_channels_; }
    +
    71  uint32_t sampling_frequency() const { return sampling_frequency_; }
    +
    72  uint32_t bytes_per_frame() const {
    +
    73  return static_cast<uint32_t>(num_channels_) * sample_bits_ / 8;
    +
    74  }
    +
    75  uint32_t max_bitrate() const { return max_bitrate_; }
    +
    76  uint32_t avg_bitrate() const { return avg_bitrate_; }
    +
    77 
    +
    78  void set_codec(AudioCodec codec) { codec_ = codec; }
    +
    79  void set_sampling_frequency(const uint32_t sampling_frequency) {
    +
    80  sampling_frequency_ = sampling_frequency;
    +
    81  }
    +
    82 
    +
    85  static std::string GetCodecString(AudioCodec codec,
    +
    86  uint8_t audio_object_type);
    +
    87 
    +
    88  private:
    +
    89  ~AudioStreamInfo() override;
    +
    90 
    +
    91  AudioCodec codec_;
    +
    92  uint8_t sample_bits_;
    +
    93  uint8_t num_channels_;
    +
    94  uint32_t sampling_frequency_;
    +
    95  uint32_t max_bitrate_;
    +
    96  uint32_t avg_bitrate_;
    +
    97 
    +
    98  // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
    +
    99  // generated copy constructor and assignment operator. Since the extra data is
    +
    100  // typically small, the performance impact is minimal.
    +
    101 };
    +
    102 
    +
    103 } // namespace media
    +
    104 } // namespace edash_packager
    +
    105 
    +
    106 #endif // MEDIA_BASE_AUDIO_STREAM_INFO_H_
    Holds audio stream information.
    -
    std::string ToString() const override
    +
    std::string ToString() const override
    Abstract class holds stream information.
    Definition: stream_info.h:26
    -
    AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)
    Construct an initialized audio stream info object.
    - -
    static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
    +
    AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, uint32_t max_bitrate, uint32_t avg_bitrate, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)
    Construct an initialized audio stream info object.
    + +
    static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
    diff --git a/docs/df/d3c/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html b/docs/df/d3c/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html index 7895459169..8aa4f8ecdd 100644 --- a/docs/df/d3c/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html +++ b/docs/df/d3c/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d40/classedash__packager_1_1media_1_1Cluster.html b/docs/df/d40/classedash__packager_1_1media_1_1Cluster.html index 3beb3c7daa..9c9eff94e1 100644 --- a/docs/df/d40/classedash__packager_1_1media_1_1Cluster.html +++ b/docs/df/d40/classedash__packager_1_1media_1_1Cluster.html @@ -116,7 +116,7 @@ int size () const diff --git a/docs/df/d43/classedash__packager_1_1media_1_1mp4_1_1Segmenter-members.html b/docs/df/d43/classedash__packager_1_1media_1_1mp4_1_1Segmenter-members.html index e9ec1f5ba4..c9abe7f93c 100644 --- a/docs/df/d43/classedash__packager_1_1media_1_1mp4_1_1Segmenter-members.html +++ b/docs/df/d43/classedash__packager_1_1media_1_1mp4_1_1Segmenter-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d4e/classedash__packager_1_1media_1_1webm_1_1MultiSegmentSegmenter.html b/docs/df/d4e/classedash__packager_1_1media_1_1webm_1_1MultiSegmentSegmenter.html index bcb6e36afa..979870c6d7 100644 --- a/docs/df/d4e/classedash__packager_1_1media_1_1webm_1_1MultiSegmentSegmenter.html +++ b/docs/df/d4e/classedash__packager_1_1media_1_1webm_1_1MultiSegmentSegmenter.html @@ -277,7 +277,7 @@ double cluster_length_sec< diff --git a/docs/df/d5b/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts-members.html b/docs/df/d5b/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts-members.html index d50e3d7b1d..26a7889728 100644 --- a/docs/df/d5b/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts-members.html +++ b/docs/df/d5b/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d5e/classedash__packager_1_1media_1_1mp2t_1_1TsSection-members.html b/docs/df/d5e/classedash__packager_1_1media_1_1mp2t_1_1TsSection-members.html index 0fbc1f3c6a..39860b170a 100644 --- a/docs/df/d5e/classedash__packager_1_1media_1_1mp2t_1_1TsSection-members.html +++ b/docs/df/d5e/classedash__packager_1_1media_1_1mp2t_1_1TsSection-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html b/docs/df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html index d33ccfced7..c42d9616b9 100644 --- a/docs/df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html +++ b/docs/df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html @@ -160,7 +160,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 274 of file box_definitions.h.

    +

    Definition at line 278 of file box_definitions.h.

    Member Function Documentation

    @@ -186,7 +186,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 1225 of file box_definitions.cc.

    +

    Definition at line 1254 of file box_definitions.cc.

    @@ -197,7 +197,7 @@ Additional Inherited Members diff --git a/docs/df/d67/opus__packet__builder_8h_source.html b/docs/df/d67/opus__packet__builder_8h_source.html index 7886429397..bedaf02285 100644 --- a/docs/df/d67/opus__packet__builder_8h_source.html +++ b/docs/df/d67/opus__packet__builder_8h_source.html @@ -136,7 +136,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html b/docs/df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html index 89268789d8..3b195ea3f6 100644 --- a/docs/df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html +++ b/docs/df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html @@ -183,7 +183,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 1058 of file box_definitions.cc.

    +

    Definition at line 1074 of file box_definitions.cc.

    @@ -194,7 +194,7 @@ Additional Inherited Members diff --git a/docs/df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html b/docs/df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html index de7ee725fc..24633541c5 100644 --- a/docs/df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html +++ b/docs/df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html @@ -145,7 +145,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 357 of file box_definitions.h.

    +

    Definition at line 361 of file box_definitions.h.

    Member Function Documentation

    @@ -171,7 +171,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 667 of file box_definitions.cc.

    +

    Definition at line 683 of file box_definitions.cc.

    @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/df/d7d/webm__info__parser_8cc_source.html b/docs/df/d7d/webm__info__parser_8cc_source.html index 87f6ebca65..2480fb9266 100644 --- a/docs/df/d7d/webm__info__parser_8cc_source.html +++ b/docs/df/d7d/webm__info__parser_8cc_source.html @@ -200,7 +200,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html b/docs/df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html index 6f1dd3b05b..ad6e3266b4 100644 --- a/docs/df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html +++ b/docs/df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html @@ -145,7 +145,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 529 of file box_definitions.h.

    +

    Definition at line 533 of file box_definitions.h.

    Member Function Documentation

    @@ -171,7 +171,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 1720 of file box_definitions.cc.

    +

    Definition at line 1748 of file box_definitions.cc.

    @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/df/d8a/vp9__parser_8h_source.html b/docs/df/d8a/vp9__parser_8h_source.html index 5ce25a47ef..ccf07d66b4 100644 --- a/docs/df/d8a/vp9__parser_8h_source.html +++ b/docs/df/d8a/vp9__parser_8h_source.html @@ -136,7 +136,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d8a/vpx__parser_8h_source.html b/docs/df/d8a/vpx__parser_8h_source.html index 6c2aa3adab..04a910179c 100644 --- a/docs/df/d8a/vpx__parser_8h_source.html +++ b/docs/df/d8a/vpx__parser_8h_source.html @@ -145,7 +145,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d96/xml__node_8cc_source.html b/docs/df/d96/xml__node_8cc_source.html index aa58809302..8a5e55f6f4 100644 --- a/docs/df/d96/xml__node_8cc_source.html +++ b/docs/df/d96/xml__node_8cc_source.html @@ -468,7 +468,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/da9/classedash__packager_1_1media_1_1mp4_1_1Fragmenter-members.html b/docs/df/da9/classedash__packager_1_1media_1_1mp4_1_1Fragmenter-members.html index 2e81e22107..4d6d2e2a3e 100644 --- a/docs/df/da9/classedash__packager_1_1media_1_1mp4_1_1Fragmenter-members.html +++ b/docs/df/da9/classedash__packager_1_1media_1_1mp4_1_1Fragmenter-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/da9/structedash__packager_1_1media_1_1mp4_1_1WebVTTSourceLabelBox.html b/docs/df/da9/structedash__packager_1_1media_1_1mp4_1_1WebVTTSourceLabelBox.html index fb3994dd0e..68c23603ef 100644 --- a/docs/df/da9/structedash__packager_1_1media_1_1mp4_1_1WebVTTSourceLabelBox.html +++ b/docs/df/da9/structedash__packager_1_1media_1_1mp4_1_1WebVTTSourceLabelBox.html @@ -136,7 +136,7 @@ Additional Inherited Members

    Detailed Description

    -

    Definition at line 297 of file box_definitions.h.

    +

    Definition at line 301 of file box_definitions.h.

    Member Function Documentation

    @@ -162,7 +162,7 @@ Additional Inherited Members

    Implements edash_packager::media::mp4::Box.

    -

    Definition at line 1302 of file box_definitions.cc.

    +

    Definition at line 1330 of file box_definitions.cc.

    @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/df/dad/decrypt__config_8h_source.html b/docs/df/dad/decrypt__config_8h_source.html index 4da8b8194d..c2e2e56f21 100644 --- a/docs/df/dad/decrypt__config_8h_source.html +++ b/docs/df/dad/decrypt__config_8h_source.html @@ -151,7 +151,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/db4/classedash__packager_1_1media_1_1BitReader.html b/docs/df/db4/classedash__packager_1_1media_1_1BitReader.html index d4442cbc1a..16e281f501 100644 --- a/docs/df/db4/classedash__packager_1_1media_1_1BitReader.html +++ b/docs/df/db4/classedash__packager_1_1media_1_1BitReader.html @@ -362,7 +362,7 @@ template<typename T > diff --git a/docs/df/dbc/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html b/docs/df/dbc/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html index adcb46401a..87c8bf13f5 100644 --- a/docs/df/dbc/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html +++ b/docs/df/dbc/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dd1/structedash__packager_1_1media_1_1mp4_1_1FileType-members.html b/docs/df/dd1/structedash__packager_1_1media_1_1mp4_1_1FileType-members.html index aacf595a7b..7b70e6775c 100644 --- a/docs/df/dd1/structedash__packager_1_1media_1_1mp4_1_1FileType-members.html +++ b/docs/df/dd1/structedash__packager_1_1media_1_1mp4_1_1FileType-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dd2/classedash__packager_1_1MockMpdBuilder-members.html b/docs/df/dd2/classedash__packager_1_1MockMpdBuilder-members.html index 6845116de9..572d03e83a 100644 --- a/docs/df/dd2/classedash__packager_1_1MockMpdBuilder-members.html +++ b/docs/df/dd2/classedash__packager_1_1MockMpdBuilder-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dd2/mpd__utils_8h_source.html b/docs/df/dd2/mpd__utils_8h_source.html index 1c220a3dc3..79e8a345f4 100644 --- a/docs/df/dd2/mpd__utils_8h_source.html +++ b/docs/df/dd2/mpd__utils_8h_source.html @@ -165,7 +165,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dda/structedash__packager_1_1media_1_1Cue.html b/docs/df/dda/structedash__packager_1_1media_1_1Cue.html index 5cc004f340..d3fdf29959 100644 --- a/docs/df/dda/structedash__packager_1_1media_1_1Cue.html +++ b/docs/df/dda/structedash__packager_1_1media_1_1Cue.html @@ -125,7 +125,7 @@ std::vector< std::string >  diff --git a/docs/df/ddc/webm_2segmenter_8h_source.html b/docs/df/ddc/webm_2segmenter_8h_source.html index 6d3938ed18..a515ce5530 100644 --- a/docs/df/ddc/webm_2segmenter_8h_source.html +++ b/docs/df/ddc/webm_2segmenter_8h_source.html @@ -240,7 +240,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dde/classedash__packager_1_1media_1_1BufferWriter.html b/docs/df/dde/classedash__packager_1_1media_1_1BufferWriter.html index 8e7d6e4924..b811ec7bce 100644 --- a/docs/df/dde/classedash__packager_1_1media_1_1BufferWriter.html +++ b/docs/df/dde/classedash__packager_1_1media_1_1BufferWriter.html @@ -301,7 +301,7 @@ void AppendInt (int64_ diff --git a/docs/df/dde/ts__section__psi_8cc_source.html b/docs/df/dde/ts__section__psi_8cc_source.html index fcb3a8ce25..969940373d 100644 --- a/docs/df/dde/ts__section__psi_8cc_source.html +++ b/docs/df/dde/ts__section__psi_8cc_source.html @@ -228,7 +228,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/de3/structedash__packager_1_1media_1_1mp4_1_1TrackHeader-members.html b/docs/df/de3/structedash__packager_1_1media_1_1mp4_1_1TrackHeader-members.html index 92f574c264..49b3c6b904 100644 --- a/docs/df/de3/structedash__packager_1_1media_1_1mp4_1_1TrackHeader-members.html +++ b/docs/df/de3/structedash__packager_1_1media_1_1mp4_1_1TrackHeader-members.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/de3/text__track__config_8cc_source.html b/docs/df/de3/text__track__config_8cc_source.html index 048bbd95d3..5fd8085305 100644 --- a/docs/df/de3/text__track__config_8cc_source.html +++ b/docs/df/de3/text__track__config_8cc_source.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/de7/classedash__packager_1_1media_1_1MuxerListener.html b/docs/df/de7/classedash__packager_1_1media_1_1MuxerListener.html index 1d0b27fa88..ba3602b9b0 100644 --- a/docs/df/de7/classedash__packager_1_1media_1_1MuxerListener.html +++ b/docs/df/de7/classedash__packager_1_1media_1_1MuxerListener.html @@ -177,7 +177,7 @@ virtual void OnNewSegment< diff --git a/docs/df/de9/segment__info_8h_source.html b/docs/df/de9/segment__info_8h_source.html index ece22a823a..90474c268d 100644 --- a/docs/df/de9/segment__info_8h_source.html +++ b/docs/df/de9/segment__info_8h_source.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dec/classedash__packager_1_1media_1_1MuxerListener-members.html b/docs/df/dec/classedash__packager_1_1media_1_1MuxerListener-members.html index 261748e15e..18d72aabd9 100644 --- a/docs/df/dec/classedash__packager_1_1media_1_1MuxerListener-members.html +++ b/docs/df/dec/classedash__packager_1_1media_1_1MuxerListener-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/df4/classedash__packager_1_1media_1_1SeekHead.html b/docs/df/df4/classedash__packager_1_1media_1_1SeekHead.html index db3f530567..24c98b5792 100644 --- a/docs/df/df4/classedash__packager_1_1media_1_1SeekHead.html +++ b/docs/df/df4/classedash__packager_1_1media_1_1SeekHead.html @@ -148,7 +148,7 @@ void set_tracks_pos (u diff --git a/docs/df/dfa/classedash__packager_1_1media_1_1RsaPublicKey-members.html b/docs/df/dfa/classedash__packager_1_1media_1_1RsaPublicKey-members.html index 90e80dcac5..147643281a 100644 --- a/docs/df/dfa/classedash__packager_1_1media_1_1RsaPublicKey-members.html +++ b/docs/df/dfa/classedash__packager_1_1media_1_1RsaPublicKey-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dir_2618cd273dea54f184e42d7a562af818.html b/docs/dir_2618cd273dea54f184e42d7a562af818.html index 04984db244..5587786e56 100644 --- a/docs/dir_2618cd273dea54f184e42d7a562af818.html +++ b/docs/dir_2618cd273dea54f184e42d7a562af818.html @@ -140,7 +140,7 @@ Files diff --git a/docs/dir_279fd47bebb21302c25cfb685e84c359.html b/docs/dir_279fd47bebb21302c25cfb685e84c359.html index a216dd747a..a51275734f 100644 --- a/docs/dir_279fd47bebb21302c25cfb685e84c359.html +++ b/docs/dir_279fd47bebb21302c25cfb685e84c359.html @@ -117,7 +117,7 @@ Files diff --git a/docs/dir_2eceb70145328c029a5f43350007537a.html b/docs/dir_2eceb70145328c029a5f43350007537a.html index e8d3db8759..043be57271 100644 --- a/docs/dir_2eceb70145328c029a5f43350007537a.html +++ b/docs/dir_2eceb70145328c029a5f43350007537a.html @@ -93,7 +93,7 @@ Files diff --git a/docs/dir_39dc0668bd5a501998f94e8b4e546c71.html b/docs/dir_39dc0668bd5a501998f94e8b4e546c71.html index ad02035204..461ca1fae9 100644 --- a/docs/dir_39dc0668bd5a501998f94e8b4e546c71.html +++ b/docs/dir_39dc0668bd5a501998f94e8b4e546c71.html @@ -99,7 +99,7 @@ Directories diff --git a/docs/dir_3e9291fd7a18fdecc763294cb2628910.html b/docs/dir_3e9291fd7a18fdecc763294cb2628910.html index ee2774a2d4..5bb10e8ea9 100644 --- a/docs/dir_3e9291fd7a18fdecc763294cb2628910.html +++ b/docs/dir_3e9291fd7a18fdecc763294cb2628910.html @@ -169,7 +169,7 @@ Files diff --git a/docs/dir_49627ef5ef0630f6cf11dd06344c4cf0.html b/docs/dir_49627ef5ef0630f6cf11dd06344c4cf0.html index 2e87fe4932..d24cc0c6d7 100644 --- a/docs/dir_49627ef5ef0630f6cf11dd06344c4cf0.html +++ b/docs/dir_49627ef5ef0630f6cf11dd06344c4cf0.html @@ -93,7 +93,7 @@ Files diff --git a/docs/dir_5039d854a18988ed1f1dbebc120ffbf7.html b/docs/dir_5039d854a18988ed1f1dbebc120ffbf7.html index 8efc834049..13fa746c07 100644 --- a/docs/dir_5039d854a18988ed1f1dbebc120ffbf7.html +++ b/docs/dir_5039d854a18988ed1f1dbebc120ffbf7.html @@ -177,7 +177,7 @@ Files diff --git a/docs/dir_5eb2e460866db0ed29e32d64402e5c22.html b/docs/dir_5eb2e460866db0ed29e32d64402e5c22.html index 88b89bd47c..5f57ddccf1 100644 --- a/docs/dir_5eb2e460866db0ed29e32d64402e5c22.html +++ b/docs/dir_5eb2e460866db0ed29e32d64402e5c22.html @@ -125,7 +125,7 @@ Files diff --git a/docs/dir_65f7acfa8cf3a5f1edc11faa2428b914.html b/docs/dir_65f7acfa8cf3a5f1edc11faa2428b914.html index cf38a057df..d217a065af 100644 --- a/docs/dir_65f7acfa8cf3a5f1edc11faa2428b914.html +++ b/docs/dir_65f7acfa8cf3a5f1edc11faa2428b914.html @@ -101,7 +101,7 @@ Directories diff --git a/docs/dir_679a6f4e9fa092b388fc986148018f2a.html b/docs/dir_679a6f4e9fa092b388fc986148018f2a.html index 411bf20b71..45fef3ba74 100644 --- a/docs/dir_679a6f4e9fa092b388fc986148018f2a.html +++ b/docs/dir_679a6f4e9fa092b388fc986148018f2a.html @@ -95,7 +95,7 @@ Files diff --git a/docs/dir_7f5e01ba7faf319a30cabd201b6ef121.html b/docs/dir_7f5e01ba7faf319a30cabd201b6ef121.html index 0ddf3b2c78..609ac60955 100644 --- a/docs/dir_7f5e01ba7faf319a30cabd201b6ef121.html +++ b/docs/dir_7f5e01ba7faf319a30cabd201b6ef121.html @@ -93,7 +93,7 @@ Files diff --git a/docs/dir_89dd766eb2df7d7257dbe806a34404af.html b/docs/dir_89dd766eb2df7d7257dbe806a34404af.html index fee9cf7da6..2f142164f9 100644 --- a/docs/dir_89dd766eb2df7d7257dbe806a34404af.html +++ b/docs/dir_89dd766eb2df7d7257dbe806a34404af.html @@ -93,7 +93,7 @@ Directories diff --git a/docs/dir_aa73376d632f252584a1c0dfbefab2c4.html b/docs/dir_aa73376d632f252584a1c0dfbefab2c4.html index 8bcd645eef..0f296a1dc1 100644 --- a/docs/dir_aa73376d632f252584a1c0dfbefab2c4.html +++ b/docs/dir_aa73376d632f252584a1c0dfbefab2c4.html @@ -109,7 +109,7 @@ Files diff --git a/docs/dir_c6ada2450b25ab5438a4dba6c9b890af.html b/docs/dir_c6ada2450b25ab5438a4dba6c9b890af.html index 4550d83117..8e9bbddd5d 100644 --- a/docs/dir_c6ada2450b25ab5438a4dba6c9b890af.html +++ b/docs/dir_c6ada2450b25ab5438a4dba6c9b890af.html @@ -217,7 +217,7 @@ Files diff --git a/docs/dir_d422163b96683743ed3963d4aac17747.html b/docs/dir_d422163b96683743ed3963d4aac17747.html index bc6315403f..081ec74e23 100644 --- a/docs/dir_d422163b96683743ed3963d4aac17747.html +++ b/docs/dir_d422163b96683743ed3963d4aac17747.html @@ -131,7 +131,7 @@ Files diff --git a/docs/dir_eeaeb49ac3913fcfb450d3ce9cc0141b.html b/docs/dir_eeaeb49ac3913fcfb450d3ce9cc0141b.html index 60d1e75b11..014a414c3c 100644 --- a/docs/dir_eeaeb49ac3913fcfb450d3ce9cc0141b.html +++ b/docs/dir_eeaeb49ac3913fcfb450d3ce9cc0141b.html @@ -93,7 +93,7 @@ Files diff --git a/docs/dir_f7dcbe7025bbacfc4b9a7dff6ad41d72.html b/docs/dir_f7dcbe7025bbacfc4b9a7dff6ad41d72.html index 3f3b550523..20de641a3c 100644 --- a/docs/dir_f7dcbe7025bbacfc4b9a7dff6ad41d72.html +++ b/docs/dir_f7dcbe7025bbacfc4b9a7dff6ad41d72.html @@ -131,7 +131,7 @@ Files diff --git a/docs/files.html b/docs/files.html index 09478959e3..863257ef95 100644 --- a/docs/files.html +++ b/docs/files.html @@ -373,7 +373,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions.html b/docs/functions.html index d9f1cd381c..893da59ed1 100644 --- a/docs/functions.html +++ b/docs/functions.html @@ -202,7 +202,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : edash_packager::media::mp4::AACAudioSpecificConfig
  • AudioStreamInfo() -: edash_packager::media::AudioStreamInfo +: edash_packager::media::AudioStreamInfo
  • AuxInfoNeedsToBeCached() : edash_packager::media::mp4::TrackRunIterator @@ -211,7 +211,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_b.html b/docs/functions_b.html index f28acd5be1..6e48259cb2 100644 --- a/docs/functions_b.html +++ b/docs/functions_b.html @@ -234,7 +234,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_c.html b/docs/functions_c.html index 6e9fe8c608..8f964d0f1c 100644 --- a/docs/functions_c.html +++ b/docs/functions_c.html @@ -213,7 +213,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_d.html b/docs/functions_d.html index 511dcf1911..6109c193ae 100644 --- a/docs/functions_d.html +++ b/docs/functions_d.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_e.html b/docs/functions_e.html index cb3e082773..57703a7bf2 100644 --- a/docs/functions_e.html +++ b/docs/functions_e.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_eval.html b/docs/functions_eval.html index bd9046104d..27aa48139c 100644 --- a/docs/functions_eval.html +++ b/docs/functions_eval.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_f.html b/docs/functions_f.html index 9d0bb50477..244f182291 100644 --- a/docs/functions_f.html +++ b/docs/functions_f.html @@ -187,7 +187,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func.html b/docs/functions_func.html index d1e687b875..6baa06c55f 100644 --- a/docs/functions_func.html +++ b/docs/functions_func.html @@ -202,7 +202,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : edash_packager::media::mp4::AACAudioSpecificConfig
  • AudioStreamInfo() -: edash_packager::media::AudioStreamInfo +: edash_packager::media::AudioStreamInfo
  • AuxInfoNeedsToBeCached() : edash_packager::media::mp4::TrackRunIterator @@ -211,7 +211,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_b.html b/docs/functions_func_b.html index 1332e80605..af2e68b851 100644 --- a/docs/functions_func_b.html +++ b/docs/functions_func_b.html @@ -231,7 +231,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_c.html b/docs/functions_func_c.html index 8f16176df2..4dfc93b6d4 100644 --- a/docs/functions_func_c.html +++ b/docs/functions_func_c.html @@ -213,7 +213,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_d.html b/docs/functions_func_d.html index e90a5347fc..3be3a961e0 100644 --- a/docs/functions_func_d.html +++ b/docs/functions_func_d.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_e.html b/docs/functions_func_e.html index 7bccee5ebe..31383ca982 100644 --- a/docs/functions_func_e.html +++ b/docs/functions_func_e.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_f.html b/docs/functions_func_f.html index 0fa31b3c44..2456e506ae 100644 --- a/docs/functions_func_f.html +++ b/docs/functions_func_f.html @@ -181,7 +181,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_g.html b/docs/functions_func_g.html index aafde6a81e..f88518f7e3 100644 --- a/docs/functions_func_g.html +++ b/docs/functions_func_g.html @@ -234,7 +234,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_h.html b/docs/functions_func_h.html index 9785e562ac..7a0b1499d4 100644 --- a/docs/functions_func_h.html +++ b/docs/functions_func_h.html @@ -141,7 +141,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_i.html b/docs/functions_func_i.html index b850e14967..5e569261a2 100644 --- a/docs/functions_func_i.html +++ b/docs/functions_func_i.html @@ -196,7 +196,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_k.html b/docs/functions_func_k.html index 00903783d8..9a2dcd2a96 100644 --- a/docs/functions_func_k.html +++ b/docs/functions_func_k.html @@ -128,7 +128,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_l.html b/docs/functions_func_l.html index 33532e3fe7..1b5cf0c008 100644 --- a/docs/functions_func_l.html +++ b/docs/functions_func_l.html @@ -137,7 +137,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_m.html b/docs/functions_func_m.html index 874ee1a56e..a59ec6b778 100644 --- a/docs/functions_func_m.html +++ b/docs/functions_func_m.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_n.html b/docs/functions_func_n.html index 9d4d0de167..4a3d989889 100644 --- a/docs/functions_func_n.html +++ b/docs/functions_func_n.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_o.html b/docs/functions_func_o.html index 39a69e50d4..4dcee4364f 100644 --- a/docs/functions_func_o.html +++ b/docs/functions_func_o.html @@ -161,7 +161,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_p.html b/docs/functions_func_p.html index 8bba3cc432..e778093bdd 100644 --- a/docs/functions_func_p.html +++ b/docs/functions_func_p.html @@ -206,7 +206,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_r.html b/docs/functions_func_r.html index f10c8b825e..3824c629c6 100644 --- a/docs/functions_func_r.html +++ b/docs/functions_func_r.html @@ -200,7 +200,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_s.html b/docs/functions_func_s.html index 05113e257f..3dd4b0d561 100644 --- a/docs/functions_func_s.html +++ b/docs/functions_func_s.html @@ -259,7 +259,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_t.html b/docs/functions_func_t.html index d628fef346..7240c436e9 100644 --- a/docs/functions_func_t.html +++ b/docs/functions_func_t.html @@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_u.html b/docs/functions_func_u.html index 46ddfa56f5..9fd1600f99 100644 --- a/docs/functions_func_u.html +++ b/docs/functions_func_u.html @@ -146,7 +146,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_v.html b/docs/functions_func_v.html index 5a5c1e5ac6..e0ea3bd165 100644 --- a/docs/functions_func_v.html +++ b/docs/functions_func_v.html @@ -134,7 +134,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_w.html b/docs/functions_func_w.html index 454e980684..3d55b56a59 100644 --- a/docs/functions_func_w.html +++ b/docs/functions_func_w.html @@ -173,7 +173,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_x.html b/docs/functions_func_x.html index 8e4274ef1f..6bfdc611ac 100644 --- a/docs/functions_func_x.html +++ b/docs/functions_func_x.html @@ -128,7 +128,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_~.html b/docs/functions_func_~.html index 1ed2e6a66d..966542bf1a 100644 --- a/docs/functions_func_~.html +++ b/docs/functions_func_~.html @@ -131,7 +131,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_g.html b/docs/functions_g.html index 6de90f9406..cc1bcd88d1 100644 --- a/docs/functions_g.html +++ b/docs/functions_g.html @@ -234,7 +234,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_h.html b/docs/functions_h.html index 4fa65fae38..aa29a3567d 100644 --- a/docs/functions_h.html +++ b/docs/functions_h.html @@ -141,7 +141,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_i.html b/docs/functions_i.html index 560c7fc165..71d72d0582 100644 --- a/docs/functions_i.html +++ b/docs/functions_i.html @@ -199,7 +199,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_k.html b/docs/functions_k.html index eedc6c7584..b770f0abfa 100644 --- a/docs/functions_k.html +++ b/docs/functions_k.html @@ -146,7 +146,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_l.html b/docs/functions_l.html index 9dc51ca9cd..474e305ce0 100644 --- a/docs/functions_l.html +++ b/docs/functions_l.html @@ -137,7 +137,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_m.html b/docs/functions_m.html index d7e34b58b3..855cd6d7a1 100644 --- a/docs/functions_m.html +++ b/docs/functions_m.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_n.html b/docs/functions_n.html index 752d99f175..8cc55b8e77 100644 --- a/docs/functions_n.html +++ b/docs/functions_n.html @@ -159,7 +159,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_o.html b/docs/functions_o.html index b0d250163c..44ed546af1 100644 --- a/docs/functions_o.html +++ b/docs/functions_o.html @@ -164,7 +164,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_p.html b/docs/functions_p.html index 9582e2567a..246d6e479a 100644 --- a/docs/functions_p.html +++ b/docs/functions_p.html @@ -206,7 +206,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_r.html b/docs/functions_r.html index d06f433d13..b27281ad5a 100644 --- a/docs/functions_r.html +++ b/docs/functions_r.html @@ -200,7 +200,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_s.html b/docs/functions_s.html index 792937ca83..a3fe8655d4 100644 --- a/docs/functions_s.html +++ b/docs/functions_s.html @@ -274,7 +274,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_t.html b/docs/functions_t.html index aeb534b556..b3a93b2e89 100644 --- a/docs/functions_t.html +++ b/docs/functions_t.html @@ -174,7 +174,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_type.html b/docs/functions_type.html index 54c3c3b13f..5fbba12b2e 100644 --- a/docs/functions_type.html +++ b/docs/functions_type.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_u.html b/docs/functions_u.html index bdd8d3150c..16463ce344 100644 --- a/docs/functions_u.html +++ b/docs/functions_u.html @@ -146,7 +146,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_v.html b/docs/functions_v.html index 5d37635a92..5d769ef3ee 100644 --- a/docs/functions_v.html +++ b/docs/functions_v.html @@ -134,7 +134,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_vars.html b/docs/functions_vars.html index f2b45b6b41..87e800dc45 100644 --- a/docs/functions_vars.html +++ b/docs/functions_vars.html @@ -141,7 +141,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_w.html b/docs/functions_w.html index cf0b618993..6132ff0174 100644 --- a/docs/functions_w.html +++ b/docs/functions_w.html @@ -173,7 +173,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_x.html b/docs/functions_x.html index 524e3722c0..7087f3cc3e 100644 --- a/docs/functions_x.html +++ b/docs/functions_x.html @@ -128,7 +128,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_~.html b/docs/functions_~.html index 82e0a0038c..012c2fe572 100644 --- a/docs/functions_~.html +++ b/docs/functions_~.html @@ -131,7 +131,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/hierarchy.html b/docs/hierarchy.html index 82f3c3ca5f..bae55a8bdc 100644 --- a/docs/hierarchy.html +++ b/docs/hierarchy.html @@ -325,7 +325,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/index.html b/docs/index.html index f89aca37b4..45777c98ac 100644 --- a/docs/index.html +++ b/docs/index.html @@ -81,7 +81,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/namespacemembers.html b/docs/namespacemembers.html index b509ac579e..46517bc417 100644 --- a/docs/namespacemembers.html +++ b/docs/namespacemembers.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/namespacemembers_func.html b/docs/namespacemembers_func.html index 179f9fe4b8..9e01a3f730 100644 --- a/docs/namespacemembers_func.html +++ b/docs/namespacemembers_func.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/namespaces.html b/docs/namespaces.html index 74adff0534..ea3eb81080 100644 --- a/docs/namespaces.html +++ b/docs/namespaces.html @@ -92,7 +92,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/search/all_0.js b/docs/search/all_0.js index be29f86a12..42aef40504 100644 --- a/docs/search/all_0.js +++ b/docs/search/all_0.js @@ -36,7 +36,7 @@ var searchData= ['audio_5fobject_5ftype',['audio_object_type',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a12bcda441f7745bd70cb9b4fdfb4b9b5',1,'edash_packager::media::mp4::AACAudioSpecificConfig']]], ['audiosampleentry',['AudioSampleEntry',['../df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html',1,'edash_packager::media::mp4']]], ['audiostreaminfo',['AudioStreamInfo',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html',1,'edash_packager::media']]], - ['audiostreaminfo',['AudioStreamInfo',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html#a014cdf015863a200c10cb72c3ec042ab',1,'edash_packager::media::AudioStreamInfo']]], + ['audiostreaminfo',['AudioStreamInfo',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html#a3a75339290a004cc4b2dd232e4561ed8',1,'edash_packager::media::AudioStreamInfo']]], ['audiotimestamphelper',['AudioTimestampHelper',['../da/de4/classedash__packager_1_1media_1_1AudioTimestampHelper.html',1,'edash_packager::media']]], ['auxinfoneedstobecached',['AuxInfoNeedsToBeCached',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a3538a0f31238843afd2dfb4e94587f03',1,'edash_packager::media::mp4::TrackRunIterator']]], ['avcdecoderconfiguration',['AVCDecoderConfiguration',['../d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html',1,'edash_packager::media']]] diff --git a/docs/search/functions_0.js b/docs/search/functions_0.js index 481fa2862f..6b0abce2b1 100644 --- a/docs/search/functions_0.js +++ b/docs/search/functions_0.js @@ -24,6 +24,6 @@ var searchData= ['appendnbytes',['AppendNBytes',['../df/dde/classedash__packager_1_1media_1_1BufferWriter.html#ac929211fc97bc8ec880109775757bb81',1,'edash_packager::media::BufferWriter']]], ['audio_5fdescription',['audio_description',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a2c58182a77817e4ed4a2860ae3be73df',1,'edash_packager::media::mp4::TrackRunIterator']]], ['audio_5fobject_5ftype',['audio_object_type',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a12bcda441f7745bd70cb9b4fdfb4b9b5',1,'edash_packager::media::mp4::AACAudioSpecificConfig']]], - ['audiostreaminfo',['AudioStreamInfo',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html#a014cdf015863a200c10cb72c3ec042ab',1,'edash_packager::media::AudioStreamInfo']]], + ['audiostreaminfo',['AudioStreamInfo',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html#a3a75339290a004cc4b2dd232e4561ed8',1,'edash_packager::media::AudioStreamInfo']]], ['auxinfoneedstobecached',['AuxInfoNeedsToBeCached',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a3538a0f31238843afd2dfb4e94587f03',1,'edash_packager::media::mp4::TrackRunIterator']]] ];