| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| 11 #include "base/synchronization/waitable_event.h" | 11 #include "base/synchronization/waitable_event.h" |
| 12 #include "base/sys_byteorder.h" | 12 #include "base/sys_byteorder.h" |
| 13 #include "base/threading/thread.h" | 13 #include "base/threading/thread.h" |
| 14 #include "media/audio/audio_debug_file_writer.h" | 14 #include "media/audio/audio_debug_file_writer.h" |
| 15 #include "media/base/audio_bus.h" | 15 #include "media/base/audio_bus.h" |
| 16 #include "media/base/audio_sample_types.h" |
| 16 #include "media/base/test_helpers.h" | 17 #include "media/base/test_helpers.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 19 |
| 19 namespace media { | 20 namespace media { |
| 20 | 21 |
| 21 namespace { | 22 namespace { |
| 22 | 23 |
| 23 static const uint16_t kBytesPerSample = sizeof(uint16_t); | 24 static const uint16_t kBytesPerSample = sizeof(uint16_t); |
| 24 static const uint16_t kPcmEncoding = 1; | 25 static const uint16_t kPcmEncoding = 1; |
| 25 static const size_t kWavHeaderSize = 44; | 26 static const size_t kWavHeaderSize = 44; |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 | 161 |
| 161 callback.Run(); | 162 callback.Run(); |
| 162 } | 163 } |
| 163 | 164 |
| 164 void DoDebugRecording() { | 165 void DoDebugRecording() { |
| 165 // Write tasks are posted to |file_thread_|. | 166 // Write tasks are posted to |file_thread_|. |
| 166 for (int i = 0; i < writes_; ++i) { | 167 for (int i = 0; i < writes_; ++i) { |
| 167 std::unique_ptr<AudioBus> bus = | 168 std::unique_ptr<AudioBus> bus = |
| 168 AudioBus::Create(params_.channels(), params_.frames_per_buffer()); | 169 AudioBus::Create(params_.channels(), params_.frames_per_buffer()); |
| 169 | 170 |
| 170 bus->FromInterleaved( | 171 bus->FromInterleaved<media::SignedInt16SampleTypeTraits>( |
| 171 source_interleaved_.get() + | 172 source_interleaved_.get() + |
| 172 i * params_.channels() * params_.frames_per_buffer(), | 173 i * params_.channels() * params_.frames_per_buffer(), |
| 173 params_.frames_per_buffer(), kBytesPerSample); | 174 params_.frames_per_buffer()); |
| 174 | 175 |
| 175 debug_writer_->Write(std::move(bus)); | 176 debug_writer_->Write(std::move(bus)); |
| 176 } | 177 } |
| 177 } | 178 } |
| 178 | 179 |
| 179 void WaitForRecordingCompletion() { | 180 void WaitForRecordingCompletion() { |
| 180 WaitableMessageLoopEvent event; | 181 WaitableMessageLoopEvent event; |
| 181 | 182 |
| 182 // Post a task to the file thread indicating that all the writes are done. | 183 // Post a task to the file thread indicating that all the writes are done. |
| 183 file_thread_.task_runner()->PostTask( | 184 file_thread_.task_runner()->PostTask( |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 | 238 |
| 238 private: | 239 private: |
| 239 DISALLOW_COPY_AND_ASSIGN(AudioDebugFileWriterTest); | 240 DISALLOW_COPY_AND_ASSIGN(AudioDebugFileWriterTest); |
| 240 }; | 241 }; |
| 241 | 242 |
| 242 class AudioDebugFileWriterBehavioralTest : public AudioDebugFileWriterTest {}; | 243 class AudioDebugFileWriterBehavioralTest : public AudioDebugFileWriterTest {}; |
| 243 | 244 |
| 244 TEST_P(AudioDebugFileWriterTest, WaveRecordingTest) { | 245 TEST_P(AudioDebugFileWriterTest, WaveRecordingTest) { |
| 245 debug_writer_.reset( | 246 debug_writer_.reset( |
| 246 new AudioDebugFileWriter(params_, file_thread_.task_runner())); | 247 new AudioDebugFileWriter(params_, file_thread_.task_runner())); |
| 248 RecordAndVerifyOnce(); |
| 249 } |
| 247 | 250 |
| 248 RecordAndVerifyOnce(); | 251 TEST_P(AudioDebugFileWriterTest, GetFileNameExtension) { |
| 252 debug_writer_.reset( |
| 253 new AudioDebugFileWriter(params_, file_thread_.task_runner())); |
| 254 EXPECT_EQ(FILE_PATH_LITERAL("wav"), |
| 255 base::FilePath::StringType(debug_writer_->GetFileNameExtension())); |
| 249 } | 256 } |
| 250 | 257 |
| 251 TEST_P(AudioDebugFileWriterBehavioralTest, | 258 TEST_P(AudioDebugFileWriterBehavioralTest, |
| 252 DeletedBeforeRecordingFinishedOnFileThread) { | 259 DeletedBeforeRecordingFinishedOnFileThread) { |
| 253 debug_writer_.reset( | 260 debug_writer_.reset( |
| 254 new AudioDebugFileWriter(params_, file_thread_.task_runner())); | 261 new AudioDebugFileWriter(params_, file_thread_.task_runner())); |
| 255 | 262 |
| 256 base::FilePath file_path; | 263 base::FilePath file_path; |
| 257 EXPECT_TRUE(base::CreateTemporaryFile(&file_path)); | 264 EXPECT_TRUE(base::CreateTemporaryFile(&file_path)); |
| 258 | 265 |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 AudioDebugFileWriterBehavioralTest, | 361 AudioDebugFileWriterBehavioralTest, |
| 355 // Using 10ms frames per buffer everywhere. | 362 // Using 10ms frames per buffer everywhere. |
| 356 testing::Values( | 363 testing::Values( |
| 357 // No writes. | 364 // No writes. |
| 358 std::tr1::make_tuple(ChannelLayout::CHANNEL_LAYOUT_MONO, | 365 std::tr1::make_tuple(ChannelLayout::CHANNEL_LAYOUT_MONO, |
| 359 44100, | 366 44100, |
| 360 44100 / 100, | 367 44100 / 100, |
| 361 100))); | 368 100))); |
| 362 | 369 |
| 363 } // namespace media | 370 } // namespace media |
| OLD | NEW |