11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <vector> 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/bind.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/logging.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/time/time.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "media/base/buffers.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "media/base/media_log.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "media/base/stream_parser_buffer.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "media/formats/mp2t/es_parser_mpeg1audio.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "media/formats/mp2t/es_parser_test_base.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gtest/include/gtest/gtest.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace media { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass AudioDecoderConfig; 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace mp2t { 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass EsParserMpeg1AudioTest : public EsParserTestBase, 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public testing::Test { 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EsParserMpeg1AudioTest(); 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~EsParserMpeg1AudioTest() {} 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool Process(const std::vector<Packet>& pes_packets, bool force_timing); 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(EsParserMpeg1AudioTest); 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciEsParserMpeg1AudioTest::EsParserMpeg1AudioTest() { 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool EsParserMpeg1AudioTest::Process( 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::vector<Packet>& pes_packets, 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool force_timing) { 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EsParserMpeg1Audio es_parser( 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&EsParserMpeg1AudioTest::NewAudioConfig, 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Unretained(this)), 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&EsParserMpeg1AudioTest::EmitBuffer, 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Unretained(this)), 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LogCB()); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return ProcessPesPackets(&es_parser, pes_packets, force_timing); 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EsParserMpeg1AudioTest, SinglePts) { 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LoadStream("sfx.mp3"); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<Packet> pes_packets = GenerateFixedSizePesPacket(512); 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pes_packets.front().pts = base::TimeDelta::FromSeconds(10); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Note: there is no parsing of metadata as part of Mpeg2 TS, 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // so the tag starting at 0x80d with 0x54 0x41 0x47 (ascii for "TAG") 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // is not a valid Mpeg1 audio frame header. This makes the previous frame 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // invalid since there is no start code following the previous frame. 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // So instead of the 13 Mpeg1 audio frames, only 12 are considered valid. 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Offset of frames in the file: 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // {0x20, 0x1c1, 0x277, 0x2f9, 0x3fd, 0x47f, 0x501, 0x583, 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // 0x605, 0x687, 0x73d, 0x7a5, 0x80d} 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(damienv): find a file that would be more relevant for Mpeg1 audio 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // as part of Mpeg2 TS. 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(Process(pes_packets, false)); 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1u, config_count_); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(12u, buffer_count_); 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace mp2t 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace media 73