16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file. 46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <vector> 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/bind.h" 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/logging.h" 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/time/time.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "media/base/buffers.h" 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "media/base/stream_parser_buffer.h" 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "media/formats/mp2t/es_parser_adts.h" 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "media/formats/mp2t/es_parser_test_base.h" 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace media { 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class AudioDecoderConfig; 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace mp2t { 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class EsParserAdtsTest : public EsParserTestBase, 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public testing::Test { 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EsParserAdtsTest(); 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual ~EsParserAdtsTest() {} 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) protected: 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool Process(const std::vector<Packet>& pes_packets, bool force_timing); 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private: 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(EsParserAdtsTest); 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EsParserAdtsTest::EsParserAdtsTest() { 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EsParserAdtsTest::Process( 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const std::vector<Packet>& pes_packets, 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool force_timing) { 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EsParserAdts es_parser( 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Bind(&EsParserAdtsTest::NewAudioConfig, base::Unretained(this)), 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Bind(&EsParserAdtsTest::EmitBuffer, base::Unretained(this)), 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false); 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return ProcessPesPackets(&es_parser, pes_packets, force_timing); 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(EsParserAdtsTest, NoInitialPts) { 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) LoadStream("bear.adts"); 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::vector<Packet> pes_packets = GenerateFixedSizePesPacket(512); 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_FALSE(Process(pes_packets, false)); 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0u, buffer_count_); 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(EsParserAdtsTest, SinglePts) { 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) LoadStream("bear.adts"); 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::vector<Packet> pes_packets = GenerateFixedSizePesPacket(512); 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) pes_packets.front().pts = base::TimeDelta::FromSeconds(10); 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_TRUE(Process(pes_packets, false)); 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(1u, config_count_); 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(45u, buffer_count_); 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace mp2t 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace media 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 68