| 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 #include "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
| 6 #include "media/base/audio_splicer.h" | 6 #include "media/base/audio_splicer.h" |
| 7 #include "media/base/audio_timestamp_helper.h" | 7 #include "media/base/audio_timestamp_helper.h" |
| 8 #include "media/base/buffers.h" | 8 #include "media/base/buffers.h" |
| 9 #include "media/base/data_buffer.h" | 9 #include "media/base/data_buffer.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 input_timestamp_helper_(kBytesPerFrame, kDefaultSampleRate) { | 22 input_timestamp_helper_(kBytesPerFrame, kDefaultSampleRate) { |
| 23 input_timestamp_helper_.SetBaseTimestamp(base::TimeDelta()); | 23 input_timestamp_helper_.SetBaseTimestamp(base::TimeDelta()); |
| 24 } | 24 } |
| 25 | 25 |
| 26 scoped_refptr<DataBuffer> GetNextInputBuffer(uint8 value) { | 26 scoped_refptr<DataBuffer> GetNextInputBuffer(uint8 value) { |
| 27 return GetNextInputBuffer(value, kDefaultBufferSize); | 27 return GetNextInputBuffer(value, kDefaultBufferSize); |
| 28 } | 28 } |
| 29 | 29 |
| 30 scoped_refptr<DataBuffer> GetNextInputBuffer(uint8 value, int size) { | 30 scoped_refptr<DataBuffer> GetNextInputBuffer(uint8 value, int size) { |
| 31 scoped_refptr<DataBuffer> buffer = new DataBuffer(size); | 31 scoped_refptr<DataBuffer> buffer = new DataBuffer(size); |
| 32 buffer->SetDataSize(size); | 32 buffer->set_data_size(size); |
| 33 memset(buffer->GetWritableData(), value, buffer->GetDataSize()); | 33 memset(buffer->get_writable_data(), value, buffer->get_data_size()); |
| 34 buffer->SetTimestamp(input_timestamp_helper_.GetTimestamp()); | 34 buffer->set_timestamp(input_timestamp_helper_.GetTimestamp()); |
| 35 buffer->SetDuration( | 35 buffer->set_duration( |
| 36 input_timestamp_helper_.GetDuration(buffer->GetDataSize())); | 36 input_timestamp_helper_.GetDuration(buffer->get_data_size())); |
| 37 input_timestamp_helper_.AddBytes(buffer->GetDataSize()); | 37 input_timestamp_helper_.AddBytes(buffer->get_data_size()); |
| 38 return buffer; | 38 return buffer; |
| 39 } | 39 } |
| 40 | 40 |
| 41 bool VerifyData(const uint8* data, int size, int value) { | 41 bool VerifyData(const uint8* data, int size, int value) { |
| 42 for (int i = 0; i < size; ++i) { | 42 for (int i = 0; i < size; ++i) { |
| 43 if (data[i] != value) | 43 if (data[i] != value) |
| 44 return false; | 44 return false; |
| 45 } | 45 } |
| 46 return true; | 46 return true; |
| 47 } | 47 } |
| 48 | 48 |
| 49 protected: | 49 protected: |
| 50 AudioSplicer splicer_; | 50 AudioSplicer splicer_; |
| 51 AudioTimestampHelper input_timestamp_helper_; | 51 AudioTimestampHelper input_timestamp_helper_; |
| 52 | 52 |
| 53 DISALLOW_COPY_AND_ASSIGN(AudioSplicerTest); | 53 DISALLOW_COPY_AND_ASSIGN(AudioSplicerTest); |
| 54 }; | 54 }; |
| 55 | 55 |
| 56 TEST_F(AudioSplicerTest, PassThru) { | 56 TEST_F(AudioSplicerTest, PassThru) { |
| 57 EXPECT_FALSE(splicer_.HasNextBuffer()); | 57 EXPECT_FALSE(splicer_.HasNextBuffer()); |
| 58 | 58 |
| 59 // Test single buffer pass-thru behavior. | 59 // Test single buffer pass-thru behavior. |
| 60 scoped_refptr<DataBuffer> input_1 = GetNextInputBuffer(1); | 60 scoped_refptr<DataBuffer> input_1 = GetNextInputBuffer(1); |
| 61 EXPECT_TRUE(splicer_.AddInput(input_1)); | 61 EXPECT_TRUE(splicer_.AddInput(input_1)); |
| 62 EXPECT_TRUE(splicer_.HasNextBuffer()); | 62 EXPECT_TRUE(splicer_.HasNextBuffer()); |
| 63 | 63 |
| 64 scoped_refptr<DataBuffer> output_1 = splicer_.GetNextBuffer(); | 64 scoped_refptr<DataBuffer> output_1 = splicer_.GetNextBuffer(); |
| 65 EXPECT_FALSE(splicer_.HasNextBuffer()); | 65 EXPECT_FALSE(splicer_.HasNextBuffer()); |
| 66 EXPECT_EQ(input_1->GetTimestamp(), output_1->GetTimestamp()); | 66 EXPECT_EQ(input_1->get_timestamp(), output_1->get_timestamp()); |
| 67 EXPECT_EQ(input_1->GetDuration(), output_1->GetDuration()); | 67 EXPECT_EQ(input_1->get_duration(), output_1->get_duration()); |
| 68 EXPECT_EQ(input_1->GetDataSize(), output_1->GetDataSize()); | 68 EXPECT_EQ(input_1->get_data_size(), output_1->get_data_size()); |
| 69 | 69 |
| 70 // Test that multiple buffers can be queued in the splicer. | 70 // Test that multiple buffers can be queued in the splicer. |
| 71 scoped_refptr<DataBuffer> input_2 = GetNextInputBuffer(2); | 71 scoped_refptr<DataBuffer> input_2 = GetNextInputBuffer(2); |
| 72 scoped_refptr<DataBuffer> input_3 = GetNextInputBuffer(3); | 72 scoped_refptr<DataBuffer> input_3 = GetNextInputBuffer(3); |
| 73 EXPECT_TRUE(splicer_.AddInput(input_2)); | 73 EXPECT_TRUE(splicer_.AddInput(input_2)); |
| 74 EXPECT_TRUE(splicer_.AddInput(input_3)); | 74 EXPECT_TRUE(splicer_.AddInput(input_3)); |
| 75 EXPECT_TRUE(splicer_.HasNextBuffer()); | 75 EXPECT_TRUE(splicer_.HasNextBuffer()); |
| 76 | 76 |
| 77 scoped_refptr<DataBuffer> output_2 = splicer_.GetNextBuffer(); | 77 scoped_refptr<DataBuffer> output_2 = splicer_.GetNextBuffer(); |
| 78 EXPECT_TRUE(splicer_.HasNextBuffer()); | 78 EXPECT_TRUE(splicer_.HasNextBuffer()); |
| 79 EXPECT_EQ(input_2->GetTimestamp(), output_2->GetTimestamp()); | 79 EXPECT_EQ(input_2->get_timestamp(), output_2->get_timestamp()); |
| 80 EXPECT_EQ(input_2->GetDuration(), output_2->GetDuration()); | 80 EXPECT_EQ(input_2->get_duration(), output_2->get_duration()); |
| 81 EXPECT_EQ(input_2->GetDataSize(), output_2->GetDataSize()); | 81 EXPECT_EQ(input_2->get_data_size(), output_2->get_data_size()); |
| 82 | 82 |
| 83 scoped_refptr<DataBuffer> output_3 = splicer_.GetNextBuffer(); | 83 scoped_refptr<DataBuffer> output_3 = splicer_.GetNextBuffer(); |
| 84 EXPECT_FALSE(splicer_.HasNextBuffer()); | 84 EXPECT_FALSE(splicer_.HasNextBuffer()); |
| 85 EXPECT_EQ(input_3->GetTimestamp(), output_3->GetTimestamp()); | 85 EXPECT_EQ(input_3->get_timestamp(), output_3->get_timestamp()); |
| 86 EXPECT_EQ(input_3->GetDuration(), output_3->GetDuration()); | 86 EXPECT_EQ(input_3->get_duration(), output_3->get_duration()); |
| 87 EXPECT_EQ(input_3->GetDataSize(), output_3->GetDataSize()); | 87 EXPECT_EQ(input_3->get_data_size(), output_3->get_data_size()); |
| 88 } | 88 } |
| 89 | 89 |
| 90 TEST_F(AudioSplicerTest, Reset) { | 90 TEST_F(AudioSplicerTest, Reset) { |
| 91 scoped_refptr<DataBuffer> input_1 = GetNextInputBuffer(1); | 91 scoped_refptr<DataBuffer> input_1 = GetNextInputBuffer(1); |
| 92 EXPECT_TRUE(splicer_.AddInput(input_1)); | 92 EXPECT_TRUE(splicer_.AddInput(input_1)); |
| 93 EXPECT_TRUE(splicer_.HasNextBuffer()); | 93 EXPECT_TRUE(splicer_.HasNextBuffer()); |
| 94 | 94 |
| 95 splicer_.Reset(); | 95 splicer_.Reset(); |
| 96 EXPECT_FALSE(splicer_.HasNextBuffer()); | 96 EXPECT_FALSE(splicer_.HasNextBuffer()); |
| 97 | 97 |
| 98 // Add some bytes to the timestamp helper so that the | 98 // Add some bytes to the timestamp helper so that the |
| 99 // next buffer starts many frames beyond the end of | 99 // next buffer starts many frames beyond the end of |
| 100 // |input_1|. This is to make sure that Reset() actually | 100 // |input_1|. This is to make sure that Reset() actually |
| 101 // clears its state and doesn't try to insert a gap. | 101 // clears its state and doesn't try to insert a gap. |
| 102 input_timestamp_helper_.AddBytes(100 * kBytesPerFrame); | 102 input_timestamp_helper_.AddBytes(100 * kBytesPerFrame); |
| 103 | 103 |
| 104 // Verify that a new input buffer passes through as expected. | 104 // Verify that a new input buffer passes through as expected. |
| 105 scoped_refptr<DataBuffer> input_2 = GetNextInputBuffer(2); | 105 scoped_refptr<DataBuffer> input_2 = GetNextInputBuffer(2); |
| 106 EXPECT_TRUE(splicer_.AddInput(input_2)); | 106 EXPECT_TRUE(splicer_.AddInput(input_2)); |
| 107 EXPECT_TRUE(splicer_.HasNextBuffer()); | 107 EXPECT_TRUE(splicer_.HasNextBuffer()); |
| 108 | 108 |
| 109 scoped_refptr<DataBuffer> output_2 = splicer_.GetNextBuffer(); | 109 scoped_refptr<DataBuffer> output_2 = splicer_.GetNextBuffer(); |
| 110 EXPECT_FALSE(splicer_.HasNextBuffer()); | 110 EXPECT_FALSE(splicer_.HasNextBuffer()); |
| 111 EXPECT_EQ(input_2->GetTimestamp(), output_2->GetTimestamp()); | 111 EXPECT_EQ(input_2->get_timestamp(), output_2->get_timestamp()); |
| 112 EXPECT_EQ(input_2->GetDuration(), output_2->GetDuration()); | 112 EXPECT_EQ(input_2->get_duration(), output_2->get_duration()); |
| 113 EXPECT_EQ(input_2->GetDataSize(), output_2->GetDataSize()); | 113 EXPECT_EQ(input_2->get_data_size(), output_2->get_data_size()); |
| 114 } | 114 } |
| 115 | 115 |
| 116 TEST_F(AudioSplicerTest, EndOfStream) { | 116 TEST_F(AudioSplicerTest, EndOfStream) { |
| 117 scoped_refptr<DataBuffer> input_1 = GetNextInputBuffer(1); | 117 scoped_refptr<DataBuffer> input_1 = GetNextInputBuffer(1); |
| 118 scoped_refptr<DataBuffer> input_2 = DataBuffer::CreateEOSBuffer(); | 118 scoped_refptr<DataBuffer> input_2 = DataBuffer::create_eos_buffer(); |
| 119 scoped_refptr<DataBuffer> input_3 = GetNextInputBuffer(2); | 119 scoped_refptr<DataBuffer> input_3 = GetNextInputBuffer(2); |
| 120 EXPECT_TRUE(input_2->IsEndOfStream()); | 120 EXPECT_TRUE(input_2->is_end_of_stream()); |
| 121 | 121 |
| 122 EXPECT_TRUE(splicer_.AddInput(input_1)); | 122 EXPECT_TRUE(splicer_.AddInput(input_1)); |
| 123 EXPECT_TRUE(splicer_.AddInput(input_2)); | 123 EXPECT_TRUE(splicer_.AddInput(input_2)); |
| 124 EXPECT_TRUE(splicer_.HasNextBuffer()); | 124 EXPECT_TRUE(splicer_.HasNextBuffer()); |
| 125 | 125 |
| 126 scoped_refptr<DataBuffer> output_1 = splicer_.GetNextBuffer(); | 126 scoped_refptr<DataBuffer> output_1 = splicer_.GetNextBuffer(); |
| 127 scoped_refptr<DataBuffer> output_2 = splicer_.GetNextBuffer(); | 127 scoped_refptr<DataBuffer> output_2 = splicer_.GetNextBuffer(); |
| 128 EXPECT_FALSE(splicer_.HasNextBuffer()); | 128 EXPECT_FALSE(splicer_.HasNextBuffer()); |
| 129 EXPECT_EQ(input_1->GetTimestamp(), output_1->GetTimestamp()); | 129 EXPECT_EQ(input_1->get_timestamp(), output_1->get_timestamp()); |
| 130 EXPECT_EQ(input_1->GetDuration(), output_1->GetDuration()); | 130 EXPECT_EQ(input_1->get_duration(), output_1->get_duration()); |
| 131 EXPECT_EQ(input_1->GetDataSize(), output_1->GetDataSize()); | 131 EXPECT_EQ(input_1->get_data_size(), output_1->get_data_size()); |
| 132 | 132 |
| 133 EXPECT_TRUE(output_2->IsEndOfStream()); | 133 EXPECT_TRUE(output_2->is_end_of_stream()); |
| 134 | 134 |
| 135 // Verify that buffers can be added again after Reset(). | 135 // Verify that buffers can be added again after Reset(). |
| 136 splicer_.Reset(); | 136 splicer_.Reset(); |
| 137 EXPECT_TRUE(splicer_.AddInput(input_3)); | 137 EXPECT_TRUE(splicer_.AddInput(input_3)); |
| 138 scoped_refptr<DataBuffer> output_3 = splicer_.GetNextBuffer(); | 138 scoped_refptr<DataBuffer> output_3 = splicer_.GetNextBuffer(); |
| 139 EXPECT_FALSE(splicer_.HasNextBuffer()); | 139 EXPECT_FALSE(splicer_.HasNextBuffer()); |
| 140 EXPECT_EQ(input_3->GetTimestamp(), output_3->GetTimestamp()); | 140 EXPECT_EQ(input_3->get_timestamp(), output_3->get_timestamp()); |
| 141 EXPECT_EQ(input_3->GetDuration(), output_3->GetDuration()); | 141 EXPECT_EQ(input_3->get_duration(), output_3->get_duration()); |
| 142 EXPECT_EQ(input_3->GetDataSize(), output_3->GetDataSize()); | 142 EXPECT_EQ(input_3->get_data_size(), output_3->get_data_size()); |
| 143 } | 143 } |
| 144 | 144 |
| 145 | 145 |
| 146 // Test the gap insertion code. | 146 // Test the gap insertion code. |
| 147 // +--------------+ +--------------+ | 147 // +--------------+ +--------------+ |
| 148 // |11111111111111| |22222222222222| | 148 // |11111111111111| |22222222222222| |
| 149 // +--------------+ +--------------+ | 149 // +--------------+ +--------------+ |
| 150 // Results in: | 150 // Results in: |
| 151 // +--------------+----+--------------+ | 151 // +--------------+----+--------------+ |
| 152 // |11111111111111|0000|22222222222222| | 152 // |11111111111111|0000|22222222222222| |
| (...skipping 12 matching lines...) Expand all Loading... |
| 165 EXPECT_TRUE(splicer_.AddInput(input_2)); | 165 EXPECT_TRUE(splicer_.AddInput(input_2)); |
| 166 | 166 |
| 167 // Verify that a gap buffer is generated. | 167 // Verify that a gap buffer is generated. |
| 168 EXPECT_TRUE(splicer_.HasNextBuffer()); | 168 EXPECT_TRUE(splicer_.HasNextBuffer()); |
| 169 scoped_refptr<DataBuffer> output_1 = splicer_.GetNextBuffer(); | 169 scoped_refptr<DataBuffer> output_1 = splicer_.GetNextBuffer(); |
| 170 scoped_refptr<DataBuffer> output_2 = splicer_.GetNextBuffer(); | 170 scoped_refptr<DataBuffer> output_2 = splicer_.GetNextBuffer(); |
| 171 scoped_refptr<DataBuffer> output_3 = splicer_.GetNextBuffer(); | 171 scoped_refptr<DataBuffer> output_3 = splicer_.GetNextBuffer(); |
| 172 EXPECT_FALSE(splicer_.HasNextBuffer()); | 172 EXPECT_FALSE(splicer_.HasNextBuffer()); |
| 173 | 173 |
| 174 // Verify that the first input buffer passed through unmodified. | 174 // Verify that the first input buffer passed through unmodified. |
| 175 EXPECT_EQ(input_1->GetTimestamp(), output_1->GetTimestamp()); | 175 EXPECT_EQ(input_1->get_timestamp(), output_1->get_timestamp()); |
| 176 EXPECT_EQ(input_1->GetDuration(), output_1->GetDuration()); | 176 EXPECT_EQ(input_1->get_duration(), output_1->get_duration()); |
| 177 EXPECT_EQ(input_1->GetDataSize(), output_1->GetDataSize()); | 177 EXPECT_EQ(input_1->get_data_size(), output_1->get_data_size()); |
| 178 EXPECT_TRUE(VerifyData(output_1->GetData(), output_1->GetDataSize(), 1)); | 178 EXPECT_TRUE(VerifyData(output_1->get_data(), output_1->get_data_size(), 1)); |
| 179 | 179 |
| 180 // Verify the contents of the gap buffer. | 180 // Verify the contents of the gap buffer. |
| 181 base::TimeDelta gap_timestamp = | 181 base::TimeDelta gap_timestamp = |
| 182 input_1->GetTimestamp() + input_1->GetDuration(); | 182 input_1->get_timestamp() + input_1->get_duration(); |
| 183 base::TimeDelta gap_duration = input_2->GetTimestamp() - gap_timestamp; | 183 base::TimeDelta gap_duration = input_2->get_timestamp() - gap_timestamp; |
| 184 EXPECT_GT(gap_duration, base::TimeDelta()); | 184 EXPECT_GT(gap_duration, base::TimeDelta()); |
| 185 EXPECT_EQ(gap_timestamp, output_2->GetTimestamp()); | 185 EXPECT_EQ(gap_timestamp, output_2->get_timestamp()); |
| 186 EXPECT_EQ(gap_duration, output_2->GetDuration()); | 186 EXPECT_EQ(gap_duration, output_2->get_duration()); |
| 187 EXPECT_EQ(kGapSize, output_2->GetDataSize()); | 187 EXPECT_EQ(kGapSize, output_2->get_data_size()); |
| 188 EXPECT_TRUE(VerifyData(output_2->GetData(), output_2->GetDataSize(), 0)); | 188 EXPECT_TRUE(VerifyData(output_2->get_data(), output_2->get_data_size(), 0)); |
| 189 | 189 |
| 190 // Verify that the second input buffer passed through unmodified. | 190 // Verify that the second input buffer passed through unmodified. |
| 191 EXPECT_EQ(input_2->GetTimestamp(), output_3->GetTimestamp()); | 191 EXPECT_EQ(input_2->get_timestamp(), output_3->get_timestamp()); |
| 192 EXPECT_EQ(input_2->GetDuration(), output_3->GetDuration()); | 192 EXPECT_EQ(input_2->get_duration(), output_3->get_duration()); |
| 193 EXPECT_EQ(input_2->GetDataSize(), output_3->GetDataSize()); | 193 EXPECT_EQ(input_2->get_data_size(), output_3->get_data_size()); |
| 194 EXPECT_TRUE(VerifyData(output_3->GetData(), output_3->GetDataSize(), 2)); | 194 EXPECT_TRUE(VerifyData(output_3->get_data(), output_3->get_data_size(), 2)); |
| 195 } | 195 } |
| 196 | 196 |
| 197 | 197 |
| 198 // Test that an error is signalled when the gap between input buffers is | 198 // Test that an error is signalled when the gap between input buffers is |
| 199 // too large. | 199 // too large. |
| 200 TEST_F(AudioSplicerTest, GapTooLarge) { | 200 TEST_F(AudioSplicerTest, GapTooLarge) { |
| 201 scoped_refptr<DataBuffer> input_1 = GetNextInputBuffer(1); | 201 scoped_refptr<DataBuffer> input_1 = GetNextInputBuffer(1); |
| 202 | 202 |
| 203 // Add a seconds worth of bytes so that an unacceptably large | 203 // Add a seconds worth of bytes so that an unacceptably large |
| 204 // gap exists between |input_1| and |input_2|. | 204 // gap exists between |input_1| and |input_2|. |
| 205 const int kGapSize = kDefaultSampleRate * kBytesPerFrame; | 205 const int kGapSize = kDefaultSampleRate * kBytesPerFrame; |
| 206 input_timestamp_helper_.AddBytes(kGapSize); | 206 input_timestamp_helper_.AddBytes(kGapSize); |
| 207 scoped_refptr<DataBuffer> input_2 = GetNextInputBuffer(2); | 207 scoped_refptr<DataBuffer> input_2 = GetNextInputBuffer(2); |
| 208 | 208 |
| 209 EXPECT_TRUE(splicer_.AddInput(input_1)); | 209 EXPECT_TRUE(splicer_.AddInput(input_1)); |
| 210 EXPECT_FALSE(splicer_.AddInput(input_2)); | 210 EXPECT_FALSE(splicer_.AddInput(input_2)); |
| 211 | 211 |
| 212 EXPECT_TRUE(splicer_.HasNextBuffer()); | 212 EXPECT_TRUE(splicer_.HasNextBuffer()); |
| 213 scoped_refptr<DataBuffer> output_1 = splicer_.GetNextBuffer(); | 213 scoped_refptr<DataBuffer> output_1 = splicer_.GetNextBuffer(); |
| 214 | 214 |
| 215 // Verify that the first input buffer passed through unmodified. | 215 // Verify that the first input buffer passed through unmodified. |
| 216 EXPECT_EQ(input_1->GetTimestamp(), output_1->GetTimestamp()); | 216 EXPECT_EQ(input_1->get_timestamp(), output_1->get_timestamp()); |
| 217 EXPECT_EQ(input_1->GetDuration(), output_1->GetDuration()); | 217 EXPECT_EQ(input_1->get_duration(), output_1->get_duration()); |
| 218 EXPECT_EQ(input_1->GetDataSize(), output_1->GetDataSize()); | 218 EXPECT_EQ(input_1->get_data_size(), output_1->get_data_size()); |
| 219 EXPECT_TRUE(VerifyData(output_1->GetData(), output_1->GetDataSize(), 1)); | 219 EXPECT_TRUE(VerifyData(output_1->get_data(), output_1->get_data_size(), 1)); |
| 220 | 220 |
| 221 // Verify that the second buffer is not available. | 221 // Verify that the second buffer is not available. |
| 222 EXPECT_FALSE(splicer_.HasNextBuffer()); | 222 EXPECT_FALSE(splicer_.HasNextBuffer()); |
| 223 | 223 |
| 224 // Reset the timestamp helper so it can generate a buffer that is | 224 // Reset the timestamp helper so it can generate a buffer that is |
| 225 // right after |input_1|. | 225 // right after |input_1|. |
| 226 input_timestamp_helper_.SetBaseTimestamp( | 226 input_timestamp_helper_.SetBaseTimestamp( |
| 227 input_1->GetTimestamp() + input_1->GetDuration()); | 227 input_1->get_timestamp() + input_1->get_duration()); |
| 228 | 228 |
| 229 // Verify that valid buffers are still accepted. | 229 // Verify that valid buffers are still accepted. |
| 230 scoped_refptr<DataBuffer> input_3 = GetNextInputBuffer(3); | 230 scoped_refptr<DataBuffer> input_3 = GetNextInputBuffer(3); |
| 231 EXPECT_TRUE(splicer_.AddInput(input_3)); | 231 EXPECT_TRUE(splicer_.AddInput(input_3)); |
| 232 EXPECT_TRUE(splicer_.HasNextBuffer()); | 232 EXPECT_TRUE(splicer_.HasNextBuffer()); |
| 233 scoped_refptr<DataBuffer> output_2 = splicer_.GetNextBuffer(); | 233 scoped_refptr<DataBuffer> output_2 = splicer_.GetNextBuffer(); |
| 234 EXPECT_FALSE(splicer_.HasNextBuffer()); | 234 EXPECT_FALSE(splicer_.HasNextBuffer()); |
| 235 EXPECT_EQ(input_3->GetTimestamp(), output_2->GetTimestamp()); | 235 EXPECT_EQ(input_3->get_timestamp(), output_2->get_timestamp()); |
| 236 EXPECT_EQ(input_3->GetDuration(), output_2->GetDuration()); | 236 EXPECT_EQ(input_3->get_duration(), output_2->get_duration()); |
| 237 EXPECT_EQ(input_3->GetDataSize(), output_2->GetDataSize()); | 237 EXPECT_EQ(input_3->get_data_size(), output_2->get_data_size()); |
| 238 EXPECT_TRUE(VerifyData(output_2->GetData(), output_2->GetDataSize(), 3)); | 238 EXPECT_TRUE(VerifyData(output_2->get_data(), output_2->get_data_size(), 3)); |
| 239 } | 239 } |
| 240 | 240 |
| 241 | 241 |
| 242 // Verifies that an error is signalled if AddInput() is called | 242 // Verifies that an error is signalled if AddInput() is called |
| 243 // with a timestamp that is earlier than the first buffer added. | 243 // with a timestamp that is earlier than the first buffer added. |
| 244 TEST_F(AudioSplicerTest, BufferAddedBeforeBase) { | 244 TEST_F(AudioSplicerTest, BufferAddedBeforeBase) { |
| 245 input_timestamp_helper_.SetBaseTimestamp( | 245 input_timestamp_helper_.SetBaseTimestamp( |
| 246 base::TimeDelta::FromMicroseconds(10)); | 246 base::TimeDelta::FromMicroseconds(10)); |
| 247 scoped_refptr<DataBuffer> input_1 = GetNextInputBuffer(1); | 247 scoped_refptr<DataBuffer> input_1 = GetNextInputBuffer(1); |
| 248 | 248 |
| 249 // Reset the timestamp helper so the next buffer will have a timestamp earlier | 249 // Reset the timestamp helper so the next buffer will have a timestamp earlier |
| 250 // than |input_1|. | 250 // than |input_1|. |
| 251 input_timestamp_helper_.SetBaseTimestamp(base::TimeDelta::FromSeconds(0)); | 251 input_timestamp_helper_.SetBaseTimestamp(base::TimeDelta::FromSeconds(0)); |
| 252 scoped_refptr<DataBuffer> input_2 = GetNextInputBuffer(1); | 252 scoped_refptr<DataBuffer> input_2 = GetNextInputBuffer(1); |
| 253 | 253 |
| 254 EXPECT_GT(input_1->GetTimestamp(), input_2->GetTimestamp()); | 254 EXPECT_GT(input_1->get_timestamp(), input_2->get_timestamp()); |
| 255 EXPECT_TRUE(splicer_.AddInput(input_1)); | 255 EXPECT_TRUE(splicer_.AddInput(input_1)); |
| 256 EXPECT_FALSE(splicer_.AddInput(input_2)); | 256 EXPECT_FALSE(splicer_.AddInput(input_2)); |
| 257 } | 257 } |
| 258 | 258 |
| 259 | 259 |
| 260 // Test when one buffer partially overlaps another. | 260 // Test when one buffer partially overlaps another. |
| 261 // +--------------+ | 261 // +--------------+ |
| 262 // |11111111111111| | 262 // |11111111111111| |
| 263 // +--------------+ | 263 // +--------------+ |
| 264 // +--------------+ | 264 // +--------------+ |
| 265 // |22222222222222| | 265 // |22222222222222| |
| 266 // +--------------+ | 266 // +--------------+ |
| 267 // Results in: | 267 // Results in: |
| 268 // +--------------+----------+ | 268 // +--------------+----------+ |
| 269 // |11111111111111|2222222222| | 269 // |11111111111111|2222222222| |
| 270 // +--------------+----------+ | 270 // +--------------+----------+ |
| 271 TEST_F(AudioSplicerTest, PartialOverlap) { | 271 TEST_F(AudioSplicerTest, PartialOverlap) { |
| 272 scoped_refptr<DataBuffer> input_1 = GetNextInputBuffer(1); | 272 scoped_refptr<DataBuffer> input_1 = GetNextInputBuffer(1); |
| 273 | 273 |
| 274 // Reset timestamp helper so that the next buffer will have a | 274 // Reset timestamp helper so that the next buffer will have a |
| 275 // timestamp that starts in the middle of |input_1|. | 275 // timestamp that starts in the middle of |input_1|. |
| 276 const int kOverlapSize = input_1->GetDataSize() / 4; | 276 const int kOverlapSize = input_1->get_data_size() / 4; |
| 277 input_timestamp_helper_.SetBaseTimestamp(input_1->GetTimestamp()); | 277 input_timestamp_helper_.SetBaseTimestamp(input_1->get_timestamp()); |
| 278 input_timestamp_helper_.AddBytes(input_1->GetDataSize() - kOverlapSize); | 278 input_timestamp_helper_.AddBytes(input_1->get_data_size() - kOverlapSize); |
| 279 | 279 |
| 280 scoped_refptr<DataBuffer> input_2 = GetNextInputBuffer(2); | 280 scoped_refptr<DataBuffer> input_2 = GetNextInputBuffer(2); |
| 281 | 281 |
| 282 EXPECT_TRUE(splicer_.AddInput(input_1)); | 282 EXPECT_TRUE(splicer_.AddInput(input_1)); |
| 283 EXPECT_TRUE(splicer_.AddInput(input_2)); | 283 EXPECT_TRUE(splicer_.AddInput(input_2)); |
| 284 | 284 |
| 285 EXPECT_TRUE(splicer_.HasNextBuffer()); | 285 EXPECT_TRUE(splicer_.HasNextBuffer()); |
| 286 scoped_refptr<DataBuffer> output_1 = splicer_.GetNextBuffer(); | 286 scoped_refptr<DataBuffer> output_1 = splicer_.GetNextBuffer(); |
| 287 scoped_refptr<DataBuffer> output_2 = splicer_.GetNextBuffer(); | 287 scoped_refptr<DataBuffer> output_2 = splicer_.GetNextBuffer(); |
| 288 EXPECT_FALSE(splicer_.HasNextBuffer()); | 288 EXPECT_FALSE(splicer_.HasNextBuffer()); |
| 289 | 289 |
| 290 // Verify that the first input buffer passed through unmodified. | 290 // Verify that the first input buffer passed through unmodified. |
| 291 EXPECT_EQ(input_1->GetTimestamp(), output_1->GetTimestamp()); | 291 EXPECT_EQ(input_1->get_timestamp(), output_1->get_timestamp()); |
| 292 EXPECT_EQ(input_1->GetDuration(), output_1->GetDuration()); | 292 EXPECT_EQ(input_1->get_duration(), output_1->get_duration()); |
| 293 EXPECT_EQ(input_1->GetDataSize(), output_1->GetDataSize()); | 293 EXPECT_EQ(input_1->get_data_size(), output_1->get_data_size()); |
| 294 EXPECT_TRUE(VerifyData(output_1->GetData(), output_1->GetDataSize(), 1)); | 294 EXPECT_TRUE(VerifyData(output_1->get_data(), output_1->get_data_size(), 1)); |
| 295 | 295 |
| 296 | 296 |
| 297 // Verify that the second input buffer was truncated to only contain | 297 // Verify that the second input buffer was truncated to only contain |
| 298 // the samples that are after the end of |input_1|. | 298 // the samples that are after the end of |input_1|. |
| 299 base::TimeDelta expected_timestamp = | 299 base::TimeDelta expected_timestamp = |
| 300 input_1->GetTimestamp() + input_1->GetDuration(); | 300 input_1->get_timestamp() + input_1->get_duration(); |
| 301 base::TimeDelta expected_duration = | 301 base::TimeDelta expected_duration = |
| 302 (input_2->GetTimestamp() + input_2->GetDuration()) - expected_timestamp; | 302 (input_2->get_timestamp() + input_2->get_duration()) - expected_timestamp; |
| 303 EXPECT_EQ(expected_timestamp, output_2->GetTimestamp()); | 303 EXPECT_EQ(expected_timestamp, output_2->get_timestamp()); |
| 304 EXPECT_EQ(expected_duration, output_2->GetDuration()); | 304 EXPECT_EQ(expected_duration, output_2->get_duration()); |
| 305 EXPECT_EQ(input_2->GetDataSize() - kOverlapSize, output_2->GetDataSize()); | 305 EXPECT_EQ(input_2->get_data_size() - kOverlapSize, output_2->get_data_size()); |
| 306 EXPECT_TRUE(VerifyData(output_2->GetData(), output_2->GetDataSize(), 2)); | 306 EXPECT_TRUE(VerifyData(output_2->get_data(), output_2->get_data_size(), 2)); |
| 307 } | 307 } |
| 308 | 308 |
| 309 | 309 |
| 310 // Test that an input buffer that is completely overlapped by a buffer | 310 // Test that an input buffer that is completely overlapped by a buffer |
| 311 // that was already added is dropped. | 311 // that was already added is dropped. |
| 312 // +--------------+ | 312 // +--------------+ |
| 313 // |11111111111111| | 313 // |11111111111111| |
| 314 // +--------------+ | 314 // +--------------+ |
| 315 // +-----+ | 315 // +-----+ |
| 316 // |22222| | 316 // |22222| |
| 317 // +-----+ | 317 // +-----+ |
| 318 // +-------------+ | 318 // +-------------+ |
| 319 // |3333333333333| | 319 // |3333333333333| |
| 320 // +-------------+ | 320 // +-------------+ |
| 321 // Results in: | 321 // Results in: |
| 322 // +--------------+-------------+ | 322 // +--------------+-------------+ |
| 323 // |11111111111111|3333333333333| | 323 // |11111111111111|3333333333333| |
| 324 // +--------------+-------------+ | 324 // +--------------+-------------+ |
| 325 TEST_F(AudioSplicerTest, DropBuffer) { | 325 TEST_F(AudioSplicerTest, DropBuffer) { |
| 326 scoped_refptr<DataBuffer> input_1 = GetNextInputBuffer(1); | 326 scoped_refptr<DataBuffer> input_1 = GetNextInputBuffer(1); |
| 327 | 327 |
| 328 // Reset timestamp helper so that the next buffer will have a | 328 // Reset timestamp helper so that the next buffer will have a |
| 329 // timestamp that starts in the middle of |input_1|. | 329 // timestamp that starts in the middle of |input_1|. |
| 330 const int kOverlapOffset = input_1->GetDataSize() / 2; | 330 const int kOverlapOffset = input_1->get_data_size() / 2; |
| 331 const int kOverlapSize = input_1->GetDataSize() / 4; | 331 const int kOverlapSize = input_1->get_data_size() / 4; |
| 332 input_timestamp_helper_.SetBaseTimestamp(input_1->GetTimestamp()); | 332 input_timestamp_helper_.SetBaseTimestamp(input_1->get_timestamp()); |
| 333 input_timestamp_helper_.AddBytes(kOverlapOffset); | 333 input_timestamp_helper_.AddBytes(kOverlapOffset); |
| 334 | 334 |
| 335 scoped_refptr<DataBuffer> input_2 = GetNextInputBuffer(2, kOverlapSize); | 335 scoped_refptr<DataBuffer> input_2 = GetNextInputBuffer(2, kOverlapSize); |
| 336 | 336 |
| 337 // Reset the timestamp helper so the next buffer will be right after | 337 // Reset the timestamp helper so the next buffer will be right after |
| 338 // |input_1|. | 338 // |input_1|. |
| 339 input_timestamp_helper_.SetBaseTimestamp(input_1->GetTimestamp()); | 339 input_timestamp_helper_.SetBaseTimestamp(input_1->get_timestamp()); |
| 340 input_timestamp_helper_.AddBytes(input_1->GetDataSize()); | 340 input_timestamp_helper_.AddBytes(input_1->get_data_size()); |
| 341 scoped_refptr<DataBuffer> input_3 = GetNextInputBuffer(3); | 341 scoped_refptr<DataBuffer> input_3 = GetNextInputBuffer(3); |
| 342 | 342 |
| 343 EXPECT_TRUE(splicer_.AddInput(input_1)); | 343 EXPECT_TRUE(splicer_.AddInput(input_1)); |
| 344 EXPECT_TRUE(splicer_.AddInput(input_2)); | 344 EXPECT_TRUE(splicer_.AddInput(input_2)); |
| 345 EXPECT_TRUE(splicer_.AddInput(input_3)); | 345 EXPECT_TRUE(splicer_.AddInput(input_3)); |
| 346 | 346 |
| 347 EXPECT_TRUE(splicer_.HasNextBuffer()); | 347 EXPECT_TRUE(splicer_.HasNextBuffer()); |
| 348 scoped_refptr<DataBuffer> output_1 = splicer_.GetNextBuffer(); | 348 scoped_refptr<DataBuffer> output_1 = splicer_.GetNextBuffer(); |
| 349 scoped_refptr<DataBuffer> output_2 = splicer_.GetNextBuffer(); | 349 scoped_refptr<DataBuffer> output_2 = splicer_.GetNextBuffer(); |
| 350 EXPECT_FALSE(splicer_.HasNextBuffer()); | 350 EXPECT_FALSE(splicer_.HasNextBuffer()); |
| 351 | 351 |
| 352 // Verify that the first input buffer passed through unmodified. | 352 // Verify that the first input buffer passed through unmodified. |
| 353 EXPECT_EQ(input_1->GetTimestamp(), output_1->GetTimestamp()); | 353 EXPECT_EQ(input_1->get_timestamp(), output_1->get_timestamp()); |
| 354 EXPECT_EQ(input_1->GetDuration(), output_1->GetDuration()); | 354 EXPECT_EQ(input_1->get_duration(), output_1->get_duration()); |
| 355 EXPECT_EQ(input_1->GetDataSize(), output_1->GetDataSize()); | 355 EXPECT_EQ(input_1->get_data_size(), output_1->get_data_size()); |
| 356 EXPECT_TRUE(VerifyData(output_1->GetData(), output_1->GetDataSize(), 1)); | 356 EXPECT_TRUE(VerifyData(output_1->get_data(), output_1->get_data_size(), 1)); |
| 357 | 357 |
| 358 // Verify that the second output buffer only contains | 358 // Verify that the second output buffer only contains |
| 359 // the samples that are in |input_3|. | 359 // the samples that are in |input_3|. |
| 360 EXPECT_EQ(input_3->GetTimestamp(), output_2->GetTimestamp()); | 360 EXPECT_EQ(input_3->get_timestamp(), output_2->get_timestamp()); |
| 361 EXPECT_EQ(input_3->GetDuration(), output_2->GetDuration()); | 361 EXPECT_EQ(input_3->get_duration(), output_2->get_duration()); |
| 362 EXPECT_EQ(input_3->GetDataSize(), output_2->GetDataSize()); | 362 EXPECT_EQ(input_3->get_data_size(), output_2->get_data_size()); |
| 363 EXPECT_TRUE(VerifyData(output_2->GetData(), output_2->GetDataSize(), 3)); | 363 EXPECT_TRUE(VerifyData(output_2->get_data(), output_2->get_data_size(), 3)); |
| 364 } | 364 } |
| 365 | 365 |
| 366 } // namespace media | 366 } // namespace media |
| OLD | NEW |