Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Side by Side Diff: media/formats/webm/webm_parser.cc

Issue 2333663003: Add color metadata info to VideoDecoderConfig. (Closed)
Patch Set: Commented the RangeID comment as suggested Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/formats/webm/webm_constants.h ('k') | media/formats/webm/webm_stream_parser_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/formats/webm/webm_parser.h" 5 #include "media/formats/webm/webm_parser.h"
6 6
7 // This file contains code to parse WebM file elements. It was created 7 // This file contains code to parse WebM file elements. It was created
8 // from information in the Matroska spec. 8 // from information in the Matroska spec.
9 // http://www.matroska.org/technical/specs/index.html 9 // http://www.matroska.org/technical/specs/index.html
10 // This file contains code for encrypted WebM. Current WebM 10 // This file contains code for encrypted WebM. Current WebM
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 {LIST, kWebMIdContentEncodings}, 178 {LIST, kWebMIdContentEncodings},
179 }; 179 };
180 180
181 static const ElementIdInfo kTrackTranslateIds[] = { 181 static const ElementIdInfo kTrackTranslateIds[] = {
182 {UINT, kWebMIdTrackTranslateEditionUID}, 182 {UINT, kWebMIdTrackTranslateEditionUID},
183 {UINT, kWebMIdTrackTranslateCodec}, 183 {UINT, kWebMIdTrackTranslateCodec},
184 {BINARY, kWebMIdTrackTranslateTrackID}, 184 {BINARY, kWebMIdTrackTranslateTrackID},
185 }; 185 };
186 186
187 static const ElementIdInfo kVideoIds[] = { 187 static const ElementIdInfo kVideoIds[] = {
188 {UINT, kWebMIdFlagInterlaced}, 188 {UINT, kWebMIdFlagInterlaced}, {UINT, kWebMIdStereoMode},
189 {UINT, kWebMIdStereoMode}, 189 {UINT, kWebMIdAlphaMode}, {UINT, kWebMIdPixelWidth},
190 {UINT, kWebMIdAlphaMode}, 190 {UINT, kWebMIdPixelHeight}, {UINT, kWebMIdPixelCropBottom},
191 {UINT, kWebMIdPixelWidth}, 191 {UINT, kWebMIdPixelCropTop}, {UINT, kWebMIdPixelCropLeft},
192 {UINT, kWebMIdPixelHeight}, 192 {UINT, kWebMIdPixelCropRight}, {UINT, kWebMIdDisplayWidth},
193 {UINT, kWebMIdPixelCropBottom}, 193 {UINT, kWebMIdDisplayHeight}, {UINT, kWebMIdDisplayUnit},
194 {UINT, kWebMIdPixelCropTop}, 194 {UINT, kWebMIdAspectRatioType}, {BINARY, kWebMIdColorSpace},
195 {UINT, kWebMIdPixelCropLeft}, 195 {FLOAT, kWebMIdFrameRate}, {LIST, kWebMIdColour},
196 {UINT, kWebMIdPixelCropRight}, 196 };
197 {UINT, kWebMIdDisplayWidth}, 197
198 {UINT, kWebMIdDisplayHeight}, 198 static const ElementIdInfo kColourIds[] = {
199 {UINT, kWebMIdDisplayUnit}, 199 {UINT, kWebMIdMatrixCoefficients},
200 {UINT, kWebMIdAspectRatioType}, 200 {UINT, kWebMIdBitsPerChannel},
201 {BINARY, kWebMIdColorSpace}, 201 {UINT, kWebMIdChromaSubsamplingHorz},
202 {FLOAT, kWebMIdFrameRate}, 202 {UINT, kWebMIdChromaSubsamplingVert},
203 {UINT, kWebMIdCbSubsamplingHorz},
204 {UINT, kWebMIdCbSubsamplingVert},
205 {UINT, kWebMIdChromaSitingHorz},
206 {UINT, kWebMIdChromaSitingVert},
207 {UINT, kWebMIdRange},
208 {UINT, kWebMIdTransferCharacteristics},
209 {UINT, kWebMIdPrimaries},
210 {UINT, kWebMIdMaxCLL},
211 {UINT, kWebMIdMaxFALL},
212 {LIST, kWebMIdMasteringMetadata},
213 };
214
215 static const ElementIdInfo kMasteringMetadataIds[] = {
216 {FLOAT, kWebMIdPrimaryRChromaticityX},
217 {FLOAT, kWebMIdPrimaryRChromaticityY},
218 {FLOAT, kWebMIdPrimaryGChromaticityX},
219 {FLOAT, kWebMIdPrimaryGChromaticityY},
220 {FLOAT, kWebMIdPrimaryBChromaticityX},
221 {FLOAT, kWebMIdPrimaryBChromaticityY},
222 {FLOAT, kWebMIdWhitePointChromaticityX},
223 {FLOAT, kWebMIdWhitePointChromaticityY},
224 {FLOAT, kWebMIdLuminanceMax},
225 {FLOAT, kWebMIdLuminanceMin},
203 }; 226 };
204 227
205 static const ElementIdInfo kAudioIds[] = { 228 static const ElementIdInfo kAudioIds[] = {
206 {FLOAT, kWebMIdSamplingFrequency}, 229 {FLOAT, kWebMIdSamplingFrequency},
207 {FLOAT, kWebMIdOutputSamplingFrequency}, 230 {FLOAT, kWebMIdOutputSamplingFrequency},
208 {UINT, kWebMIdChannels}, 231 {UINT, kWebMIdChannels},
209 {UINT, kWebMIdBitDepth}, 232 {UINT, kWebMIdBitDepth},
210 }; 233 };
211 234
212 static const ElementIdInfo kTrackOperationIds[] = { 235 static const ElementIdInfo kTrackOperationIds[] = {
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 {STRING, kWebMIdTagLanguage}, 384 {STRING, kWebMIdTagLanguage},
362 {UINT, kWebMIdTagDefault}, 385 {UINT, kWebMIdTagDefault},
363 {STRING, kWebMIdTagString}, 386 {STRING, kWebMIdTagString},
364 {BINARY, kWebMIdTagBinary}, 387 {BINARY, kWebMIdTagBinary},
365 }; 388 };
366 389
367 #define LIST_ELEMENT_INFO(id, level, id_info) \ 390 #define LIST_ELEMENT_INFO(id, level, id_info) \
368 { (id), (level), (id_info), arraysize(id_info) } 391 { (id), (level), (id_info), arraysize(id_info) }
369 392
370 static const ListElementInfo kListElementInfo[] = { 393 static const ListElementInfo kListElementInfo[] = {
371 LIST_ELEMENT_INFO(kWebMIdCluster, 1, kClusterIds), 394 LIST_ELEMENT_INFO(kWebMIdCluster, 1, kClusterIds),
372 LIST_ELEMENT_INFO(kWebMIdEBMLHeader, 0, kEBMLHeaderIds), 395 LIST_ELEMENT_INFO(kWebMIdEBMLHeader, 0, kEBMLHeaderIds),
373 LIST_ELEMENT_INFO(kWebMIdSegment, 0, kSegmentIds), 396 LIST_ELEMENT_INFO(kWebMIdSegment, 0, kSegmentIds),
374 LIST_ELEMENT_INFO(kWebMIdSeekHead, 1, kSeekHeadIds), 397 LIST_ELEMENT_INFO(kWebMIdSeekHead, 1, kSeekHeadIds),
375 LIST_ELEMENT_INFO(kWebMIdSeek, 2, kSeekIds), 398 LIST_ELEMENT_INFO(kWebMIdSeek, 2, kSeekIds),
376 LIST_ELEMENT_INFO(kWebMIdInfo, 1, kInfoIds), 399 LIST_ELEMENT_INFO(kWebMIdInfo, 1, kInfoIds),
377 LIST_ELEMENT_INFO(kWebMIdChapterTranslate, 2, kChapterTranslateIds), 400 LIST_ELEMENT_INFO(kWebMIdChapterTranslate, 2, kChapterTranslateIds),
378 LIST_ELEMENT_INFO(kWebMIdSilentTracks, 2, kSilentTracksIds), 401 LIST_ELEMENT_INFO(kWebMIdSilentTracks, 2, kSilentTracksIds),
379 LIST_ELEMENT_INFO(kWebMIdBlockGroup, 2, kBlockGroupIds), 402 LIST_ELEMENT_INFO(kWebMIdBlockGroup, 2, kBlockGroupIds),
380 LIST_ELEMENT_INFO(kWebMIdBlockAdditions, 3, kBlockAdditionsIds), 403 LIST_ELEMENT_INFO(kWebMIdBlockAdditions, 3, kBlockAdditionsIds),
381 LIST_ELEMENT_INFO(kWebMIdBlockMore, 4, kBlockMoreIds), 404 LIST_ELEMENT_INFO(kWebMIdBlockMore, 4, kBlockMoreIds),
382 LIST_ELEMENT_INFO(kWebMIdSlices, 3, kSlicesIds), 405 LIST_ELEMENT_INFO(kWebMIdSlices, 3, kSlicesIds),
383 LIST_ELEMENT_INFO(kWebMIdTimeSlice, 4, kTimeSliceIds), 406 LIST_ELEMENT_INFO(kWebMIdTimeSlice, 4, kTimeSliceIds),
384 LIST_ELEMENT_INFO(kWebMIdTracks, 1, kTracksIds), 407 LIST_ELEMENT_INFO(kWebMIdTracks, 1, kTracksIds),
385 LIST_ELEMENT_INFO(kWebMIdTrackEntry, 2, kTrackEntryIds), 408 LIST_ELEMENT_INFO(kWebMIdTrackEntry, 2, kTrackEntryIds),
386 LIST_ELEMENT_INFO(kWebMIdTrackTranslate, 3, kTrackTranslateIds), 409 LIST_ELEMENT_INFO(kWebMIdTrackTranslate, 3, kTrackTranslateIds),
387 LIST_ELEMENT_INFO(kWebMIdVideo, 3, kVideoIds), 410 LIST_ELEMENT_INFO(kWebMIdVideo, 3, kVideoIds),
388 LIST_ELEMENT_INFO(kWebMIdAudio, 3, kAudioIds), 411 LIST_ELEMENT_INFO(kWebMIdAudio, 3, kAudioIds),
389 LIST_ELEMENT_INFO(kWebMIdTrackOperation, 3, kTrackOperationIds), 412 LIST_ELEMENT_INFO(kWebMIdTrackOperation, 3, kTrackOperationIds),
390 LIST_ELEMENT_INFO(kWebMIdTrackCombinePlanes, 4, kTrackCombinePlanesIds), 413 LIST_ELEMENT_INFO(kWebMIdTrackCombinePlanes, 4, kTrackCombinePlanesIds),
391 LIST_ELEMENT_INFO(kWebMIdTrackPlane, 5, kTrackPlaneIds), 414 LIST_ELEMENT_INFO(kWebMIdTrackPlane, 5, kTrackPlaneIds),
392 LIST_ELEMENT_INFO(kWebMIdJoinBlocks, 4, kJoinBlocksIds), 415 LIST_ELEMENT_INFO(kWebMIdJoinBlocks, 4, kJoinBlocksIds),
393 LIST_ELEMENT_INFO(kWebMIdContentEncodings, 3, kContentEncodingsIds), 416 LIST_ELEMENT_INFO(kWebMIdContentEncodings, 3, kContentEncodingsIds),
394 LIST_ELEMENT_INFO(kWebMIdContentEncoding, 4, kContentEncodingIds), 417 LIST_ELEMENT_INFO(kWebMIdContentEncoding, 4, kContentEncodingIds),
395 LIST_ELEMENT_INFO(kWebMIdContentCompression, 5, kContentCompressionIds), 418 LIST_ELEMENT_INFO(kWebMIdContentCompression, 5, kContentCompressionIds),
396 LIST_ELEMENT_INFO(kWebMIdContentEncryption, 5, kContentEncryptionIds), 419 LIST_ELEMENT_INFO(kWebMIdContentEncryption, 5, kContentEncryptionIds),
397 LIST_ELEMENT_INFO(kWebMIdContentEncAESSettings, 6, kContentEncAESSettingsIds), 420 LIST_ELEMENT_INFO(kWebMIdContentEncAESSettings,
398 LIST_ELEMENT_INFO(kWebMIdCues, 1, kCuesIds), 421 6,
399 LIST_ELEMENT_INFO(kWebMIdCuePoint, 2, kCuePointIds), 422 kContentEncAESSettingsIds),
400 LIST_ELEMENT_INFO(kWebMIdCueTrackPositions, 3, kCueTrackPositionsIds), 423 LIST_ELEMENT_INFO(kWebMIdCues, 1, kCuesIds),
401 LIST_ELEMENT_INFO(kWebMIdCueReference, 4, kCueReferenceIds), 424 LIST_ELEMENT_INFO(kWebMIdCuePoint, 2, kCuePointIds),
402 LIST_ELEMENT_INFO(kWebMIdAttachments, 1, kAttachmentsIds), 425 LIST_ELEMENT_INFO(kWebMIdCueTrackPositions, 3, kCueTrackPositionsIds),
403 LIST_ELEMENT_INFO(kWebMIdAttachedFile, 2, kAttachedFileIds), 426 LIST_ELEMENT_INFO(kWebMIdCueReference, 4, kCueReferenceIds),
404 LIST_ELEMENT_INFO(kWebMIdChapters, 1, kChaptersIds), 427 LIST_ELEMENT_INFO(kWebMIdAttachments, 1, kAttachmentsIds),
405 LIST_ELEMENT_INFO(kWebMIdEditionEntry, 2, kEditionEntryIds), 428 LIST_ELEMENT_INFO(kWebMIdAttachedFile, 2, kAttachedFileIds),
406 LIST_ELEMENT_INFO(kWebMIdChapterAtom, 3, kChapterAtomIds), 429 LIST_ELEMENT_INFO(kWebMIdChapters, 1, kChaptersIds),
407 LIST_ELEMENT_INFO(kWebMIdChapterTrack, 4, kChapterTrackIds), 430 LIST_ELEMENT_INFO(kWebMIdEditionEntry, 2, kEditionEntryIds),
408 LIST_ELEMENT_INFO(kWebMIdChapterDisplay, 4, kChapterDisplayIds), 431 LIST_ELEMENT_INFO(kWebMIdChapterAtom, 3, kChapterAtomIds),
409 LIST_ELEMENT_INFO(kWebMIdChapProcess, 4, kChapProcessIds), 432 LIST_ELEMENT_INFO(kWebMIdChapterTrack, 4, kChapterTrackIds),
410 LIST_ELEMENT_INFO(kWebMIdChapProcessCommand, 5, kChapProcessCommandIds), 433 LIST_ELEMENT_INFO(kWebMIdChapterDisplay, 4, kChapterDisplayIds),
411 LIST_ELEMENT_INFO(kWebMIdTags, 1, kTagsIds), 434 LIST_ELEMENT_INFO(kWebMIdChapProcess, 4, kChapProcessIds),
412 LIST_ELEMENT_INFO(kWebMIdTag, 2, kTagIds), 435 LIST_ELEMENT_INFO(kWebMIdChapProcessCommand, 5, kChapProcessCommandIds),
413 LIST_ELEMENT_INFO(kWebMIdTargets, 3, kTargetsIds), 436 LIST_ELEMENT_INFO(kWebMIdTags, 1, kTagsIds),
414 LIST_ELEMENT_INFO(kWebMIdSimpleTag, 3, kSimpleTagIds), 437 LIST_ELEMENT_INFO(kWebMIdTag, 2, kTagIds),
438 LIST_ELEMENT_INFO(kWebMIdTargets, 3, kTargetsIds),
439 LIST_ELEMENT_INFO(kWebMIdSimpleTag, 3, kSimpleTagIds),
440 LIST_ELEMENT_INFO(kWebMIdColour, 4, kColourIds),
441 LIST_ELEMENT_INFO(kWebMIdMasteringMetadata, 5, kMasteringMetadataIds),
415 }; 442 };
416 443
417 // Parses an element header id or size field. These fields are variable length 444 // Parses an element header id or size field. These fields are variable length
418 // encoded. The first byte indicates how many bytes the field occupies. 445 // encoded. The first byte indicates how many bytes the field occupies.
419 // |buf| - The buffer to parse. 446 // |buf| - The buffer to parse.
420 // |size| - The number of bytes in |buf| 447 // |size| - The number of bytes in |buf|
421 // |max_bytes| - The maximum number of bytes the field can be. ID fields 448 // |max_bytes| - The maximum number of bytes the field can be. ID fields
422 // set this to 4 & element size fields set this to 8. If the 449 // set this to 4 & element size fields set this to 8. If the
423 // first byte indicates a larger field size than this it is a 450 // first byte indicates a larger field size than this it is a
424 // parser error. 451 // parser error.
(...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 if (kSegmentIds[i].id_ == id_b) 993 if (kSegmentIds[i].id_ == id_b)
967 return true; 994 return true;
968 } 995 }
969 } 996 }
970 997
971 // kWebMIdSegment siblings. 998 // kWebMIdSegment siblings.
972 return ((id_b == kWebMIdSegment) || (id_b == kWebMIdEBMLHeader)); 999 return ((id_b == kWebMIdSegment) || (id_b == kWebMIdEBMLHeader));
973 } 1000 }
974 1001
975 } // namespace media 1002 } // namespace media
OLDNEW
« no previous file with comments | « media/formats/webm/webm_constants.h ('k') | media/formats/webm/webm_stream_parser_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698