| Index: media/audio/audio_debug_file_writer.cc
|
| diff --git a/content/browser/renderer_host/media/audio_debug_file_writer.cc b/media/audio/audio_debug_file_writer.cc
|
| similarity index 75%
|
| rename from content/browser/renderer_host/media/audio_debug_file_writer.cc
|
| rename to media/audio/audio_debug_file_writer.cc
|
| index 1656a1cca232a2d020da4a5df59f96eb597bafdf..34dfbf8c415b61717f29fa1835902d7017569311 100644
|
| --- a/content/browser/renderer_host/media/audio_debug_file_writer.cc
|
| +++ b/media/audio/audio_debug_file_writer.cc
|
| @@ -1,20 +1,20 @@
|
| -// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "content/browser/renderer_host/media/audio_debug_file_writer.h"
|
| +#include "media/audio/audio_debug_file_writer.h"
|
|
|
| #include <stdint.h>
|
| #include <array>
|
| #include <utility>
|
|
|
| +#include "base/bind.h"
|
| #include "base/logging.h"
|
| #include "base/memory/ptr_util.h"
|
| #include "base/sys_byteorder.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| #include "media/base/audio_bus.h"
|
|
|
| -namespace content {
|
| +namespace media {
|
|
|
| namespace {
|
|
|
| @@ -63,7 +63,9 @@ class CharBufferWriter {
|
| size_ += data_size;
|
| }
|
|
|
| - void Write(const char(&data)[4]) { Write(static_cast<const char*>(data), 4); }
|
| + void Write(const char (&data)[4]) {
|
| + Write(static_cast<const char*>(data), 4);
|
| + }
|
|
|
| void WriteLE16(uint16_t data) {
|
| uint16_t val = base::ByteSwapToLE16(data);
|
| @@ -130,75 +132,41 @@ void WriteWavHeader(WavHeaderBuffer* buf,
|
|
|
| } // namespace
|
|
|
| -// Manages the debug recording file and writes to it. Can be created on any
|
| -// thread. All the operations must be executed on FILE thread. Must be destroyed
|
| -// on FILE thread.
|
| -class AudioDebugFileWriter::AudioFileWriter {
|
| - public:
|
| - static AudioFileWriterUniquePtr Create(const base::FilePath& file_name,
|
| - const media::AudioParameters& params);
|
| -
|
| - ~AudioFileWriter();
|
| -
|
| - // Write data from |data| to file.
|
| - void Write(const media::AudioBus* data);
|
| -
|
| - private:
|
| - AudioFileWriter(const media::AudioParameters& params);
|
| -
|
| - // Write wave header to file. Called on the FILE thread twice: on construction
|
| - // of AudioFileWriter size of the wave data is unknown, so the header is
|
| - // written with zero sizes; then on destruction it is re-written with the
|
| - // actual size info accumulated throughout the object lifetime.
|
| - void WriteHeader();
|
| -
|
| - void CreateRecordingFile(const base::FilePath& file_name);
|
| -
|
| - // The file to write to.
|
| - base::File file_;
|
| -
|
| - // Number of written samples.
|
| - uint64_t samples_;
|
| -
|
| - // Input audio parameters required to build wave header.
|
| - const media::AudioParameters params_;
|
| -
|
| - // Intermediate buffer to be written to file. Interleaved 16 bit audio data.
|
| - std::unique_ptr<int16_t[]> interleaved_data_;
|
| - int interleaved_data_size_;
|
| -};
|
| -
|
| // static
|
| AudioDebugFileWriter::AudioFileWriterUniquePtr
|
| AudioDebugFileWriter::AudioFileWriter::Create(
|
| const base::FilePath& file_name,
|
| - const media::AudioParameters& params) {
|
| - AudioFileWriterUniquePtr file_writer(new AudioFileWriter(params));
|
| -
|
| - // base::Unretained is safe, because destructor is called on FILE thread or on
|
| - // FILE message loop destruction.
|
| - BrowserThread::PostTask(
|
| - BrowserThread::FILE, FROM_HERE,
|
| - base::Bind(&AudioFileWriter::CreateRecordingFile,
|
| - base::Unretained(file_writer.get()), file_name));
|
| + const media::AudioParameters& params,
|
| + scoped_refptr<base::SingleThreadTaskRunner> file_task_runner) {
|
| + AudioFileWriterUniquePtr file_writer(
|
| + new AudioFileWriter(params, file_task_runner));
|
| +
|
| + // base::Unretained is safe, because destructor is called on
|
| + // |file_task_runner|.
|
| + file_task_runner->PostTask(
|
| + FROM_HERE, base::Bind(&AudioFileWriter::CreateRecordingFile,
|
| + base::Unretained(file_writer.get()), file_name));
|
| return file_writer;
|
| }
|
|
|
| AudioDebugFileWriter::AudioFileWriter::AudioFileWriter(
|
| - const media::AudioParameters& params)
|
| - : samples_(0), params_(params), interleaved_data_size_(0) {
|
| + const media::AudioParameters& params,
|
| + scoped_refptr<base::SingleThreadTaskRunner> file_task_runner)
|
| + : samples_(0),
|
| + params_(params),
|
| + interleaved_data_size_(0),
|
| + file_task_runner_(std::move(file_task_runner)) {
|
| DCHECK_EQ(params.bits_per_sample(), kBytesPerSample * 8);
|
| }
|
|
|
| AudioDebugFileWriter::AudioFileWriter::~AudioFileWriter() {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| + DCHECK(file_task_runner_->BelongsToCurrentThread());
|
| if (file_.IsValid())
|
| WriteHeader();
|
| }
|
|
|
| -void AudioDebugFileWriter::AudioFileWriter::Write(
|
| - const media::AudioBus* data) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| +void AudioDebugFileWriter::AudioFileWriter::Write(const media::AudioBus* data) {
|
| + DCHECK(file_task_runner_->BelongsToCurrentThread());
|
| if (!file_.IsValid())
|
| return;
|
|
|
| @@ -224,7 +192,7 @@ void AudioDebugFileWriter::AudioFileWriter::Write(
|
| }
|
|
|
| void AudioDebugFileWriter::AudioFileWriter::WriteHeader() {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| + DCHECK(file_task_runner_->BelongsToCurrentThread());
|
| if (!file_.IsValid())
|
| return;
|
| WavHeaderBuffer buf;
|
| @@ -238,7 +206,7 @@ void AudioDebugFileWriter::AudioFileWriter::WriteHeader() {
|
|
|
| void AudioDebugFileWriter::AudioFileWriter::CreateRecordingFile(
|
| const base::FilePath& file_name) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| + DCHECK(file_task_runner_->BelongsToCurrentThread());
|
| DCHECK(!file_.IsValid());
|
|
|
| file_ = base::File(file_name,
|
| @@ -261,19 +229,20 @@ void AudioDebugFileWriter::AudioFileWriter::CreateRecordingFile(
|
| }
|
|
|
| AudioDebugFileWriter::AudioDebugFileWriter(
|
| - const media::AudioParameters& params)
|
| - : params_(params) {
|
| + const media::AudioParameters& params,
|
| + scoped_refptr<base::SingleThreadTaskRunner> file_task_runner)
|
| + : params_(params), file_task_runner_(std::move(file_task_runner)) {
|
| client_sequence_checker_.DetachFromSequence();
|
| }
|
|
|
| AudioDebugFileWriter::~AudioDebugFileWriter() {
|
| - // |file_writer_| will be deleted on FILE thread.
|
| + // |file_writer_| will be deleted on |file_task_runner_|.
|
| }
|
|
|
| void AudioDebugFileWriter::Start(const base::FilePath& file_name) {
|
| DCHECK(client_sequence_checker_.CalledOnValidSequence());
|
| DCHECK(!file_writer_);
|
| - file_writer_ = AudioFileWriter::Create(file_name, params_);
|
| + file_writer_ = AudioFileWriter::Create(file_name, params_, file_task_runner_);
|
| }
|
|
|
| void AudioDebugFileWriter::Stop() {
|
| @@ -289,8 +258,8 @@ void AudioDebugFileWriter::Write(std::unique_ptr<media::AudioBus> data) {
|
| return;
|
|
|
| // base::Unretained for |file_writer_| is safe, see the destructor.
|
| - BrowserThread::PostTask(
|
| - BrowserThread::FILE, FROM_HERE,
|
| + file_task_runner_->PostTask(
|
| + FROM_HERE,
|
| // Callback takes ownership of |data|:
|
| base::Bind(&AudioFileWriter::Write, base::Unretained(file_writer_.get()),
|
| base::Owned(data.release())));
|
| @@ -305,4 +274,4 @@ bool AudioDebugFileWriter::WillWrite() {
|
| return !!file_writer_;
|
| }
|
|
|
| -} // namspace content
|
| +} // namspace media
|
|
|