1 // Copyright 2013 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_MP2T_ES_PARSER_ADTS_H_ 6 #define MEDIA_MP2T_ES_PARSER_ADTS_H_ 7 8 #include <list> 9 #include <utility> 10 11 #include "base/callback.h" 12 #include "base/compiler_specific.h" 13 #include "base/memory/scoped_ptr.h" 14 #include "base/time/time.h" 15 #include "media/base/audio_decoder_config.h" 16 #include "media/base/byte_queue.h" 17 #include "media/mp2t/es_parser.h" 18 19 namespace media { 20 class AudioTimestampHelper; 21 class BitReader; 22 class StreamParserBuffer; 23 } 24 25 namespace media { 26 namespace mp2t { 27 28 class EsParserAdts : public EsParser { 29 public: 30 typedef base::Callback<void(const AudioDecoderConfig&)> NewAudioConfigCB; 31 32 EsParserAdts(const NewAudioConfigCB& new_audio_config_cb, 33 const EmitBufferCB& emit_buffer_cb, 34 bool sbr_in_mimetype); 35 virtual ~EsParserAdts(); 36 37 // EsParser implementation. 38 virtual bool Parse(const uint8* buf, int size, 39 base::TimeDelta pts, 40 base::TimeDelta dts) OVERRIDE; 41 virtual void Flush() OVERRIDE; 42 virtual void Reset() OVERRIDE; 43 44 private: 45 // Used to link a PTS with a byte position in the ES stream. 46 typedef std::pair<int, base::TimeDelta> EsPts; 47 typedef std::list<EsPts> EsPtsList; 48 49 // Signal any audio configuration change (if any). 50 // Return false if the current audio config is not 51 // a supported ADTS audio config. 52 bool UpdateAudioConfiguration(const uint8* adts_header); 53 54 // Discard some bytes from the ES stream. 55 void DiscardEs(int nbytes); 56 57 // Callbacks: 58 // - to signal a new audio configuration, 59 // - to send ES buffers. 60 NewAudioConfigCB new_audio_config_cb_; 61 EmitBufferCB emit_buffer_cb_; 62 63 // True when AAC SBR extension is signalled in the mimetype 64 // (mp4a.40.5 in the codecs parameter). 65 bool sbr_in_mimetype_; 66 67 // Bytes of the ES stream that have not been emitted yet. 68 ByteQueue es_byte_queue_; 69 70 // List of PTS associated with a position in the ES stream. 71 EsPtsList pts_list_; 72 73 // Interpolated PTS for frames that don't have one. 74 scoped_ptr<AudioTimestampHelper> audio_timestamp_helper_; 75 76 // Last audio config. 77 AudioDecoderConfig last_audio_decoder_config_; 78 79 DISALLOW_COPY_AND_ASSIGN(EsParserAdts); 80 }; 81 82 } // namespace mp2t 83 } // namespace media 84 85 #endif 86 87