Commit 4c7ec5bf authored by Max Morin's avatar Max Morin Committed by Commit Bot

Move AudioSyncReader and AudioInputSyncWriter to media/.

Only mechanical changes in this CL. Presubmit (correctly) complains
about Time::Now() usage AudioInputSyncWriter. This is pre-existing,
but only for logging, and will be fixed in a followup to keep this CL
completely trivial.

Bug: 803102
Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I422f80e376f89428ed8f69a1de1a5751c31bf4bb
Reviewed-on: https://chromium-review.googlesource.com/886345
Commit-Queue: Max Morin <maxmorin@chromium.org>
Reviewed-by: default avatarDale Curtis <dalecurtis@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#532383}
parent a50c9a57
...@@ -1322,8 +1322,6 @@ jumbo_source_set("browser") { ...@@ -1322,8 +1322,6 @@ jumbo_source_set("browser") {
"renderer_host/media/audio_input_renderer_host.h", "renderer_host/media/audio_input_renderer_host.h",
"renderer_host/media/audio_input_stream_handle.cc", "renderer_host/media/audio_input_stream_handle.cc",
"renderer_host/media/audio_input_stream_handle.h", "renderer_host/media/audio_input_stream_handle.h",
"renderer_host/media/audio_input_sync_writer.cc",
"renderer_host/media/audio_input_sync_writer.h",
"renderer_host/media/audio_output_authorization_handler.cc", "renderer_host/media/audio_output_authorization_handler.cc",
"renderer_host/media/audio_output_authorization_handler.h", "renderer_host/media/audio_output_authorization_handler.h",
"renderer_host/media/audio_output_delegate_impl.cc", "renderer_host/media/audio_output_delegate_impl.cc",
...@@ -1332,8 +1330,6 @@ jumbo_source_set("browser") { ...@@ -1332,8 +1330,6 @@ jumbo_source_set("browser") {
"renderer_host/media/audio_output_stream_observer_impl.h", "renderer_host/media/audio_output_stream_observer_impl.h",
"renderer_host/media/audio_renderer_host.cc", "renderer_host/media/audio_renderer_host.cc",
"renderer_host/media/audio_renderer_host.h", "renderer_host/media/audio_renderer_host.h",
"renderer_host/media/audio_sync_reader.cc",
"renderer_host/media/audio_sync_reader.h",
"renderer_host/media/in_process_launched_video_capture_device.cc", "renderer_host/media/in_process_launched_video_capture_device.cc",
"renderer_host/media/in_process_launched_video_capture_device.h", "renderer_host/media/in_process_launched_video_capture_device.h",
"renderer_host/media/in_process_video_capture_device_launcher.cc", "renderer_host/media/in_process_video_capture_device_launcher.cc",
......
...@@ -18,12 +18,12 @@ ...@@ -18,12 +18,12 @@
#include "content/browser/media/capture/web_contents_audio_input_stream.h" #include "content/browser/media/capture/web_contents_audio_input_stream.h"
#include "content/browser/media/media_internals.h" #include "content/browser/media/media_internals.h"
#include "content/browser/renderer_host/media/audio_input_device_manager.h" #include "content/browser/renderer_host/media/audio_input_device_manager.h"
#include "content/browser/renderer_host/media/audio_input_sync_writer.h"
#include "content/browser/renderer_host/media/media_stream_manager.h" #include "content/browser/renderer_host/media/media_stream_manager.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_process_host.h" #include "content/public/browser/render_process_host.h"
#include "content/public/browser/web_contents_media_capture_id.h" #include "content/public/browser/web_contents_media_capture_id.h"
#include "media/audio/audio_input_controller.h" #include "media/audio/audio_input_controller.h"
#include "media/audio/audio_input_sync_writer.h"
#include "media/audio/audio_logging.h" #include "media/audio/audio_logging.h"
#include "media/audio/audio_manager.h" #include "media/audio/audio_manager.h"
#include "media/base/media_switches.h" #include "media/base/media_switches.h"
...@@ -133,9 +133,10 @@ std::unique_ptr<media::AudioInputDelegate> AudioInputDelegateImpl::Create( ...@@ -133,9 +133,10 @@ std::unique_ptr<media::AudioInputDelegate> AudioInputDelegateImpl::Create(
auto foreign_socket = std::make_unique<base::CancelableSyncSocket>(); auto foreign_socket = std::make_unique<base::CancelableSyncSocket>();
std::unique_ptr<AudioInputSyncWriter> writer = AudioInputSyncWriter::Create( std::unique_ptr<media::AudioInputSyncWriter> writer =
base::BindRepeating(&LogMessage, stream_id), shared_memory_count, media::AudioInputSyncWriter::Create(
possibly_modified_parameters, foreign_socket.get()); base::BindRepeating(&LogMessage, stream_id), shared_memory_count,
possibly_modified_parameters, foreign_socket.get());
if (!writer) { if (!writer) {
LogMessage(stream_id, "Failed to set up sync writer."); LogMessage(stream_id, "Failed to set up sync writer.");
...@@ -170,7 +171,7 @@ AudioInputDelegateImpl::AudioInputDelegateImpl( ...@@ -170,7 +171,7 @@ AudioInputDelegateImpl::AudioInputDelegateImpl(
bool automatic_gain_control, bool automatic_gain_control,
EventHandler* subscriber, EventHandler* subscriber,
const MediaStreamDevice* device, const MediaStreamDevice* device,
std::unique_ptr<AudioInputSyncWriter> writer, std::unique_ptr<media::AudioInputSyncWriter> writer,
std::unique_ptr<base::CancelableSyncSocket> foreign_socket) std::unique_ptr<base::CancelableSyncSocket> foreign_socket)
: subscriber_(subscriber), : subscriber_(subscriber),
controller_event_handler_(), controller_event_handler_(),
...@@ -244,7 +245,7 @@ AudioInputDelegateImpl::~AudioInputDelegateImpl() { ...@@ -244,7 +245,7 @@ AudioInputDelegateImpl::~AudioInputDelegateImpl() {
// stay alive until |controller_| has finished closing. // stay alive until |controller_| has finished closing.
controller_->Close(base::BindOnce( controller_->Close(base::BindOnce(
[](int stream_id, std::unique_ptr<ControllerEventHandler>, [](int stream_id, std::unique_ptr<ControllerEventHandler>,
std::unique_ptr<AudioInputSyncWriter>) { std::unique_ptr<media::AudioInputSyncWriter>) {
LogMessage(stream_id, "Stream is now closed"); LogMessage(stream_id, "Stream is now closed");
}, },
stream_id_, std::move(controller_event_handler_), std::move(writer_))); stream_id_, std::move(controller_event_handler_), std::move(writer_)));
......
...@@ -18,13 +18,13 @@ namespace media { ...@@ -18,13 +18,13 @@ namespace media {
class AudioLog; class AudioLog;
class AudioManager; class AudioManager;
class AudioInputController; class AudioInputController;
class AudioInputSyncWriter;
class AudioParameters; class AudioParameters;
class UserInputMonitor; class UserInputMonitor;
} // namespace media } // namespace media
namespace content { namespace content {
class AudioInputSyncWriter;
class AudioInputDeviceManager; class AudioInputDeviceManager;
class AudioMirroringManager; class AudioMirroringManager;
struct MediaStreamDevice; struct MediaStreamDevice;
...@@ -73,7 +73,7 @@ class CONTENT_EXPORT AudioInputDelegateImpl : public media::AudioInputDelegate { ...@@ -73,7 +73,7 @@ class CONTENT_EXPORT AudioInputDelegateImpl : public media::AudioInputDelegate {
bool automatic_gain_control, bool automatic_gain_control,
EventHandler* subscriber, EventHandler* subscriber,
const MediaStreamDevice* device, const MediaStreamDevice* device,
std::unique_ptr<AudioInputSyncWriter> writer, std::unique_ptr<media::AudioInputSyncWriter> writer,
std::unique_ptr<base::CancelableSyncSocket> foreign_socket); std::unique_ptr<base::CancelableSyncSocket> foreign_socket);
void SendCreatedNotification(bool initially_muted); void SendCreatedNotification(bool initially_muted);
...@@ -89,7 +89,7 @@ class CONTENT_EXPORT AudioInputDelegateImpl : public media::AudioInputDelegate { ...@@ -89,7 +89,7 @@ class CONTENT_EXPORT AudioInputDelegateImpl : public media::AudioInputDelegate {
// |controller_event_handler_| and |writer_| outlive |this|, see the // |controller_event_handler_| and |writer_| outlive |this|, see the
// destructor for details. // destructor for details.
std::unique_ptr<ControllerEventHandler> controller_event_handler_; std::unique_ptr<ControllerEventHandler> controller_event_handler_;
std::unique_ptr<AudioInputSyncWriter> writer_; std::unique_ptr<media::AudioInputSyncWriter> writer_;
std::unique_ptr<base::CancelableSyncSocket> foreign_socket_; std::unique_ptr<base::CancelableSyncSocket> foreign_socket_;
media::AudioLog* const audio_log_; media::AudioLog* const audio_log_;
scoped_refptr<media::AudioInputController> controller_; scoped_refptr<media::AudioInputController> controller_;
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include "build/build_config.h" #include "build/build_config.h"
#include "content/browser/media/capture/audio_mirroring_manager.h" #include "content/browser/media/capture/audio_mirroring_manager.h"
#include "content/browser/media/media_internals.h" #include "content/browser/media/media_internals.h"
#include "content/browser/renderer_host/media/audio_sync_reader.h"
#include "content/browser/renderer_host/media/media_stream_manager.h" #include "content/browser/renderer_host/media/media_stream_manager.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/browser/media_observer.h" #include "content/public/browser/media_observer.h"
......
...@@ -13,11 +13,11 @@ ...@@ -13,11 +13,11 @@
#include "content/browser/media/audio_stream_monitor.h" #include "content/browser/media/audio_stream_monitor.h"
#include "content/browser/media/capture/audio_mirroring_manager.h" #include "content/browser/media/capture/audio_mirroring_manager.h"
#include "content/browser/media/media_internals.h" #include "content/browser/media/media_internals.h"
#include "content/browser/renderer_host/media/audio_sync_reader.h"
#include "content/browser/renderer_host/media/media_stream_manager.h" #include "content/browser/renderer_host/media/media_stream_manager.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/browser/media_observer.h" #include "content/public/browser/media_observer.h"
#include "media/audio/audio_output_controller.h" #include "media/audio/audio_output_controller.h"
#include "media/audio/audio_sync_reader.h"
namespace content { namespace content {
...@@ -109,7 +109,7 @@ std::unique_ptr<media::AudioOutputDelegate> AudioOutputDelegateImpl::Create( ...@@ -109,7 +109,7 @@ std::unique_ptr<media::AudioOutputDelegate> AudioOutputDelegateImpl::Create(
media::mojom::AudioOutputStreamObserverPtr observer, media::mojom::AudioOutputStreamObserverPtr observer,
const std::string& output_device_id) { const std::string& output_device_id) {
auto socket = std::make_unique<base::CancelableSyncSocket>(); auto socket = std::make_unique<base::CancelableSyncSocket>();
auto reader = AudioSyncReader::Create( auto reader = media::AudioSyncReader::Create(
base::BindRepeating(&AudioOutputLogMessage, stream_id), params, base::BindRepeating(&AudioOutputLogMessage, stream_id), params,
socket.get()); socket.get());
if (!reader) if (!reader)
...@@ -122,7 +122,7 @@ std::unique_ptr<media::AudioOutputDelegate> AudioOutputDelegateImpl::Create( ...@@ -122,7 +122,7 @@ std::unique_ptr<media::AudioOutputDelegate> AudioOutputDelegateImpl::Create(
} }
AudioOutputDelegateImpl::AudioOutputDelegateImpl( AudioOutputDelegateImpl::AudioOutputDelegateImpl(
std::unique_ptr<AudioSyncReader> reader, std::unique_ptr<media::AudioSyncReader> reader,
std::unique_ptr<base::CancelableSyncSocket> foreign_socket, std::unique_ptr<base::CancelableSyncSocket> foreign_socket,
EventHandler* handler, EventHandler* handler,
media::AudioManager* audio_manager, media::AudioManager* audio_manager,
...@@ -181,7 +181,7 @@ AudioOutputDelegateImpl::~AudioOutputDelegateImpl() { ...@@ -181,7 +181,7 @@ AudioOutputDelegateImpl::~AudioOutputDelegateImpl() {
controller_->Close(base::BindOnce( controller_->Close(base::BindOnce(
[](AudioMirroringManager* mirroring_manager, [](AudioMirroringManager* mirroring_manager,
std::unique_ptr<ControllerEventHandler> event_handler, std::unique_ptr<ControllerEventHandler> event_handler,
std::unique_ptr<AudioSyncReader> reader, std::unique_ptr<media::AudioSyncReader> reader,
scoped_refptr<media::AudioOutputController> controller) { scoped_refptr<media::AudioOutputController> controller) {
// De-register the controller from the AudioMirroringManager now that // De-register the controller from the AudioMirroringManager now that
// the controller has closed the AudioOutputStream and shut itself down. // the controller has closed the AudioOutputStream and shut itself down.
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
namespace content { namespace content {
class AudioMirroringManager; class AudioMirroringManager;
class AudioSyncReader;
class MediaObserver; class MediaObserver;
} }
...@@ -25,6 +24,7 @@ class AudioLog; ...@@ -25,6 +24,7 @@ class AudioLog;
class AudioManager; class AudioManager;
class AudioOutputController; class AudioOutputController;
class AudioParameters; class AudioParameters;
class AudioSyncReader;
} }
namespace content { namespace content {
...@@ -48,7 +48,7 @@ class CONTENT_EXPORT AudioOutputDelegateImpl ...@@ -48,7 +48,7 @@ class CONTENT_EXPORT AudioOutputDelegateImpl
const std::string& output_device_id); const std::string& output_device_id);
AudioOutputDelegateImpl( AudioOutputDelegateImpl(
std::unique_ptr<AudioSyncReader> reader, std::unique_ptr<media::AudioSyncReader> reader,
std::unique_ptr<base::CancelableSyncSocket> foreign_socket, std::unique_ptr<base::CancelableSyncSocket> foreign_socket,
EventHandler* handler, EventHandler* handler,
media::AudioManager* audio_manager, media::AudioManager* audio_manager,
...@@ -88,7 +88,7 @@ class CONTENT_EXPORT AudioOutputDelegateImpl ...@@ -88,7 +88,7 @@ class CONTENT_EXPORT AudioOutputDelegateImpl
// |controller_event_handler_|, |reader_| and |mirroring_manager_| will // |controller_event_handler_|, |reader_| and |mirroring_manager_| will
// outlive |this|, see the destructor for details. // outlive |this|, see the destructor for details.
std::unique_ptr<ControllerEventHandler> controller_event_handler_; std::unique_ptr<ControllerEventHandler> controller_event_handler_;
std::unique_ptr<AudioSyncReader> reader_; std::unique_ptr<media::AudioSyncReader> reader_;
std::unique_ptr<base::CancelableSyncSocket> foreign_socket_; std::unique_ptr<base::CancelableSyncSocket> foreign_socket_;
AudioMirroringManager* mirroring_manager_; AudioMirroringManager* mirroring_manager_;
scoped_refptr<media::AudioOutputController> controller_; scoped_refptr<media::AudioOutputController> controller_;
......
...@@ -16,11 +16,11 @@ ...@@ -16,11 +16,11 @@
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/sync_socket.h" #include "base/sync_socket.h"
#include "content/browser/media/capture/audio_mirroring_manager.h" #include "content/browser/media/capture/audio_mirroring_manager.h"
#include "content/browser/renderer_host/media/audio_sync_reader.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/browser/media_observer.h" #include "content/public/browser/media_observer.h"
#include "content/public/test/test_browser_thread_bundle.h" #include "content/public/test/test_browser_thread_bundle.h"
#include "media/audio/audio_output_controller.h" #include "media/audio/audio_output_controller.h"
#include "media/audio/audio_sync_reader.h"
#include "media/audio/audio_thread_impl.h" #include "media/audio/audio_thread_impl.h"
#include "media/audio/fake_audio_log_factory.h" #include "media/audio/fake_audio_log_factory.h"
#include "media/audio/fake_audio_manager.h" #include "media/audio/fake_audio_manager.h"
...@@ -170,8 +170,8 @@ class AudioOutputDelegateTest : public testing::Test { ...@@ -170,8 +170,8 @@ class AudioOutputDelegateTest : public testing::Test {
{ {
auto socket = std::make_unique<base::CancelableSyncSocket>(); auto socket = std::make_unique<base::CancelableSyncSocket>();
auto reader = AudioSyncReader::Create(base::BindRepeating(&NoLog), auto reader = media::AudioSyncReader::Create(base::BindRepeating(&NoLog),
Params(), socket.get()); Params(), socket.get());
AudioOutputDelegateImpl delegate( AudioOutputDelegateImpl delegate(
std::move(reader), std::move(socket), &event_handler_, std::move(reader), std::move(socket), &event_handler_,
audio_manager_.get(), audio_log_.get(), audio_manager_.get(), audio_log_.get(),
...@@ -205,8 +205,8 @@ class AudioOutputDelegateTest : public testing::Test { ...@@ -205,8 +205,8 @@ class AudioOutputDelegateTest : public testing::Test {
{ {
auto socket = std::make_unique<base::CancelableSyncSocket>(); auto socket = std::make_unique<base::CancelableSyncSocket>();
auto reader = AudioSyncReader::Create(base::BindRepeating(&NoLog), auto reader = media::AudioSyncReader::Create(base::BindRepeating(&NoLog),
Params(), socket.get()); Params(), socket.get());
media::mojom::AudioOutputStreamObserverPtr observer_ptr; media::mojom::AudioOutputStreamObserverPtr observer_ptr;
auto observer_binding = CreateObserverBinding(&observer_ptr); auto observer_binding = CreateObserverBinding(&observer_ptr);
if (use_bound_observer) { if (use_bound_observer) {
...@@ -249,8 +249,8 @@ class AudioOutputDelegateTest : public testing::Test { ...@@ -249,8 +249,8 @@ class AudioOutputDelegateTest : public testing::Test {
{ {
auto socket = std::make_unique<base::CancelableSyncSocket>(); auto socket = std::make_unique<base::CancelableSyncSocket>();
auto reader = AudioSyncReader::Create(base::BindRepeating(&NoLog), auto reader = media::AudioSyncReader::Create(base::BindRepeating(&NoLog),
Params(), socket.get()); Params(), socket.get());
AudioOutputDelegateImpl delegate( AudioOutputDelegateImpl delegate(
std::move(reader), std::move(socket), &event_handler_, std::move(reader), std::move(socket), &event_handler_,
audio_manager_.get(), audio_log_.get(), audio_manager_.get(), audio_log_.get(),
...@@ -278,8 +278,8 @@ class AudioOutputDelegateTest : public testing::Test { ...@@ -278,8 +278,8 @@ class AudioOutputDelegateTest : public testing::Test {
{ {
auto socket = std::make_unique<base::CancelableSyncSocket>(); auto socket = std::make_unique<base::CancelableSyncSocket>();
auto reader = AudioSyncReader::Create(base::BindRepeating(&NoLog), auto reader = media::AudioSyncReader::Create(base::BindRepeating(&NoLog),
Params(), socket.get()); Params(), socket.get());
media::mojom::AudioOutputStreamObserverPtr observer_ptr; media::mojom::AudioOutputStreamObserverPtr observer_ptr;
auto observer_binding = CreateObserverBinding(&observer_ptr); auto observer_binding = CreateObserverBinding(&observer_ptr);
InSequence s; InSequence s;
...@@ -317,8 +317,8 @@ class AudioOutputDelegateTest : public testing::Test { ...@@ -317,8 +317,8 @@ class AudioOutputDelegateTest : public testing::Test {
{ {
auto socket = std::make_unique<base::CancelableSyncSocket>(); auto socket = std::make_unique<base::CancelableSyncSocket>();
auto reader = AudioSyncReader::Create(base::BindRepeating(&NoLog), auto reader = media::AudioSyncReader::Create(base::BindRepeating(&NoLog),
Params(), socket.get()); Params(), socket.get());
media::mojom::AudioOutputStreamObserverPtr observer_ptr; media::mojom::AudioOutputStreamObserverPtr observer_ptr;
auto observer_binding = CreateObserverBinding(&observer_ptr); auto observer_binding = CreateObserverBinding(&observer_ptr);
InSequence s; InSequence s;
...@@ -358,8 +358,8 @@ class AudioOutputDelegateTest : public testing::Test { ...@@ -358,8 +358,8 @@ class AudioOutputDelegateTest : public testing::Test {
DummyAudioOutputStream stream; DummyAudioOutputStream stream;
{ {
auto socket = std::make_unique<base::CancelableSyncSocket>(); auto socket = std::make_unique<base::CancelableSyncSocket>();
auto reader = AudioSyncReader::Create(base::BindRepeating(&NoLog), auto reader = media::AudioSyncReader::Create(base::BindRepeating(&NoLog),
Params(), socket.get()); Params(), socket.get());
AudioOutputDelegateImpl delegate( AudioOutputDelegateImpl delegate(
std::move(reader), std::move(socket), &event_handler_, std::move(reader), std::move(socket), &event_handler_,
audio_manager_.get(), audio_log_.get(), audio_manager_.get(), audio_log_.get(),
...@@ -388,8 +388,8 @@ class AudioOutputDelegateTest : public testing::Test { ...@@ -388,8 +388,8 @@ class AudioOutputDelegateTest : public testing::Test {
DummyAudioOutputStream stream; DummyAudioOutputStream stream;
{ {
auto socket = std::make_unique<base::CancelableSyncSocket>(); auto socket = std::make_unique<base::CancelableSyncSocket>();
auto reader = AudioSyncReader::Create(base::BindRepeating(&NoLog), auto reader = media::AudioSyncReader::Create(base::BindRepeating(&NoLog),
Params(), socket.get()); Params(), socket.get());
AudioOutputDelegateImpl delegate( AudioOutputDelegateImpl delegate(
std::move(reader), std::move(socket), &event_handler_, std::move(reader), std::move(socket), &event_handler_,
audio_manager_.get(), audio_log_.get(), audio_manager_.get(), audio_log_.get(),
...@@ -425,8 +425,8 @@ class AudioOutputDelegateTest : public testing::Test { ...@@ -425,8 +425,8 @@ class AudioOutputDelegateTest : public testing::Test {
DummyAudioOutputStream stream; DummyAudioOutputStream stream;
{ {
auto socket = std::make_unique<base::CancelableSyncSocket>(); auto socket = std::make_unique<base::CancelableSyncSocket>();
auto reader = AudioSyncReader::Create(base::BindRepeating(&NoLog), auto reader = media::AudioSyncReader::Create(base::BindRepeating(&NoLog),
Params(), socket.get()); Params(), socket.get());
AudioOutputDelegateImpl delegate( AudioOutputDelegateImpl delegate(
std::move(reader), std::move(socket), &event_handler_, std::move(reader), std::move(socket), &event_handler_,
audio_manager_.get(), audio_log_.get(), audio_manager_.get(), audio_log_.get(),
...@@ -467,8 +467,8 @@ class AudioOutputDelegateTest : public testing::Test { ...@@ -467,8 +467,8 @@ class AudioOutputDelegateTest : public testing::Test {
EXPECT_CALL(GetMockObserver(&observer_binding), DidStopPlaying()); EXPECT_CALL(GetMockObserver(&observer_binding), DidStopPlaying());
auto socket = std::make_unique<base::CancelableSyncSocket>(); auto socket = std::make_unique<base::CancelableSyncSocket>();
auto reader = AudioSyncReader::Create(base::BindRepeating(&NoLog), Params(), auto reader = media::AudioSyncReader::Create(base::BindRepeating(&NoLog),
socket.get()); Params(), socket.get());
auto delegate = std::make_unique<AudioOutputDelegateImpl>( auto delegate = std::make_unique<AudioOutputDelegateImpl>(
std::move(reader), std::move(socket), &event_handler_, std::move(reader), std::move(socket), &event_handler_,
audio_manager_.get(), audio_log_.get(), &mirroring_manager_, audio_manager_.get(), audio_log_.get(), &mirroring_manager_,
...@@ -500,8 +500,8 @@ class AudioOutputDelegateTest : public testing::Test { ...@@ -500,8 +500,8 @@ class AudioOutputDelegateTest : public testing::Test {
{ {
auto socket = std::make_unique<base::CancelableSyncSocket>(); auto socket = std::make_unique<base::CancelableSyncSocket>();
auto reader = AudioSyncReader::Create(base::BindRepeating(&NoLog), auto reader = media::AudioSyncReader::Create(base::BindRepeating(&NoLog),
Params(), socket.get()); Params(), socket.get());
AudioOutputDelegateImpl delegate( AudioOutputDelegateImpl delegate(
std::move(reader), std::move(socket), &event_handler_, std::move(reader), std::move(socket), &event_handler_,
audio_manager_.get(), audio_log_.get(), &mirroring_manager_, audio_manager_.get(), audio_log_.get(), &mirroring_manager_,
...@@ -526,8 +526,8 @@ class AudioOutputDelegateTest : public testing::Test { ...@@ -526,8 +526,8 @@ class AudioOutputDelegateTest : public testing::Test {
{ {
auto socket = std::make_unique<base::CancelableSyncSocket>(); auto socket = std::make_unique<base::CancelableSyncSocket>();
auto reader = AudioSyncReader::Create(base::BindRepeating(&NoLog), auto reader = media::AudioSyncReader::Create(base::BindRepeating(&NoLog),
Params(), socket.get()); Params(), socket.get());
AudioOutputDelegateImpl delegate( AudioOutputDelegateImpl delegate(
std::move(reader), std::move(socket), &event_handler_, std::move(reader), std::move(socket), &event_handler_,
audio_manager_.get(), audio_log_.get(), audio_manager_.get(), audio_log_.get(),
...@@ -558,8 +558,8 @@ class AudioOutputDelegateTest : public testing::Test { ...@@ -558,8 +558,8 @@ class AudioOutputDelegateTest : public testing::Test {
{ {
auto socket = std::make_unique<base::CancelableSyncSocket>(); auto socket = std::make_unique<base::CancelableSyncSocket>();
auto reader = AudioSyncReader::Create(base::BindRepeating(&NoLog), auto reader = media::AudioSyncReader::Create(base::BindRepeating(&NoLog),
Params(), socket.get()); Params(), socket.get());
AudioOutputDelegateImpl delegate( AudioOutputDelegateImpl delegate(
std::move(reader), std::move(socket), &event_handler_, std::move(reader), std::move(socket), &event_handler_,
audio_manager_.get(), audio_log_.get(), audio_manager_.get(), audio_log_.get(),
......
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#include "content/browser/renderer_host/media/audio_output_authorization_handler.h" #include "content/browser/renderer_host/media/audio_output_authorization_handler.h"
#include "content/browser/renderer_host/media/audio_output_delegate_impl.h" #include "content/browser/renderer_host/media/audio_output_delegate_impl.h"
#include "content/browser/renderer_host/media/audio_output_stream_observer_impl.h" #include "content/browser/renderer_host/media/audio_output_stream_observer_impl.h"
#include "content/browser/renderer_host/media/audio_sync_reader.h"
#include "content/browser/renderer_host/media/media_stream_manager.h" #include "content/browser/renderer_host/media/media_stream_manager.h"
#include "content/common/media/audio_messages.h" #include "content/common/media/audio_messages.h"
#include "content/public/browser/content_browser_client.h" #include "content/public/browser/content_browser_client.h"
......
...@@ -1384,11 +1384,9 @@ test("content_unittests") { ...@@ -1384,11 +1384,9 @@ test("content_unittests") {
"../browser/renderer_host/media/audio_input_device_manager_unittest.cc", "../browser/renderer_host/media/audio_input_device_manager_unittest.cc",
"../browser/renderer_host/media/audio_input_renderer_host_unittest.cc", "../browser/renderer_host/media/audio_input_renderer_host_unittest.cc",
"../browser/renderer_host/media/audio_input_stream_handle_unittest.cc", "../browser/renderer_host/media/audio_input_stream_handle_unittest.cc",
"../browser/renderer_host/media/audio_input_sync_writer_unittest.cc",
"../browser/renderer_host/media/audio_output_authorization_handler_unittest.cc", "../browser/renderer_host/media/audio_output_authorization_handler_unittest.cc",
"../browser/renderer_host/media/audio_output_delegate_impl_unittest.cc", "../browser/renderer_host/media/audio_output_delegate_impl_unittest.cc",
"../browser/renderer_host/media/audio_renderer_host_unittest.cc", "../browser/renderer_host/media/audio_renderer_host_unittest.cc",
"../browser/renderer_host/media/audio_sync_reader_unittest.cc",
"../browser/renderer_host/media/fake_video_capture_device_launcher.cc", "../browser/renderer_host/media/fake_video_capture_device_launcher.cc",
"../browser/renderer_host/media/fake_video_capture_device_launcher.h", "../browser/renderer_host/media/fake_video_capture_device_launcher.h",
"../browser/renderer_host/media/fake_video_capture_provider.cc", "../browser/renderer_host/media/fake_video_capture_provider.cc",
......
...@@ -93,6 +93,8 @@ source_set("audio") { ...@@ -93,6 +93,8 @@ source_set("audio") {
"audio_input_device.h", "audio_input_device.h",
"audio_input_ipc.cc", "audio_input_ipc.cc",
"audio_input_ipc.h", "audio_input_ipc.h",
"audio_input_sync_writer.cc",
"audio_input_sync_writer.h",
"audio_io.h", "audio_io.h",
"audio_manager.cc", "audio_manager.cc",
"audio_manager.h", "audio_manager.h",
...@@ -119,6 +121,8 @@ source_set("audio") { ...@@ -119,6 +121,8 @@ source_set("audio") {
"audio_power_monitor.cc", "audio_power_monitor.cc",
"audio_power_monitor.h", "audio_power_monitor.h",
"audio_source_diverter.h", "audio_source_diverter.h",
"audio_sync_reader.cc",
"audio_sync_reader.h",
"audio_system.cc", "audio_system.cc",
"audio_system.h", "audio_system.h",
"audio_system_helper.cc", "audio_system_helper.cc",
...@@ -376,6 +380,7 @@ source_set("unit_tests") { ...@@ -376,6 +380,7 @@ source_set("unit_tests") {
"audio_debug_recording_session_impl_unittest.cc", "audio_debug_recording_session_impl_unittest.cc",
"audio_input_controller_unittest.cc", "audio_input_controller_unittest.cc",
"audio_input_device_unittest.cc", "audio_input_device_unittest.cc",
"audio_input_sync_writer_unittest.cc",
"audio_input_unittest.cc", "audio_input_unittest.cc",
"audio_manager_unittest.cc", "audio_manager_unittest.cc",
"audio_output_controller_unittest.cc", "audio_output_controller_unittest.cc",
...@@ -383,6 +388,7 @@ source_set("unit_tests") { ...@@ -383,6 +388,7 @@ source_set("unit_tests") {
"audio_output_proxy_unittest.cc", "audio_output_proxy_unittest.cc",
"audio_output_unittest.cc", "audio_output_unittest.cc",
"audio_power_monitor_unittest.cc", "audio_power_monitor_unittest.cc",
"audio_sync_reader_unittest.cc",
"audio_system_impl_unittest.cc", "audio_system_impl_unittest.cc",
"power_observer_helper_unittest.cc", "power_observer_helper_unittest.cc",
"simple_sources_unittest.cc", "simple_sources_unittest.cc",
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "content/browser/renderer_host/media/audio_input_sync_writer.h" #include "media/audio/audio_input_sync_writer.h"
#include <algorithm> #include <algorithm>
#include <utility> #include <utility>
...@@ -14,11 +14,7 @@ ...@@ -14,11 +14,7 @@
#include "base/trace_event/trace_event.h" #include "base/trace_event/trace_event.h"
#include "build/build_config.h" #include "build/build_config.h"
using media::AudioBus; namespace media {
using media::AudioInputBuffer;
using media::AudioInputBufferParameters;
namespace content {
namespace { namespace {
...@@ -36,7 +32,7 @@ AudioInputSyncWriter::OverflowData::OverflowData( ...@@ -36,7 +32,7 @@ AudioInputSyncWriter::OverflowData::OverflowData(
double volume, double volume,
bool key_pressed, bool key_pressed,
base::TimeTicks capture_time, base::TimeTicks capture_time,
std::unique_ptr<media::AudioBus> audio_bus) std::unique_ptr<AudioBus> audio_bus)
: volume_(volume), : volume_(volume),
key_pressed_(key_pressed), key_pressed_(key_pressed),
capture_time_(capture_time), capture_time_(capture_time),
...@@ -52,7 +48,7 @@ AudioInputSyncWriter::AudioInputSyncWriter( ...@@ -52,7 +48,7 @@ AudioInputSyncWriter::AudioInputSyncWriter(
std::unique_ptr<base::SharedMemory> shared_memory, std::unique_ptr<base::SharedMemory> shared_memory,
std::unique_ptr<base::CancelableSyncSocket> socket, std::unique_ptr<base::CancelableSyncSocket> socket,
uint32_t shared_memory_segment_count, uint32_t shared_memory_segment_count,
const media::AudioParameters& params) const AudioParameters& params)
: log_callback_(std::move(log_callback)), : log_callback_(std::move(log_callback)),
socket_(std::move(socket)), socket_(std::move(socket)),
shared_memory_(std::move(shared_memory)), shared_memory_(std::move(shared_memory)),
...@@ -105,24 +101,22 @@ AudioInputSyncWriter::~AudioInputSyncWriter() { ...@@ -105,24 +101,22 @@ AudioInputSyncWriter::~AudioInputSyncWriter() {
write_to_fifo_count_ -= trailing_write_to_fifo_count_; write_to_fifo_count_ -= trailing_write_to_fifo_count_;
write_error_count_ -= trailing_write_error_count_; write_error_count_ -= trailing_write_error_count_;
write_count_ -= std::max(trailing_write_to_fifo_count_, write_count_ -=
trailing_write_error_count_); std::max(trailing_write_to_fifo_count_, trailing_write_error_count_);
if (write_count_ == 0) if (write_count_ == 0)
return; return;
UMA_HISTOGRAM_PERCENTAGE( UMA_HISTOGRAM_PERCENTAGE("Media.AudioCapturerMissedReadDeadline",
"Media.AudioCapturerMissedReadDeadline", 100.0 * write_to_fifo_count_ / write_count_);
100.0 * write_to_fifo_count_ / write_count_);
UMA_HISTOGRAM_PERCENTAGE( UMA_HISTOGRAM_PERCENTAGE("Media.AudioCapturerDroppedData",
"Media.AudioCapturerDroppedData", 100.0 * write_error_count_ / write_count_);
100.0 * write_error_count_ / write_count_);
UMA_HISTOGRAM_ENUMERATION("Media.AudioCapturerAudioGlitches", UMA_HISTOGRAM_ENUMERATION("Media.AudioCapturerAudioGlitches",
write_error_count_ == 0 ? write_error_count_ == 0
AUDIO_CAPTURER_NO_AUDIO_GLITCHES : ? AUDIO_CAPTURER_NO_AUDIO_GLITCHES
AUDIO_CAPTURER_AUDIO_GLITCHES, : AUDIO_CAPTURER_AUDIO_GLITCHES,
AUDIO_CAPTURER_AUDIO_GLITCHES_MAX + 1); AUDIO_CAPTURER_AUDIO_GLITCHES_MAX + 1);
std::string log_string = base::StringPrintf( std::string log_string = base::StringPrintf(
...@@ -135,15 +129,14 @@ AudioInputSyncWriter::~AudioInputSyncWriter() { ...@@ -135,15 +129,14 @@ AudioInputSyncWriter::~AudioInputSyncWriter() {
std::unique_ptr<AudioInputSyncWriter> AudioInputSyncWriter::Create( std::unique_ptr<AudioInputSyncWriter> AudioInputSyncWriter::Create(
base::RepeatingCallback<void(const std::string&)> log_callback, base::RepeatingCallback<void(const std::string&)> log_callback,
uint32_t shared_memory_segment_count, uint32_t shared_memory_segment_count,
const media::AudioParameters& params, const AudioParameters& params,
base::CancelableSyncSocket* foreign_socket) { base::CancelableSyncSocket* foreign_socket) {
// Having no shared memory doesn't make sense, so fail creation in that case. // Having no shared memory doesn't make sense, so fail creation in that case.
if (shared_memory_segment_count == 0) if (shared_memory_segment_count == 0)
return nullptr; return nullptr;
base::CheckedNumeric<uint32_t> requested_memory_size = base::CheckedNumeric<uint32_t> requested_memory_size =
media::ComputeAudioInputBufferSizeChecked(params, ComputeAudioInputBufferSizeChecked(params, shared_memory_segment_count);
shared_memory_segment_count);
if (!requested_memory_size.IsValid()) if (!requested_memory_size.IsValid())
return nullptr; return nullptr;
...@@ -185,8 +178,7 @@ void AudioInputSyncWriter::Write(const AudioBus* data, ...@@ -185,8 +178,7 @@ void AudioInputSyncWriter::Write(const AudioBus* data,
if (number_of_indices_available > 0) { if (number_of_indices_available > 0) {
auto indices = std::make_unique<uint32_t[]>(number_of_indices_available); auto indices = std::make_unique<uint32_t[]>(number_of_indices_available);
size_t bytes_received = socket_->Receive( size_t bytes_received = socket_->Receive(
&indices[0], &indices[0], number_of_indices_available * sizeof(indices[0]));
number_of_indices_available * sizeof(indices[0]));
CHECK_EQ(number_of_indices_available * sizeof(indices[0]), bytes_received); CHECK_EQ(number_of_indices_available * sizeof(indices[0]), bytes_received);
for (size_t i = 0; i < number_of_indices_available; ++i) { for (size_t i = 0; i < number_of_indices_available; ++i) {
++next_read_buffer_index_; ++next_read_buffer_index_;
...@@ -234,7 +226,6 @@ void AudioInputSyncWriter::Close() { ...@@ -234,7 +226,6 @@ void AudioInputSyncWriter::Close() {
socket_->Close(); socket_->Close();
} }
void AudioInputSyncWriter::CheckTimeSinceLastWrite() { void AudioInputSyncWriter::CheckTimeSinceLastWrite() {
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
static const base::TimeDelta kLogDelayThreadhold = static const base::TimeDelta kLogDelayThreadhold =
...@@ -245,7 +236,8 @@ void AudioInputSyncWriter::CheckTimeSinceLastWrite() { ...@@ -245,7 +236,8 @@ void AudioInputSyncWriter::CheckTimeSinceLastWrite() {
// This is the first time Write is called. // This is the first time Write is called.
base::TimeDelta interval = base::Time::Now() - creation_time_; base::TimeDelta interval = base::Time::Now() - creation_time_;
oss << "AISW::Write: audio input data received for the first time: delay " oss << "AISW::Write: audio input data received for the first time: delay "
"= " << interval.InMilliseconds() << "ms"; "= "
<< interval.InMilliseconds() << "ms";
} else { } else {
base::TimeDelta interval = base::Time::Now() - last_write_time_; base::TimeDelta interval = base::Time::Now() - last_write_time_;
if (interval > kLogDelayThreadhold) { if (interval > kLogDelayThreadhold) {
...@@ -389,4 +381,4 @@ bool AudioInputSyncWriter::SignalDataWrittenAndUpdateCounters() { ...@@ -389,4 +381,4 @@ bool AudioInputSyncWriter::SignalDataWrittenAndUpdateCounters() {
return true; return true;
} }
} // namespace content } // namespace media
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_AUDIO_INPUT_SYNC_WRITER_H_ #ifndef MEDIA_AUDIO_AUDIO_INPUT_SYNC_WRITER_H_
#define CONTENT_BROWSER_RENDERER_HOST_MEDIA_AUDIO_INPUT_SYNC_WRITER_H_ #define MEDIA_AUDIO_AUDIO_INPUT_SYNC_WRITER_H_
#include <stddef.h> #include <stddef.h>
#include <stdint.h> #include <stdint.h>
...@@ -18,10 +18,10 @@ ...@@ -18,10 +18,10 @@
#include "base/sync_socket.h" #include "base/sync_socket.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "content/common/content_export.h"
#include "media/audio/audio_input_controller.h" #include "media/audio/audio_input_controller.h"
#include "media/base/audio_bus.h" #include "media/base/audio_bus.h"
#include "media/base/audio_parameters.h" #include "media/base/audio_parameters.h"
#include "media/base/media_export.h"
#if defined(OS_POSIX) #if defined(OS_POSIX)
#include "base/file_descriptor_posix.h" #include "base/file_descriptor_posix.h"
...@@ -31,14 +31,14 @@ namespace base { ...@@ -31,14 +31,14 @@ namespace base {
class SharedMemory; class SharedMemory;
} }
namespace content { namespace media {
// A AudioInputController::SyncWriter implementation using SyncSocket. This // A AudioInputController::SyncWriter implementation using SyncSocket. This
// is used by AudioInputController to provide a low latency data source for // is used by AudioInputController to provide a low latency data source for
// transmitting audio packets between the browser process and the renderer // transmitting audio packets between the browser process and the renderer
// process. // process.
class CONTENT_EXPORT AudioInputSyncWriter class MEDIA_EXPORT AudioInputSyncWriter
: public media::AudioInputController::SyncWriter { : public AudioInputController::SyncWriter {
public: public:
// Maximum fifo size (|overflow_buses_| and |overflow_params_|) in number of // Maximum fifo size (|overflow_buses_| and |overflow_params_|) in number of
// AudioBuses. // AudioBuses.
...@@ -51,14 +51,14 @@ class CONTENT_EXPORT AudioInputSyncWriter ...@@ -51,14 +51,14 @@ class CONTENT_EXPORT AudioInputSyncWriter
std::unique_ptr<base::SharedMemory> shared_memory, std::unique_ptr<base::SharedMemory> shared_memory,
std::unique_ptr<base::CancelableSyncSocket> socket, std::unique_ptr<base::CancelableSyncSocket> socket,
uint32_t shared_memory_segment_count, uint32_t shared_memory_segment_count,
const media::AudioParameters& params); const AudioParameters& params);
~AudioInputSyncWriter() override; ~AudioInputSyncWriter() override;
static std::unique_ptr<AudioInputSyncWriter> Create( static std::unique_ptr<AudioInputSyncWriter> Create(
base::RepeatingCallback<void(const std::string&)> log_callback, base::RepeatingCallback<void(const std::string&)> log_callback,
uint32_t shared_memory_segment_count, uint32_t shared_memory_segment_count,
const media::AudioParameters& params, const AudioParameters& params,
base::CancelableSyncSocket* foreign_socket); base::CancelableSyncSocket* foreign_socket);
const base::SharedMemory* shared_memory() const { const base::SharedMemory* shared_memory() const {
...@@ -67,8 +67,8 @@ class CONTENT_EXPORT AudioInputSyncWriter ...@@ -67,8 +67,8 @@ class CONTENT_EXPORT AudioInputSyncWriter
size_t shared_memory_segment_count() const { return audio_buses_.size(); } size_t shared_memory_segment_count() const { return audio_buses_.size(); }
// media::AudioInputController::SyncWriter implementation. // AudioInputController::SyncWriter implementation.
void Write(const media::AudioBus* data, void Write(const AudioBus* data,
double volume, double volume,
bool key_pressed, bool key_pressed,
base::TimeTicks capture_time) override; base::TimeTicks capture_time) override;
...@@ -85,7 +85,7 @@ class CONTENT_EXPORT AudioInputSyncWriter ...@@ -85,7 +85,7 @@ class CONTENT_EXPORT AudioInputSyncWriter
// Push |data| and metadata to |audio_buffer_fifo_|. Returns true if // Push |data| and metadata to |audio_buffer_fifo_|. Returns true if
// successful. Logs error and returns false if the fifo already reached the // successful. Logs error and returns false if the fifo already reached the
// maximum size. // maximum size.
bool PushDataToFifo(const media::AudioBus* data, bool PushDataToFifo(const AudioBus* data,
double volume, double volume,
bool key_pressed, bool key_pressed,
base::TimeTicks capture_time); base::TimeTicks capture_time);
...@@ -163,7 +163,7 @@ class CONTENT_EXPORT AudioInputSyncWriter ...@@ -163,7 +163,7 @@ class CONTENT_EXPORT AudioInputSyncWriter
// Vector of audio buses allocated during construction and deleted in the // Vector of audio buses allocated during construction and deleted in the
// destructor. // destructor.
std::vector<std::unique_ptr<media::AudioBus>> audio_buses_; std::vector<std::unique_ptr<AudioBus>> audio_buses_;
// Fifo for audio that is used in case there isn't room in the shared memory. // Fifo for audio that is used in case there isn't room in the shared memory.
// This can for example happen under load when the consumer side is starved. // This can for example happen under load when the consumer side is starved.
...@@ -174,14 +174,14 @@ class CONTENT_EXPORT AudioInputSyncWriter ...@@ -174,14 +174,14 @@ class CONTENT_EXPORT AudioInputSyncWriter
OverflowData(double volume, OverflowData(double volume,
bool key_pressed, bool key_pressed,
base::TimeTicks capture_time, base::TimeTicks capture_time,
std::unique_ptr<media::AudioBus> audio_bus); std::unique_ptr<AudioBus> audio_bus);
~OverflowData(); ~OverflowData();
OverflowData(OverflowData&&); OverflowData(OverflowData&&);
OverflowData& operator=(OverflowData&& other); OverflowData& operator=(OverflowData&& other);
double volume_; double volume_;
bool key_pressed_; bool key_pressed_;
base::TimeTicks capture_time_; base::TimeTicks capture_time_;
std::unique_ptr<media::AudioBus> audio_bus_; std::unique_ptr<AudioBus> audio_bus_;
private: private:
DISALLOW_COPY_AND_ASSIGN(OverflowData); DISALLOW_COPY_AND_ASSIGN(OverflowData);
...@@ -192,6 +192,6 @@ class CONTENT_EXPORT AudioInputSyncWriter ...@@ -192,6 +192,6 @@ class CONTENT_EXPORT AudioInputSyncWriter
DISALLOW_IMPLICIT_CONSTRUCTORS(AudioInputSyncWriter); DISALLOW_IMPLICIT_CONSTRUCTORS(AudioInputSyncWriter);
}; };
} // namespace content } // namespace media
#endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_AUDIO_INPUT_SYNC_WRITER_H_ #endif // MEDIA_AUDIO_AUDIO_INPUT_SYNC_WRITER_H_
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "content/browser/renderer_host/media/audio_input_sync_writer.h" #include "media/audio/audio_input_sync_writer.h"
#include <stddef.h> #include <stddef.h>
#include <stdint.h> #include <stdint.h>
...@@ -27,10 +27,8 @@ ...@@ -27,10 +27,8 @@
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
using ::testing::_; using ::testing::_;
using media::AudioBus;
using media::AudioParameters;
namespace content { namespace media {
namespace { namespace {
...@@ -78,9 +76,7 @@ class MockCancelableSyncSocket : public base::CancelableSyncSocket { ...@@ -78,9 +76,7 @@ class MockCancelableSyncSocket : public base::CancelableSyncSocket {
return received * sizeof(uint32_t); return received * sizeof(uint32_t);
} }
size_t Peek() override { size_t Peek() override { return (reads_ - receives_) * sizeof(uint32_t); }
return (reads_ - receives_) * sizeof(uint32_t);
}
// Simluates reading |buffers| number of buffers from the ring buffer. // Simluates reading |buffers| number of buffers from the ring buffer.
void Read(int buffers) { void Read(int buffers) {
...@@ -113,10 +109,10 @@ class AudioInputSyncWriterTest : public testing::Test { ...@@ -113,10 +109,10 @@ class AudioInputSyncWriterTest : public testing::Test {
const int frames = sampling_frequency_hz / 100; // 10 ms const int frames = sampling_frequency_hz / 100; // 10 ms
const int bits_per_sample = 16; const int bits_per_sample = 16;
const AudioParameters audio_params( const AudioParameters audio_params(
AudioParameters::AUDIO_FAKE, media::CHANNEL_LAYOUT_MONO, AudioParameters::AUDIO_FAKE, CHANNEL_LAYOUT_MONO, sampling_frequency_hz,
sampling_frequency_hz, bits_per_sample, frames); bits_per_sample, frames);
const uint32_t data_size = const uint32_t data_size =
media::ComputeAudioInputBufferSize(audio_params, kSegments); ComputeAudioInputBufferSize(audio_params, kSegments);
auto shared_memory = std::make_unique<base::SharedMemory>(); auto shared_memory = std::make_unique<base::SharedMemory>();
EXPECT_TRUE(shared_memory->CreateAndMapAnonymous(data_size)); EXPECT_TRUE(shared_memory->CreateAndMapAnonymous(data_size));
...@@ -129,8 +125,7 @@ class AudioInputSyncWriterTest : public testing::Test { ...@@ -129,8 +125,7 @@ class AudioInputSyncWriterTest : public testing::Test {
audio_bus_ = AudioBus::Create(audio_params); audio_bus_ = AudioBus::Create(audio_params);
} }
~AudioInputSyncWriterTest() override { ~AudioInputSyncWriterTest() override {}
}
// Get total number of expected log calls. On non-Android we expect one log // Get total number of expected log calls. On non-Android we expect one log
// call at first Write() call, zero on Android. We also expect all call in the // call at first Write() call, zero on Android. We also expect all call in the
...@@ -221,9 +216,8 @@ TEST_F(AudioInputSyncWriterTest, FillAndEmptyRingBuffer) { ...@@ -221,9 +216,8 @@ TEST_F(AudioInputSyncWriterTest, FillAndEmptyRingBuffer) {
// Empty half of the ring buffer. // Empty half of the ring buffer.
const int buffers_to_read = kSegments / 2; const int buffers_to_read = kSegments / 2;
socket_->Read(buffers_to_read); socket_->Read(buffers_to_read);
EXPECT_TRUE(TestSocketAndFifoExpectations(kSegments - buffers_to_read, EXPECT_TRUE(TestSocketAndFifoExpectations(
buffers_to_read * sizeof(uint32_t), kSegments - buffers_to_read, buffers_to_read * sizeof(uint32_t), 0));
0));
// Fill up again. The first write should do receive until that queue is // Fill up again. The first write should do receive until that queue is
// empty. // empty.
...@@ -337,4 +331,4 @@ TEST_F(AudioInputSyncWriterTest, MultipleFillAndEmptyRingBufferAndPartOfFifo) { ...@@ -337,4 +331,4 @@ TEST_F(AudioInputSyncWriterTest, MultipleFillAndEmptyRingBufferAndPartOfFifo) {
EXPECT_TRUE(TestSocketAndFifoExpectations(0, 3 * sizeof(uint32_t), 0)); EXPECT_TRUE(TestSocketAndFifoExpectations(0, 3 * sizeof(uint32_t), 0));
} }
} // namespace content } // namespace media
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "content/browser/renderer_host/media/audio_sync_reader.h" #include "media/audio/audio_sync_reader.h"
#include <algorithm> #include <algorithm>
#include <limits> #include <limits>
...@@ -22,9 +22,6 @@ ...@@ -22,9 +22,6 @@
#include "media/base/audio_parameters.h" #include "media/base/audio_parameters.h"
#include "media/base/media_switches.h" #include "media/base/media_switches.h"
using media::AudioBus;
using media::AudioOutputBuffer;
namespace { namespace {
// Used to log if any audio glitches have been detected during an audio session. // Used to log if any audio glitches have been detected during an audio session.
...@@ -36,18 +33,17 @@ enum AudioGlitchResult { ...@@ -36,18 +33,17 @@ enum AudioGlitchResult {
}; };
void LogAudioGlitchResult(AudioGlitchResult result) { void LogAudioGlitchResult(AudioGlitchResult result) {
UMA_HISTOGRAM_ENUMERATION("Media.AudioRendererAudioGlitches", UMA_HISTOGRAM_ENUMERATION("Media.AudioRendererAudioGlitches", result,
result,
AUDIO_RENDERER_AUDIO_GLITCHES_MAX + 1); AUDIO_RENDERER_AUDIO_GLITCHES_MAX + 1);
} }
} // namespace } // namespace
namespace content { namespace media {
AudioSyncReader::AudioSyncReader( AudioSyncReader::AudioSyncReader(
base::RepeatingCallback<void(const std::string&)> log_callback, base::RepeatingCallback<void(const std::string&)> log_callback,
const media::AudioParameters& params, const AudioParameters& params,
std::unique_ptr<base::SharedMemory> shared_memory, std::unique_ptr<base::SharedMemory> shared_memory,
std::unique_ptr<base::CancelableSyncSocket> socket) std::unique_ptr<base::CancelableSyncSocket> socket)
: log_callback_(std::move(log_callback)), : log_callback_(std::move(log_callback)),
...@@ -71,7 +67,7 @@ AudioSyncReader::AudioSyncReader( ...@@ -71,7 +67,7 @@ AudioSyncReader::AudioSyncReader(
#endif #endif
buffer_index_(0) { buffer_index_(0) {
DCHECK_EQ(base::checked_cast<uint32_t>(shared_memory_->requested_size()), DCHECK_EQ(base::checked_cast<uint32_t>(shared_memory_->requested_size()),
media::ComputeAudioOutputBufferSize(params)); ComputeAudioOutputBufferSize(params));
AudioOutputBuffer* buffer = AudioOutputBuffer* buffer =
reinterpret_cast<AudioOutputBuffer*>(shared_memory_->memory()); reinterpret_cast<AudioOutputBuffer*>(shared_memory_->memory());
output_bus_ = AudioBus::WrapMemory(params, buffer->audio); output_bus_ = AudioBus::WrapMemory(params, buffer->audio);
...@@ -105,15 +101,15 @@ AudioSyncReader::~AudioSyncReader() { ...@@ -105,15 +101,15 @@ AudioSyncReader::~AudioSyncReader() {
// how many users might be running into audio glitches. // how many users might be running into audio glitches.
int percentage_missed = int percentage_missed =
100.0 * renderer_missed_callback_count_ / renderer_callback_count_; 100.0 * renderer_missed_callback_count_ / renderer_callback_count_;
UMA_HISTOGRAM_PERCENTAGE( UMA_HISTOGRAM_PERCENTAGE("Media.AudioRendererMissedDeadline",
"Media.AudioRendererMissedDeadline", percentage_missed); percentage_missed);
// Add more detailed information regarding detected audio glitches where // Add more detailed information regarding detected audio glitches where
// a non-zero value of |renderer_missed_callback_count_| is added to the // a non-zero value of |renderer_missed_callback_count_| is added to the
// AUDIO_RENDERER_AUDIO_GLITCHES bin. // AUDIO_RENDERER_AUDIO_GLITCHES bin.
renderer_missed_callback_count_ > 0 ? renderer_missed_callback_count_ > 0
LogAudioGlitchResult(AUDIO_RENDERER_AUDIO_GLITCHES) : ? LogAudioGlitchResult(AUDIO_RENDERER_AUDIO_GLITCHES)
LogAudioGlitchResult(AUDIO_RENDERER_NO_AUDIO_GLITCHES); : LogAudioGlitchResult(AUDIO_RENDERER_NO_AUDIO_GLITCHES);
log_callback_.Run(base::StringPrintf( log_callback_.Run(base::StringPrintf(
"ASR: number of detected audio glitches: %" PRIuS " out of %" PRIuS, "ASR: number of detected audio glitches: %" PRIuS " out of %" PRIuS,
renderer_missed_callback_count_, renderer_callback_count_)); renderer_missed_callback_count_, renderer_callback_count_));
...@@ -122,10 +118,10 @@ AudioSyncReader::~AudioSyncReader() { ...@@ -122,10 +118,10 @@ AudioSyncReader::~AudioSyncReader() {
// static // static
std::unique_ptr<AudioSyncReader> AudioSyncReader::Create( std::unique_ptr<AudioSyncReader> AudioSyncReader::Create(
base::RepeatingCallback<void(const std::string&)> log_callback, base::RepeatingCallback<void(const std::string&)> log_callback,
const media::AudioParameters& params, const AudioParameters& params,
base::CancelableSyncSocket* foreign_socket) { base::CancelableSyncSocket* foreign_socket) {
base::CheckedNumeric<size_t> memory_size = base::CheckedNumeric<size_t> memory_size =
media::ComputeAudioOutputBufferSizeChecked(params); ComputeAudioOutputBufferSizeChecked(params);
auto shared_memory = std::make_unique<base::SharedMemory>(); auto shared_memory = std::make_unique<base::SharedMemory>();
auto socket = std::make_unique<base::CancelableSyncSocket>(); auto socket = std::make_unique<base::CancelableSyncSocket>();
...@@ -141,7 +137,7 @@ std::unique_ptr<AudioSyncReader> AudioSyncReader::Create( ...@@ -141,7 +137,7 @@ std::unique_ptr<AudioSyncReader> AudioSyncReader::Create(
std::move(socket)); std::move(socket));
} }
// media::AudioOutputController::SyncReader implementations. // AudioOutputController::SyncReader implementations.
void AudioSyncReader::RequestMoreData(base::TimeDelta delay, void AudioSyncReader::RequestMoreData(base::TimeDelta delay,
base::TimeTicks delay_timestamp, base::TimeTicks delay_timestamp,
int prior_frames_skipped) { int prior_frames_skipped) {
...@@ -153,8 +149,8 @@ void AudioSyncReader::RequestMoreData(base::TimeDelta delay, ...@@ -153,8 +149,8 @@ void AudioSyncReader::RequestMoreData(base::TimeDelta delay,
// Increase the number of skipped frames stored in shared memory. // Increase the number of skipped frames stored in shared memory.
buffer->params.frames_skipped += prior_frames_skipped; buffer->params.frames_skipped += prior_frames_skipped;
buffer->params.delay = delay.InMicroseconds(); buffer->params.delay = delay.InMicroseconds();
buffer->params.delay_timestamp buffer->params.delay_timestamp =
= (delay_timestamp - base::TimeTicks()).InMicroseconds(); (delay_timestamp - base::TimeTicks()).InMicroseconds();
// Zero out the entire output buffer to avoid stuttering/repeating-buffers // Zero out the entire output buffer to avoid stuttering/repeating-buffers
// in the anomalous case if the renderer is unable to keep up with real-time. // in the anomalous case if the renderer is unable to keep up with real-time.
...@@ -281,12 +277,11 @@ bool AudioSyncReader::WaitUntilDataIsReady() { ...@@ -281,12 +277,11 @@ bool AudioSyncReader::WaitUntilDataIsReady() {
UMA_HISTOGRAM_CUSTOM_TIMES("Media.AudioOutputControllerDataNotReady", UMA_HISTOGRAM_CUSTOM_TIMES("Media.AudioOutputControllerDataNotReady",
time_since_start, time_since_start,
base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromMilliseconds(1),
base::TimeDelta::FromMilliseconds(1000), base::TimeDelta::FromMilliseconds(1000), 50);
50);
return false; return false;
} }
return true; return true;
} }
} // namespace content } // namespace media
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_AUDIO_SYNC_READER_H_ #ifndef MEDIA_AUDIO_AUDIO_SYNC_READER_H_
#define CONTENT_BROWSER_RENDERER_HOST_MEDIA_AUDIO_SYNC_READER_H_ #define MEDIA_AUDIO_AUDIO_SYNC_READER_H_
#include <stddef.h> #include <stddef.h>
#include <stdint.h> #include <stdint.h>
...@@ -17,9 +17,9 @@ ...@@ -17,9 +17,9 @@
#include "base/sync_socket.h" #include "base/sync_socket.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "content/common/content_export.h"
#include "media/audio/audio_output_controller.h" #include "media/audio/audio_output_controller.h"
#include "media/base/audio_bus.h" #include "media/base/audio_bus.h"
#include "media/base/media_export.h"
#if defined(OS_POSIX) #if defined(OS_POSIX)
#include "base/file_descriptor_posix.h" #include "base/file_descriptor_posix.h"
...@@ -29,20 +29,19 @@ namespace base { ...@@ -29,20 +29,19 @@ namespace base {
class SharedMemory; class SharedMemory;
} }
namespace content { namespace media {
// A AudioOutputController::SyncReader implementation using SyncSocket. This // A AudioOutputController::SyncReader implementation using SyncSocket. This
// is used by AudioOutputController to provide a low latency data source for // is used by AudioOutputController to provide a low latency data source for
// transmitting audio packets between the browser process and the renderer // transmitting audio packets between the browser process and the renderer
// process. // process.
class CONTENT_EXPORT AudioSyncReader class MEDIA_EXPORT AudioSyncReader : public AudioOutputController::SyncReader {
: public media::AudioOutputController::SyncReader {
public: public:
// Create() automatically initializes the AudioSyncReader correctly, // Create() automatically initializes the AudioSyncReader correctly,
// and should be strongly preferred over calling the constructor directly! // and should be strongly preferred over calling the constructor directly!
AudioSyncReader( AudioSyncReader(
base::RepeatingCallback<void(const std::string&)> log_callback, base::RepeatingCallback<void(const std::string&)> log_callback,
const media::AudioParameters& params, const AudioParameters& params,
std::unique_ptr<base::SharedMemory> shared_memory, std::unique_ptr<base::SharedMemory> shared_memory,
std::unique_ptr<base::CancelableSyncSocket> socket); std::unique_ptr<base::CancelableSyncSocket> socket);
...@@ -51,18 +50,18 @@ class CONTENT_EXPORT AudioSyncReader ...@@ -51,18 +50,18 @@ class CONTENT_EXPORT AudioSyncReader
// Returns null on failure. // Returns null on failure.
static std::unique_ptr<AudioSyncReader> Create( static std::unique_ptr<AudioSyncReader> Create(
base::RepeatingCallback<void(const std::string&)> log_callback, base::RepeatingCallback<void(const std::string&)> log_callback,
const media::AudioParameters& params, const AudioParameters& params,
base::CancelableSyncSocket* foreign_socket); base::CancelableSyncSocket* foreign_socket);
const base::SharedMemory* shared_memory() const { const base::SharedMemory* shared_memory() const {
return shared_memory_.get(); return shared_memory_.get();
} }
// media::AudioOutputController::SyncReader implementations. // AudioOutputController::SyncReader implementations.
void RequestMoreData(base::TimeDelta delay, void RequestMoreData(base::TimeDelta delay,
base::TimeTicks delay_timestamp, base::TimeTicks delay_timestamp,
int prior_frames_skipped) override; int prior_frames_skipped) override;
void Read(media::AudioBus* dest) override; void Read(AudioBus* dest) override;
void Close() override; void Close() override;
private: private:
...@@ -88,7 +87,7 @@ class CONTENT_EXPORT AudioSyncReader ...@@ -88,7 +87,7 @@ class CONTENT_EXPORT AudioSyncReader
const uint32_t output_bus_buffer_size_; const uint32_t output_bus_buffer_size_;
// Shared memory wrapper used for transferring audio data to Read() callers. // Shared memory wrapper used for transferring audio data to Read() callers.
std::unique_ptr<media::AudioBus> output_bus_; std::unique_ptr<AudioBus> output_bus_;
// Track the number of times the renderer missed its real-time deadline and // Track the number of times the renderer missed its real-time deadline and
// report a UMA stat during destruction. // report a UMA stat during destruction.
...@@ -107,6 +106,6 @@ class CONTENT_EXPORT AudioSyncReader ...@@ -107,6 +106,6 @@ class CONTENT_EXPORT AudioSyncReader
DISALLOW_COPY_AND_ASSIGN(AudioSyncReader); DISALLOW_COPY_AND_ASSIGN(AudioSyncReader);
}; };
} // namespace content } // namespace media
#endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_AUDIO_SYNC_READER_H_ #endif // MEDIA_AUDIO_AUDIO_SYNC_READER_H_
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "content/browser/renderer_host/media/audio_sync_reader.h" #include "media/audio/audio_sync_reader.h"
#include <limits> #include <limits>
#include <memory> #include <memory>
...@@ -21,13 +21,13 @@ ...@@ -21,13 +21,13 @@
using ::testing::TestWithParam; using ::testing::TestWithParam;
namespace content { namespace media {
void NoLog(const std::string&) {} void NoLog(const std::string&) {}
static_assert( static_assert(
std::is_unsigned<decltype( std::is_unsigned<
media::AudioOutputBufferParameters::bitstream_data_size)>::value, decltype(AudioOutputBufferParameters::bitstream_data_size)>::value,
"If |bitstream_data_size| is ever made signed, add tests for negative " "If |bitstream_data_size| is ever made signed, add tests for negative "
"buffer sizes."); "buffer sizes.");
...@@ -55,17 +55,17 @@ TEST_P(AudioSyncReaderBitstreamTest, BitstreamBufferOverflow_DoesNotWriteOOB) { ...@@ -55,17 +55,17 @@ TEST_P(AudioSyncReaderBitstreamTest, BitstreamBufferOverflow_DoesNotWriteOOB) {
const int kSampleRate = 44100; const int kSampleRate = 44100;
const int kBitsPerSample = 32; const int kBitsPerSample = 32;
const int kFramesPerBuffer = 1; const int kFramesPerBuffer = 1;
media::AudioParameters params(media::AudioParameters::AUDIO_BITSTREAM_AC3, AudioParameters params(AudioParameters::AUDIO_BITSTREAM_AC3,
media::CHANNEL_LAYOUT_STEREO, kSampleRate, CHANNEL_LAYOUT_STEREO, kSampleRate, kBitsPerSample,
kBitsPerSample, kFramesPerBuffer); kFramesPerBuffer);
auto socket = std::make_unique<base::CancelableSyncSocket>(); auto socket = std::make_unique<base::CancelableSyncSocket>();
std::unique_ptr<media::AudioBus> output_bus = media::AudioBus::Create(params); std::unique_ptr<AudioBus> output_bus = AudioBus::Create(params);
std::unique_ptr<AudioSyncReader> reader = AudioSyncReader::Create( std::unique_ptr<AudioSyncReader> reader = AudioSyncReader::Create(
base::BindRepeating(&NoLog), params, socket.get()); base::BindRepeating(&NoLog), params, socket.get());
const base::SharedMemory* shmem = reader->shared_memory(); const base::SharedMemory* shmem = reader->shared_memory();
media::AudioOutputBuffer* buffer = AudioOutputBuffer* buffer =
reinterpret_cast<media::AudioOutputBuffer*>(shmem->memory()); reinterpret_cast<AudioOutputBuffer*>(shmem->memory());
reader->RequestMoreData(base::TimeDelta(), base::TimeTicks(), 0); reader->RequestMoreData(base::TimeDelta(), base::TimeTicks(), 0);
uint32_t signal; uint32_t signal;
...@@ -80,16 +80,15 @@ TEST_P(AudioSyncReaderBitstreamTest, BitstreamBufferOverflow_DoesNotWriteOOB) { ...@@ -80,16 +80,15 @@ TEST_P(AudioSyncReaderBitstreamTest, BitstreamBufferOverflow_DoesNotWriteOOB) {
break; break;
case kNoOverflow: case kNoOverflow:
buffer->params.bitstream_data_size = buffer->params.bitstream_data_size =
shmem->mapped_size() - sizeof(media::AudioOutputBufferParameters); shmem->mapped_size() - sizeof(AudioOutputBufferParameters);
break; break;
case kOverflowByOne: case kOverflowByOne:
buffer->params.bitstream_data_size = buffer->params.bitstream_data_size =
shmem->mapped_size() - sizeof(media::AudioOutputBufferParameters) + 1; shmem->mapped_size() - sizeof(AudioOutputBufferParameters) + 1;
break; break;
case kOverflowByOneThousand: case kOverflowByOneThousand:
buffer->params.bitstream_data_size = buffer->params.bitstream_data_size =
shmem->mapped_size() - sizeof(media::AudioOutputBufferParameters) + shmem->mapped_size() - sizeof(AudioOutputBufferParameters) + 1000;
1000;
break; break;
case kOverflowByMax: case kOverflowByMax:
buffer->params.bitstream_data_size = std::numeric_limits<decltype( buffer->params.bitstream_data_size = std::numeric_limits<decltype(
...@@ -109,4 +108,4 @@ INSTANTIATE_TEST_CASE_P(AudioSyncReaderTest, ...@@ -109,4 +108,4 @@ INSTANTIATE_TEST_CASE_P(AudioSyncReaderTest,
AudioSyncReaderBitstreamTest, AudioSyncReaderBitstreamTest,
::testing::ValuesIn(overflow_test_case_values)); ::testing::ValuesIn(overflow_test_case_values));
} // namespace content } // namespace media
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment