| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |