15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file. 468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef MEDIA_FORMATS_MP2T_TS_SECTION_PES_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define MEDIA_FORMATS_MP2T_TS_SECTION_PES_H_ 768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/basictypes.h" 968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/compiler_specific.h" 1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "media/base/byte_queue.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "media/formats/mp2t/ts_section.h" 1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace media { 1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace mp2t { 1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class EsParser; 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass TimestampUnroller; 1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class TsSectionPes : public TsSection { 2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public: 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TsSectionPes(scoped_ptr<EsParser> es_parser, 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TimestampUnroller* timestamp_unroller); 2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual ~TsSectionPes(); 2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // TsSection implementation. 2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual bool Parse(bool payload_unit_start_indicator, 2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const uint8* buf, int size) OVERRIDE; 2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void Flush() OVERRIDE; 3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void Reset() OVERRIDE; 3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private: 3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Emit a reassembled PES packet. 3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Return true if successful. 3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // |emit_for_unknown_size| is used to force emission for PES packets 3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // whose size is unknown. 3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool Emit(bool emit_for_unknown_size); 3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Parse a PES packet, return true if successful. 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool ParseInternal(const uint8* raw_pes, int raw_pes_size); 4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void ResetPesState(); 4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Bytes of the current PES. 4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ByteQueue pes_byte_queue_; 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // ES parser. 4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) scoped_ptr<EsParser> es_parser_; 4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Do not start parsing before getting a unit start indicator. 5168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool wait_for_pusi_; 5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Used to unroll PTS and DTS. 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TimestampUnroller* const timestamp_unroller_; 5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TsSectionPes); 5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}; 5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} // namespace mp2t 6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} // namespace media 6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif 6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 64