aac_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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.
4
5#include "media/formats/mp4/aac.h"
6
7#include "testing/gtest/include/gtest/gtest.h"
8
9namespace media {
10
11namespace mp4 {
12
13TEST(AACTest, BasicProfileTest) {
14  AAC aac;
15  uint8 buffer[] = {0x12, 0x10};
16  std::vector<uint8> data;
17
18  data.assign(buffer, buffer + sizeof(buffer));
19
20  EXPECT_TRUE(aac.Parse(data));
21  EXPECT_EQ(aac.GetOutputSamplesPerSecond(false), 44100);
22  EXPECT_EQ(aac.GetChannelLayout(false), CHANNEL_LAYOUT_STEREO);
23}
24
25TEST(AACTest, ExtensionTest) {
26  AAC aac;
27  uint8 buffer[] = {0x13, 0x08, 0x56, 0xe5, 0x9d, 0x48, 0x80};
28  std::vector<uint8> data;
29
30  data.assign(buffer, buffer + sizeof(buffer));
31
32  EXPECT_TRUE(aac.Parse(data));
33  EXPECT_EQ(aac.GetOutputSamplesPerSecond(false), 48000);
34  EXPECT_EQ(aac.GetOutputSamplesPerSecond(true), 48000);
35  EXPECT_EQ(aac.GetChannelLayout(false), CHANNEL_LAYOUT_STEREO);
36}
37
38// Test implicit SBR with mono channel config.
39// Mono channel layout should only be reported if SBR is not
40// specified. Otherwise stereo should be reported.
41// See ISO-14496-3 Section 1.6.6.1.2 for details about this special casing.
42TEST(AACTest, ImplicitSBR_ChannelConfig0) {
43  AAC aac;
44  uint8 buffer[] = {0x13, 0x08};
45  std::vector<uint8> data;
46
47  data.assign(buffer, buffer + sizeof(buffer));
48
49  EXPECT_TRUE(aac.Parse(data));
50
51  // Test w/o implict SBR.
52  EXPECT_EQ(aac.GetOutputSamplesPerSecond(false), 24000);
53  EXPECT_EQ(aac.GetChannelLayout(false), CHANNEL_LAYOUT_MONO);
54
55  // Test implicit SBR.
56  EXPECT_EQ(aac.GetOutputSamplesPerSecond(true), 48000);
57  EXPECT_EQ(aac.GetChannelLayout(true), CHANNEL_LAYOUT_STEREO);
58}
59
60// Tests implicit SBR with a stereo channel config.
61TEST(AACTest, ImplicitSBR_ChannelConfig1) {
62  AAC aac;
63  uint8 buffer[] = {0x13, 0x10};
64  std::vector<uint8> data;
65
66  data.assign(buffer, buffer + sizeof(buffer));
67
68  EXPECT_TRUE(aac.Parse(data));
69
70  // Test w/o implict SBR.
71  EXPECT_EQ(aac.GetOutputSamplesPerSecond(false), 24000);
72  EXPECT_EQ(aac.GetChannelLayout(false), CHANNEL_LAYOUT_STEREO);
73
74  // Test implicit SBR.
75  EXPECT_EQ(aac.GetOutputSamplesPerSecond(true), 48000);
76  EXPECT_EQ(aac.GetChannelLayout(true), CHANNEL_LAYOUT_STEREO);
77}
78
79TEST(AACTest, SixChannelTest) {
80  AAC aac;
81  uint8 buffer[] = {0x11, 0xb0};
82  std::vector<uint8> data;
83
84  data.assign(buffer, buffer + sizeof(buffer));
85
86  EXPECT_TRUE(aac.Parse(data));
87  EXPECT_EQ(aac.GetOutputSamplesPerSecond(false), 48000);
88  EXPECT_EQ(aac.GetChannelLayout(false), CHANNEL_LAYOUT_5_1_BACK);
89}
90
91TEST(AACTest, DataTooShortTest) {
92  AAC aac;
93  std::vector<uint8> data;
94
95  EXPECT_FALSE(aac.Parse(data));
96
97  data.push_back(0x12);
98  EXPECT_FALSE(aac.Parse(data));
99}
100
101TEST(AACTest, IncorrectProfileTest) {
102  AAC aac;
103  uint8 buffer[] = {0x0, 0x08};
104  std::vector<uint8> data;
105
106  data.assign(buffer, buffer + sizeof(buffer));
107
108  EXPECT_FALSE(aac.Parse(data));
109
110  data[0] = 0x08;
111  EXPECT_TRUE(aac.Parse(data));
112
113  data[0] = 0x28;
114  EXPECT_FALSE(aac.Parse(data));
115}
116
117TEST(AACTest, IncorrectFrequencyTest) {
118  AAC aac;
119  uint8 buffer[] = {0x0f, 0x88};
120  std::vector<uint8> data;
121
122  data.assign(buffer, buffer + sizeof(buffer));
123
124  EXPECT_FALSE(aac.Parse(data));
125
126  data[0] = 0x0e;
127  data[1] = 0x08;
128  EXPECT_TRUE(aac.Parse(data));
129}
130
131TEST(AACTest, IncorrectChannelTest) {
132  AAC aac;
133  uint8 buffer[] = {0x0e, 0x00};
134  std::vector<uint8> data;
135
136  data.assign(buffer, buffer + sizeof(buffer));
137
138  EXPECT_FALSE(aac.Parse(data));
139
140  data[1] = 0x08;
141  EXPECT_TRUE(aac.Parse(data));
142}
143
144}  // namespace mp4
145
146}  // namespace media
147