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.
5 #include "media/formats/mp2t/es_parser.h"
7 #include "media/formats/common/offset_byte_queue.h"
12 EsParser::TimingDesc::TimingDesc()
13 : dts(kNoDecodeTimestamp()),
17 EsParser::TimingDesc::TimingDesc(
18 DecodeTimestamp dts_in
, base::TimeDelta pts_in
)
24 : es_queue_(new media::OffsetByteQueue()) {
27 EsParser::~EsParser() {
30 bool EsParser::Parse(const uint8
* buf
, int size
,
32 DecodeTimestamp dts
) {
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
));
43 // Add the incoming bytes to the ES queue.
44 es_queue_
->Push(buf
, size
);
45 return ParseFromEsQueue();
48 void EsParser::Reset() {
49 es_queue_
.reset(new media::OffsetByteQueue());
50 timing_desc_list_
.clear();
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();