OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // TODO(henrika): add test which included |start_frame| in Consume() call. | 5 // TODO(henrika): add test which included |start_frame| in Consume() call. |
6 | 6 |
| 7 #include <memory> |
| 8 |
7 #include "base/macros.h" | 9 #include "base/macros.h" |
8 #include "media/base/audio_fifo.h" | 10 #include "media/base/audio_fifo.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
10 | 12 |
11 namespace media { | 13 namespace media { |
12 | 14 |
13 class AudioFifoTest : public testing::Test { | 15 class AudioFifoTest : public testing::Test { |
14 public: | 16 public: |
15 AudioFifoTest() {} | 17 AudioFifoTest() {} |
16 ~AudioFifoTest() override {} | 18 ~AudioFifoTest() override {} |
(...skipping 15 matching lines...) Expand all Loading... |
32 EXPECT_EQ(fifo.frames(), 0); | 34 EXPECT_EQ(fifo.frames(), 0); |
33 } | 35 } |
34 | 36 |
35 // Pushes audio bus objects to a FIFO and fill it up to different degrees. | 37 // Pushes audio bus objects to a FIFO and fill it up to different degrees. |
36 TEST_F(AudioFifoTest, Push) { | 38 TEST_F(AudioFifoTest, Push) { |
37 static const int kChannels = 2; | 39 static const int kChannels = 2; |
38 static const int kMaxFrameCount = 128; | 40 static const int kMaxFrameCount = 128; |
39 AudioFifo fifo(kChannels, kMaxFrameCount); | 41 AudioFifo fifo(kChannels, kMaxFrameCount); |
40 { | 42 { |
41 SCOPED_TRACE("Push 50%"); | 43 SCOPED_TRACE("Push 50%"); |
42 scoped_ptr<AudioBus> bus = AudioBus::Create(kChannels, kMaxFrameCount / 2); | 44 std::unique_ptr<AudioBus> bus = |
| 45 AudioBus::Create(kChannels, kMaxFrameCount / 2); |
43 EXPECT_EQ(fifo.frames(), 0); | 46 EXPECT_EQ(fifo.frames(), 0); |
44 fifo.Push(bus.get()); | 47 fifo.Push(bus.get()); |
45 EXPECT_EQ(fifo.frames(), bus->frames()); | 48 EXPECT_EQ(fifo.frames(), bus->frames()); |
46 fifo.Clear(); | 49 fifo.Clear(); |
47 } | 50 } |
48 { | 51 { |
49 SCOPED_TRACE("Push 100%"); | 52 SCOPED_TRACE("Push 100%"); |
50 scoped_ptr<AudioBus> bus = AudioBus::Create(kChannels, kMaxFrameCount); | 53 std::unique_ptr<AudioBus> bus = AudioBus::Create(kChannels, kMaxFrameCount); |
51 EXPECT_EQ(fifo.frames(), 0); | 54 EXPECT_EQ(fifo.frames(), 0); |
52 fifo.Push(bus.get()); | 55 fifo.Push(bus.get()); |
53 EXPECT_EQ(fifo.frames(), bus->frames()); | 56 EXPECT_EQ(fifo.frames(), bus->frames()); |
54 fifo.Clear(); | 57 fifo.Clear(); |
55 } | 58 } |
56 } | 59 } |
57 | 60 |
58 // Consumes audio bus objects from a FIFO and empty it to different degrees. | 61 // Consumes audio bus objects from a FIFO and empty it to different degrees. |
59 TEST_F(AudioFifoTest, Consume) { | 62 TEST_F(AudioFifoTest, Consume) { |
60 static const int kChannels = 2; | 63 static const int kChannels = 2; |
61 static const int kMaxFrameCount = 128; | 64 static const int kMaxFrameCount = 128; |
62 AudioFifo fifo(kChannels, kMaxFrameCount); | 65 AudioFifo fifo(kChannels, kMaxFrameCount); |
63 { | 66 { |
64 scoped_ptr<AudioBus> bus = AudioBus::Create(kChannels, kMaxFrameCount); | 67 std::unique_ptr<AudioBus> bus = AudioBus::Create(kChannels, kMaxFrameCount); |
65 fifo.Push(bus.get()); | 68 fifo.Push(bus.get()); |
66 EXPECT_EQ(fifo.frames(), kMaxFrameCount); | 69 EXPECT_EQ(fifo.frames(), kMaxFrameCount); |
67 } | 70 } |
68 { | 71 { |
69 SCOPED_TRACE("Consume 50%"); | 72 SCOPED_TRACE("Consume 50%"); |
70 scoped_ptr<AudioBus> bus = AudioBus::Create(kChannels, kMaxFrameCount / 2); | 73 std::unique_ptr<AudioBus> bus = |
| 74 AudioBus::Create(kChannels, kMaxFrameCount / 2); |
71 fifo.Consume(bus.get(), 0, bus->frames()); | 75 fifo.Consume(bus.get(), 0, bus->frames()); |
72 EXPECT_TRUE(fifo.frames() == bus->frames()); | 76 EXPECT_TRUE(fifo.frames() == bus->frames()); |
73 fifo.Push(bus.get()); | 77 fifo.Push(bus.get()); |
74 EXPECT_EQ(fifo.frames(), kMaxFrameCount); | 78 EXPECT_EQ(fifo.frames(), kMaxFrameCount); |
75 } | 79 } |
76 { | 80 { |
77 SCOPED_TRACE("Consume 100%"); | 81 SCOPED_TRACE("Consume 100%"); |
78 scoped_ptr<AudioBus> bus = AudioBus::Create(kChannels, kMaxFrameCount); | 82 std::unique_ptr<AudioBus> bus = AudioBus::Create(kChannels, kMaxFrameCount); |
79 fifo.Consume(bus.get(), 0, bus->frames()); | 83 fifo.Consume(bus.get(), 0, bus->frames()); |
80 EXPECT_EQ(fifo.frames(), 0); | 84 EXPECT_EQ(fifo.frames(), 0); |
81 fifo.Push(bus.get()); | 85 fifo.Push(bus.get()); |
82 EXPECT_EQ(fifo.frames(), kMaxFrameCount); | 86 EXPECT_EQ(fifo.frames(), kMaxFrameCount); |
83 } | 87 } |
84 } | 88 } |
85 | 89 |
86 // Verify that the frames() method of the FIFO works as intended while | 90 // Verify that the frames() method of the FIFO works as intended while |
87 // appending and removing audio bus elements to/from the FIFO. | 91 // appending and removing audio bus elements to/from the FIFO. |
88 TEST_F(AudioFifoTest, FramesInFifo) { | 92 TEST_F(AudioFifoTest, FramesInFifo) { |
89 static const int kChannels = 2; | 93 static const int kChannels = 2; |
90 static const int kMaxFrameCount = 64; | 94 static const int kMaxFrameCount = 64; |
91 AudioFifo fifo(kChannels, kMaxFrameCount); | 95 AudioFifo fifo(kChannels, kMaxFrameCount); |
92 | 96 |
93 // Fill up the FIFO and verify that the size grows as it should while adding | 97 // Fill up the FIFO and verify that the size grows as it should while adding |
94 // one audio frame each time. | 98 // one audio frame each time. |
95 scoped_ptr<AudioBus> bus = AudioBus::Create(kChannels, 1); | 99 std::unique_ptr<AudioBus> bus = AudioBus::Create(kChannels, 1); |
96 int n = 0; | 100 int n = 0; |
97 while (fifo.frames() < kMaxFrameCount) { | 101 while (fifo.frames() < kMaxFrameCount) { |
98 fifo.Push(bus.get()); | 102 fifo.Push(bus.get()); |
99 EXPECT_EQ(fifo.frames(), ++n); | 103 EXPECT_EQ(fifo.frames(), ++n); |
100 } | 104 } |
101 EXPECT_EQ(fifo.frames(), kMaxFrameCount); | 105 EXPECT_EQ(fifo.frames(), kMaxFrameCount); |
102 | 106 |
103 // Empty the FIFO and verify that the size decreases as it should. | 107 // Empty the FIFO and verify that the size decreases as it should. |
104 // Reduce the size of the FIFO by one frame each time. | 108 // Reduce the size of the FIFO by one frame each time. |
105 while (fifo.frames() > 0) { | 109 while (fifo.frames() > 0) { |
106 fifo.Consume(bus.get(), 0, bus->frames()); | 110 fifo.Consume(bus.get(), 0, bus->frames()); |
107 EXPECT_EQ(fifo.frames(), --n); | 111 EXPECT_EQ(fifo.frames(), --n); |
108 } | 112 } |
109 EXPECT_EQ(fifo.frames(), 0); | 113 EXPECT_EQ(fifo.frames(), 0); |
110 | 114 |
111 // Verify that a steady-state size of #frames in the FIFO is maintained | 115 // Verify that a steady-state size of #frames in the FIFO is maintained |
112 // during a sequence of Push/Consume calls which involves wrapping. We ensure | 116 // during a sequence of Push/Consume calls which involves wrapping. We ensure |
113 // wrapping by selecting a buffer size which does divides the FIFO size | 117 // wrapping by selecting a buffer size which does divides the FIFO size |
114 // with a remainder of one. | 118 // with a remainder of one. |
115 scoped_ptr<AudioBus> bus2 = | 119 std::unique_ptr<AudioBus> bus2 = |
116 AudioBus::Create(kChannels, (kMaxFrameCount / 4) - 1); | 120 AudioBus::Create(kChannels, (kMaxFrameCount / 4) - 1); |
117 const int frames_in_fifo = bus2->frames(); | 121 const int frames_in_fifo = bus2->frames(); |
118 fifo.Push(bus2.get()); | 122 fifo.Push(bus2.get()); |
119 EXPECT_EQ(fifo.frames(), frames_in_fifo); | 123 EXPECT_EQ(fifo.frames(), frames_in_fifo); |
120 for (int n = 0; n < kMaxFrameCount; ++n) { | 124 for (int n = 0; n < kMaxFrameCount; ++n) { |
121 fifo.Push(bus2.get()); | 125 fifo.Push(bus2.get()); |
122 fifo.Consume(bus2.get(), 0, frames_in_fifo); | 126 fifo.Consume(bus2.get(), 0, frames_in_fifo); |
123 EXPECT_EQ(fifo.frames(), frames_in_fifo); | 127 EXPECT_EQ(fifo.frames(), frames_in_fifo); |
124 } | 128 } |
125 } | 129 } |
126 | 130 |
127 // Perform a sequence of Push/Consume calls and verify that the data written | 131 // Perform a sequence of Push/Consume calls and verify that the data written |
128 // to the FIFO is correctly retrieved, i.e., that the order is correct and the | 132 // to the FIFO is correctly retrieved, i.e., that the order is correct and the |
129 // values are correct. | 133 // values are correct. |
130 TEST_F(AudioFifoTest, VerifyDataValues) { | 134 TEST_F(AudioFifoTest, VerifyDataValues) { |
131 static const int kChannels = 2; | 135 static const int kChannels = 2; |
132 static const int kFrameCount = 2; | 136 static const int kFrameCount = 2; |
133 static const int kFifoFrameCount = 5 * kFrameCount; | 137 static const int kFifoFrameCount = 5 * kFrameCount; |
134 | 138 |
135 AudioFifo fifo(kChannels, kFifoFrameCount); | 139 AudioFifo fifo(kChannels, kFifoFrameCount); |
136 scoped_ptr<AudioBus> bus = AudioBus::Create(kChannels, kFrameCount); | 140 std::unique_ptr<AudioBus> bus = AudioBus::Create(kChannels, kFrameCount); |
137 EXPECT_EQ(fifo.frames(), 0); | 141 EXPECT_EQ(fifo.frames(), 0); |
138 EXPECT_EQ(bus->frames(), kFrameCount); | 142 EXPECT_EQ(bus->frames(), kFrameCount); |
139 | 143 |
140 // Start by filling up the FIFO with audio frames. The first audio frame | 144 // Start by filling up the FIFO with audio frames. The first audio frame |
141 // will contain all 1's, the second all 2's etc. All channels contain the | 145 // will contain all 1's, the second all 2's etc. All channels contain the |
142 // same value. | 146 // same value. |
143 int value = 1; | 147 int value = 1; |
144 while (fifo.frames() < kFifoFrameCount) { | 148 while (fifo.frames() < kFifoFrameCount) { |
145 for (int j = 0; j < bus->channels(); ++j) | 149 for (int j = 0; j < bus->channels(); ++j) |
146 std::fill(bus->channel(j), bus->channel(j) + bus->frames(), value); | 150 std::fill(bus->channel(j), bus->channel(j) + bus->frames(), value); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 VerifyValue(bus->channel(j), bus->channels(), value); | 190 VerifyValue(bus->channel(j), bus->channels(), value); |
187 std::fill(bus->channel(j), bus->channel(j) + bus->frames(), value + 1); | 191 std::fill(bus->channel(j), bus->channel(j) + bus->frames(), value + 1); |
188 } | 192 } |
189 fifo.Push(bus.get()); | 193 fifo.Push(bus.get()); |
190 EXPECT_EQ(fifo.frames(), bus->frames()); | 194 EXPECT_EQ(fifo.frames(), bus->frames()); |
191 ++value; | 195 ++value; |
192 } | 196 } |
193 } | 197 } |
194 | 198 |
195 } // namespace media | 199 } // namespace media |
OLD | NEW |