Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(339)

Unified Diff: media/audio/fake_audio_input_stream.cc

Issue 831693004: Added WebRTC audio quality test using fake device; improved fake device (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/audio/fake_audio_input_stream.cc
diff --git a/media/audio/fake_audio_input_stream.cc b/media/audio/fake_audio_input_stream.cc
index 517117a18c62b5a0ff1701d82a212e5baaee9311..4632b258eda2abaf261bb7dba214ab6aba15d8bb 100644
--- a/media/audio/fake_audio_input_stream.cc
+++ b/media/audio/fake_audio_input_stream.cc
@@ -66,11 +66,13 @@ scoped_ptr<uint8[]> ReadWavFile(const base::FilePath& wav_filename,
wav_filename, base::File::FLAG_OPEN | base::File::FLAG_READ);
if (!wav_file.IsValid()) {
CHECK(false) << "Failed to read " << wav_filename.value() << " as input to "
- << "the fake device.";
+ << "the fake device.";
return nullptr;
}
size_t wav_file_length = wav_file.GetLength();
+ CHECK_GT(wav_file_length, 0u)
+ << "Input file to fake device is empty: " << wav_filename.value();
uint8* wav_file_data = new uint8[wav_file_length];
size_t read_bytes = wav_file.Read(0, reinterpret_cast<char*>(wav_file_data),
@@ -84,9 +86,7 @@ scoped_ptr<uint8[]> ReadWavFile(const base::FilePath& wav_filename,
}
// Opens |wav_filename|, reads it and loads it as a Wav file. This function will
-// bluntly trigger CHECKs if the file doesn't have the sampling frequency, bits
-// per sample or number of channels as specified in |expected_params|. We also
-// trigger CHECKs if we can't read the file or if it's malformed.
+// bluntly trigger CHECKs if we can't read the file or if it's malformed.
scoped_ptr<media::WavAudioHandler> CreateWavAudioHandler(
const base::FilePath& wav_filename, const uint8* wav_file_data,
size_t wav_file_length, const AudioParameters& expected_params) {
@@ -94,18 +94,6 @@ scoped_ptr<media::WavAudioHandler> CreateWavAudioHandler(
wav_file_length);
scoped_ptr<media::WavAudioHandler> wav_audio_handler(
new media::WavAudioHandler(wav_data));
-
- // Ensure the input file matches what the audio bus wants, otherwise bail out.
- CHECK_EQ(wav_audio_handler->params().channels(),
- expected_params.channels())
- << "Failed to read " << wav_filename.value() << " to fake device.";
- CHECK_EQ(wav_audio_handler->params().sample_rate(),
- expected_params.sample_rate())
- << "Failed to read " << wav_filename.value() << " to fake device.";
- CHECK_EQ(wav_audio_handler->params().bits_per_sample(),
- expected_params.bits_per_sample())
- << "Failed to read " << wav_filename.value() << " to fake device.";
-
return wav_audio_handler.Pass();
}
@@ -208,6 +196,20 @@ void FakeAudioInputStream::OpenInFileMode(const base::FilePath& wav_filename) {
wav_file_data_ = ReadWavFile(wav_filename, &file_length);
wav_audio_handler_ = CreateWavAudioHandler(
wav_filename, wav_file_data_.get(), file_length, params_);
+
+ // Hook us up so we pull in data from the file into the converter. We need to
+ // modify the wav file's audio parameters since we'll be reading small slices
+ // of it at a time and not the whole thing (like 10 ms at a time).
+ AudioParameters file_audio_slice(
+ wav_audio_handler_->params().format(),
+ wav_audio_handler_->params().channel_layout(),
+ wav_audio_handler_->params().sample_rate(),
+ wav_audio_handler_->params().bits_per_sample(),
+ params_.frames_per_buffer());
+
+ file_audio_converter_.reset(
+ new AudioConverter(file_audio_slice, params_, false));
+ file_audio_converter_->AddInput(this);
}
bool FakeAudioInputStream::PlayingFromFile() {
@@ -219,11 +221,7 @@ void FakeAudioInputStream::PlayFile() {
if (wav_audio_handler_->AtEnd(wav_file_read_pos_))
return;
- // Unfilled frames will be zeroed by CopyTo.
- size_t bytes_written;
- wav_audio_handler_->CopyTo(audio_bus_.get(), wav_file_read_pos_,
- &bytes_written);
- wav_file_read_pos_ += bytes_written;
+ file_audio_converter_->Convert(audio_bus_.get());
callback_->OnData(this, audio_bus_.get(), buffer_size_, 1.0);
}
@@ -321,4 +319,14 @@ void FakeAudioInputStream::BeepOnce() {
beep_context->SetBeepOnce(true);
}
+double FakeAudioInputStream::ProvideInput(AudioBus* audio_bus_into_converter,
+ base::TimeDelta buffer_delay) {
+ // Unfilled frames will be zeroed by CopyTo.
+ size_t bytes_written;
+ wav_audio_handler_->CopyTo(audio_bus_into_converter, wav_file_read_pos_,
+ &bytes_written);
+ wav_file_read_pos_ += bytes_written;
+ return 1.0;
+};
+
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698