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

Unified Diff: media/audio/simple_sources.cc

Issue 1453233002: Improve input handling for WaveAudioHandler. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Formatting Created 5 years, 1 month 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
« no previous file with comments | « media/audio/simple_sources.h ('k') | media/audio/simple_sources_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/simple_sources.cc
diff --git a/media/audio/simple_sources.cc b/media/audio/simple_sources.cc
index 877f9fd5bdac20866823b14574e1c46e03c7e23e..4ded6bd40dd90f682de4e5447638bdb6ef9f2aaf 100644
--- a/media/audio/simple_sources.cc
+++ b/media/audio/simple_sources.cc
@@ -16,13 +16,13 @@
#include "media/base/audio_bus.h"
namespace media {
-
+namespace {
// Opens |wav_filename|, reads it and loads it as a wav file. This function will
// return a null pointer if we can't read the file or if it's malformed. The
// caller takes ownership of the returned data. The size of the data is stored
// in |read_length|.
-static scoped_ptr<uint8[]> ReadWavFile(const base::FilePath& wav_filename,
- size_t* file_length) {
+scoped_ptr<char[]> ReadWavFile(const base::FilePath& wav_filename,
+ size_t* read_length) {
base::File wav_file(
wav_filename, base::File::FLAG_OPEN | base::File::FLAG_READ);
if (!wav_file.IsValid()) {
@@ -38,26 +38,14 @@ static scoped_ptr<uint8[]> ReadWavFile(const base::FilePath& wav_filename,
return nullptr;
}
- uint8* wav_file_data = new uint8[wav_file_length];
- size_t read_bytes = wav_file.Read(0, reinterpret_cast<char*>(wav_file_data),
- wav_file_length);
+ scoped_ptr<char[]> data(new char[wav_file_length]);
+ size_t read_bytes = wav_file.Read(0, data.get(), wav_file_length);
if (read_bytes != wav_file_length) {
LOG(ERROR) << "Failed to read all bytes of " << wav_filename.value();
return nullptr;
}
- *file_length = wav_file_length;
- return scoped_ptr<uint8[]>(wav_file_data);
-}
-
-// Opens |wav_filename|, reads it and loads it as a wav file. This function will
-// bluntly trigger CHECKs if we can't read the file or if it's malformed.
-static scoped_ptr<WavAudioHandler> CreateWavAudioHandler(
- const base::FilePath& wav_filename, const uint8* wav_file_data,
- size_t wav_file_length, const AudioParameters& expected_params) {
- base::StringPiece wav_data(reinterpret_cast<const char*>(wav_file_data),
- wav_file_length);
- scoped_ptr<WavAudioHandler> wav_audio_handler(new WavAudioHandler(wav_data));
- return wav_audio_handler.Pass();
+ *read_length = wav_file_length;
+ return data;
}
// These values are based on experiments for local-to-local
@@ -101,6 +89,7 @@ class BeepContext {
static base::LazyInstance<BeepContext>::Leaky g_beep_context =
LAZY_INSTANCE_INITIALIZER;
+} // namespace
//////////////////////////////////////////////////////////////////////////////
// SineWaveAudioSource implementation.
@@ -171,16 +160,24 @@ void FileSource::LoadWavFile(const base::FilePath& path_to_wav_file) {
if (load_failed_)
return;
- // Read the file, and put its data in a scoped_ptr so it gets deleted later.
- size_t file_length = 0;
- wav_file_data_ = ReadWavFile(path_to_wav_file, &file_length);
- if (!wav_file_data_) {
+ // Read the file, and put its data in a scoped_ptr so it gets deleted when
+ // this class destructs. This data must be valid for the lifetime of
+ // |wav_audio_handler_|.
+ size_t length = 0u;
+ raw_wav_data_ = ReadWavFile(path_to_wav_file, &length);
+ if (!raw_wav_data_) {
load_failed_ = true;
return;
}
- wav_audio_handler_ = CreateWavAudioHandler(
- path_to_wav_file, wav_file_data_.get(), file_length, params_);
+ // Attempt to create a handler with this data. If the data is invalid, return.
+ wav_audio_handler_ =
+ WavAudioHandler::Create(base::StringPiece(raw_wav_data_.get(), length));
+ if (!wav_audio_handler_) {
+ LOG(ERROR) << "WAV data could be read but is not valid";
+ load_failed_ = true;
+ return;
+ }
// 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
« no previous file with comments | « media/audio/simple_sources.h ('k') | media/audio/simple_sources_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698