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 3 // found in the LICENSE file. 4 5 #ifndef MEDIA_FORMATS_MP4_ES_DESCRIPTOR_H_ 6 #define MEDIA_FORMATS_MP4_ES_DESCRIPTOR_H_ 7 8 #include <vector> 9 10 #include "base/basictypes.h" 11 #include "media/base/media_export.h" 12 13 namespace media { 14 15 class BitReader; 16 17 namespace mp4 { 18 19 // The following values are extracted from ISO 14496 Part 1 Table 5 - 20 // objectTypeIndication Values. Only values currently in use are included. 21 enum ObjectType { 22 kForbidden = 0, 23 kISO_14496_3 = 0x40, // MPEG4 AAC 24 kISO_13818_7_AAC_LC = 0x67 // MPEG2 AAC-LC 25 }; 26 27 // This class parse object type and decoder specific information from an 28 // elementary stream descriptor, which is usually contained in an esds box. 29 // Please refer to ISO 14496 Part 1 7.2.6.5 for more details. 30 class MEDIA_EXPORT ESDescriptor { 31 public: 32 // Utility function to check if the given object type is AAC. 33 static bool IsAAC(uint8 object_type); 34 35 ESDescriptor(); 36 ~ESDescriptor(); 37 38 bool Parse(const std::vector<uint8>& data); 39 40 uint8 object_type() const; 41 const std::vector<uint8>& decoder_specific_info() const; 42 43 private: 44 enum Tag { 45 kESDescrTag = 0x03, 46 kDecoderConfigDescrTag = 0x04, 47 kDecoderSpecificInfoTag = 0x05 48 }; 49 50 bool ParseDecoderConfigDescriptor(BitReader* reader); 51 bool ParseDecoderSpecificInfo(BitReader* reader); 52 53 uint8 object_type_; 54 std::vector<uint8> decoder_specific_info_; 55 }; 56 57 } // namespace mp4 58 59 } // namespace media 60 61 #endif // MEDIA_FORMATS_MP4_ES_DESCRIPTOR_H_ 62