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/base/test_data_util.h"
6 #include "media/formats/common/stream_parser_test_base.h"
7 #include "media/formats/mpeg/mpeg1_audio_stream_parser.h"
8 #include "testing/gtest/include/gtest/gtest.h"
12 class MPEG1AudioStreamParserTest
13 : public StreamParserTestBase
, public testing::Test
{
15 MPEG1AudioStreamParserTest()
16 : StreamParserTestBase(make_scoped_ptr(new MPEG1AudioStreamParser())) {}
19 // Test parsing with small prime sized chunks to smoke out "power of
20 // 2" field size assumptions.
21 TEST_F(MPEG1AudioStreamParserTest
, UnalignedAppend
) {
22 const std::string expected
=
41 EXPECT_EQ(expected
, ParseFile("sfx.mp3", 17));
42 EXPECT_GT(last_audio_config().codec_delay(), 0);
45 // Test parsing with a larger piece size to verify that multiple buffers
46 // are passed to |new_buffer_cb_|.
47 TEST_F(MPEG1AudioStreamParserTest
, UnalignedAppend512
) {
48 const std::string expected
=
57 EXPECT_EQ(expected
, ParseFile("sfx.mp3", 512));
58 EXPECT_GT(last_audio_config().codec_delay(), 0);
61 TEST_F(MPEG1AudioStreamParserTest
, MetadataParsing
) {
62 scoped_refptr
<DecoderBuffer
> buffer
= ReadTestDataFile("sfx.mp3");
63 const uint8_t* buffer_ptr
= buffer
->data();
65 // The first 32 bytes of sfx.mp3 are an ID3 tag, so no segments should be
66 // extracted after appending those bytes.
67 const int kId3TagSize
= 32;
68 EXPECT_EQ("", ParseData(buffer_ptr
, kId3TagSize
));
69 EXPECT_FALSE(last_audio_config().IsValidConfig());
70 buffer_ptr
+= kId3TagSize
;
72 // The next 417 bytes are a Xing frame; with the identifier 21 bytes into
73 // the frame. Appending less than 21 bytes, should result in no segments
74 // nor an AudioDecoderConfig being created.
75 const int kXingTagPosition
= 21;
76 EXPECT_EQ("", ParseData(buffer_ptr
, kXingTagPosition
));
77 EXPECT_FALSE(last_audio_config().IsValidConfig());
78 buffer_ptr
+= kXingTagPosition
;
80 // Appending the rests of the Xing frame should result in no segments, but
81 // should generate a valid AudioDecoderConfig.
82 const int kXingRemainingSize
= 417 - kXingTagPosition
;
83 EXPECT_EQ("", ParseData(buffer_ptr
, kXingRemainingSize
));
84 EXPECT_TRUE(last_audio_config().IsValidConfig());
85 buffer_ptr
+= kXingRemainingSize
;
87 // Append the first real frame and ensure we get a segment.
88 const int kFirstRealFrameSize
= 182;
89 EXPECT_EQ("NewSegment{ 0K }EndOfSegment",
90 ParseData(buffer_ptr
, kFirstRealFrameSize
));
91 EXPECT_TRUE(last_audio_config().IsValidConfig());