Home | History | Annotate | Download | only in mp2t
      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