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 #include "media/formats/mp2t/es_parser.h" 6 7 #include "media/formats/common/offset_byte_queue.h" 8 9 namespace media { 10 namespace mp2t { 11 12 EsParser::TimingDesc::TimingDesc() 13 : dts(kNoDecodeTimestamp()), 14 pts(kNoTimestamp()) { 15 } 16 17 EsParser::TimingDesc::TimingDesc( 18 DecodeTimestamp dts_in, base::TimeDelta pts_in) 19 : dts(dts_in), 20 pts(pts_in) { 21 } 22 23 EsParser::EsParser() 24 : es_queue_(new media::OffsetByteQueue()) { 25 } 26 27 EsParser::~EsParser() { 28 } 29 30 bool EsParser::Parse(const uint8* buf, int size, 31 base::TimeDelta pts, 32 DecodeTimestamp dts) { 33 DCHECK(buf); 34 DCHECK_GT(size, 0); 35 36 if (pts != kNoTimestamp()) { 37 // Link the end of the byte queue with the incoming timing descriptor. 38 TimingDesc timing_desc(dts, pts); 39 timing_desc_list_.push_back( 40 std::pair<int64, TimingDesc>(es_queue_->tail(), timing_desc)); 41 } 42 43 // Add the incoming bytes to the ES queue. 44 es_queue_->Push(buf, size); 45 return ParseFromEsQueue(); 46 } 47 48 void EsParser::Reset() { 49 es_queue_.reset(new media::OffsetByteQueue()); 50 timing_desc_list_.clear(); 51 ResetInternal(); 52 } 53 54 EsParser::TimingDesc EsParser::GetTimingDescriptor(int64 es_byte_count) { 55 TimingDesc timing_desc; 56 while (!timing_desc_list_.empty() && 57 timing_desc_list_.front().first <= es_byte_count) { 58 timing_desc = timing_desc_list_.front().second; 59 timing_desc_list_.pop_front(); 60 } 61 return timing_desc; 62 } 63 64 } // namespace mp2t 65 } // namespace media 66