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