| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 "chrome/browser/media/webrtc/webrtc_browsertest_audio.h" | 5 #include "chrome/browser/media/webrtc/webrtc_browsertest_audio.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/files/file.h" | 9 #include "base/files/file.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| 11 #include "media/audio/audio_power_monitor.h" | 11 #include "media/audio/audio_power_monitor.h" |
| 12 #include "media/audio/sounds/wav_audio_handler.h" | 12 #include "media/audio/sounds/wav_audio_handler.h" |
| 13 #include "media/base/audio_bus.h" | 13 #include "media/base/audio_bus.h" |
| 14 #include "media/base/audio_parameters.h" | 14 #include "media/base/audio_parameters.h" |
| 15 | 15 |
| 16 namespace { | 16 namespace { |
| 17 // Opens |wav_filename|, reads it and loads it as a wav file. This function will | 17 // Opens |wav_filename|, reads it and loads it as a wav file. This function will |
| 18 // bluntly trigger CHECKs if we can't read the file or if it's malformed. The | 18 // bluntly trigger CHECKs if we can't read the file or if it's malformed. The |
| 19 // caller takes ownership of the returned data. The size of the data is stored | 19 // caller takes ownership of the returned data. The size of the data is stored |
| 20 // in |read_length|. | 20 // in |read_length|. |
| 21 std::unique_ptr<char[]> ReadWavFile(const base::FilePath& wav_filename, | 21 std::unique_ptr<char[]> ReadWavFile(const base::FilePath& wav_filename, |
| 22 size_t* file_length) { | 22 size_t* file_length) { |
| 23 base::File wav_file( | 23 base::File wav_file( |
| 24 wav_filename, base::File::FLAG_OPEN | base::File::FLAG_READ); | 24 wav_filename, base::File::FLAG_OPEN | base::File::FLAG_READ); |
| 25 if (!wav_file.IsValid()) { | 25 if (!wav_file.IsValid()) { |
| 26 CHECK(false) << "Failed to read " << wav_filename.value(); | 26 // Failed to read |wav_filename.value()| |
| 27 CHECK(false); |
| 27 return nullptr; | 28 return nullptr; |
| 28 } | 29 } |
| 29 | 30 |
| 30 size_t wav_file_length = wav_file.GetLength(); | 31 size_t wav_file_length = wav_file.GetLength(); |
| 31 | 32 |
| 32 std::unique_ptr<char[]> data(new char[wav_file_length]); | 33 std::unique_ptr<char[]> data(new char[wav_file_length]); |
| 33 size_t read_bytes = wav_file.Read(0, data.get(), wav_file_length); | 34 size_t read_bytes = wav_file.Read(0, data.get(), wav_file_length); |
| 34 if (read_bytes != wav_file_length) { | 35 if (read_bytes != wav_file_length) { |
| 35 LOG(ERROR) << "Failed to read all bytes of " << wav_filename.value(); | 36 LOG(ERROR) << "Failed to read all bytes of " << wav_filename.value(); |
| 36 return nullptr; | 37 return nullptr; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 50 ReadWavFile(wav_filename, &file_length); | 51 ReadWavFile(wav_filename, &file_length); |
| 51 auto wav_audio_handler = media::WavAudioHandler::Create( | 52 auto wav_audio_handler = media::WavAudioHandler::Create( |
| 52 base::StringPiece(wav_file_data.get(), file_length)); | 53 base::StringPiece(wav_file_data.get(), file_length)); |
| 53 | 54 |
| 54 std::unique_ptr<media::AudioBus> audio_bus = media::AudioBus::Create( | 55 std::unique_ptr<media::AudioBus> audio_bus = media::AudioBus::Create( |
| 55 wav_audio_handler->num_channels(), wav_audio_handler->total_frames()); | 56 wav_audio_handler->num_channels(), wav_audio_handler->total_frames()); |
| 56 base::TimeDelta file_duration = wav_audio_handler->GetDuration(); | 57 base::TimeDelta file_duration = wav_audio_handler->GetDuration(); |
| 57 | 58 |
| 58 size_t bytes_written; | 59 size_t bytes_written; |
| 59 wav_audio_handler->CopyTo(audio_bus.get(), 0, &bytes_written); | 60 wav_audio_handler->CopyTo(audio_bus.get(), 0, &bytes_written); |
| 60 CHECK_EQ(bytes_written, wav_audio_handler->data().size()) | 61 // Expected to write entire file into bus. |
| 61 << "Expected to write entire file into bus."; | 62 CHECK_EQ(bytes_written, wav_audio_handler->data().size()); |
| 62 | 63 |
| 63 // Set the filter coefficient to the whole file's duration; this will make the | 64 // Set the filter coefficient to the whole file's duration; this will make the |
| 64 // power monitor take the entire file into account. | 65 // power monitor take the entire file into account. |
| 65 media::AudioPowerMonitor power_monitor(wav_audio_handler->sample_rate(), | 66 media::AudioPowerMonitor power_monitor(wav_audio_handler->sample_rate(), |
| 66 file_duration); | 67 file_duration); |
| 67 power_monitor.Scan(*audio_bus, audio_bus->frames()); | 68 power_monitor.Scan(*audio_bus, audio_bus->frames()); |
| 68 | 69 |
| 69 file_parameters->Reset( | 70 file_parameters->Reset( |
| 70 media::AudioParameters::AUDIO_PCM_LOW_LATENCY, | 71 media::AudioParameters::AUDIO_PCM_LOW_LATENCY, |
| 71 media::GuessChannelLayout(wav_audio_handler->num_channels()), | 72 media::GuessChannelLayout(wav_audio_handler->num_channels()), |
| 72 wav_audio_handler->sample_rate(), wav_audio_handler->bits_per_sample(), | 73 wav_audio_handler->sample_rate(), wav_audio_handler->bits_per_sample(), |
| 73 wav_audio_handler->total_frames()); | 74 wav_audio_handler->total_frames()); |
| 74 file_parameters->set_channels_for_discrete(wav_audio_handler->num_channels()); | 75 file_parameters->set_channels_for_discrete(wav_audio_handler->num_channels()); |
| 75 | 76 |
| 76 return power_monitor.ReadCurrentPowerAndClip().first; | 77 return power_monitor.ReadCurrentPowerAndClip().first; |
| 77 } | 78 } |
| 78 | 79 |
| 79 } // namespace test | 80 } // namespace test |
| OLD | NEW |