15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/audio/test_audio_input_controller_factory.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/audio/audio_io.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media {
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestAudioInputController::TestAudioInputController(
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TestAudioInputControllerFactory* factory,
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AudioManager* audio_manager,
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const AudioParameters& audio_parameters,
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EventHandler* event_handler,
153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    SyncWriter* sync_writer,
163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    UserInputMonitor* user_input_monitor)
173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    : AudioInputController(event_handler, sync_writer, user_input_monitor),
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      audio_parameters_(audio_parameters),
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      factory_(factory),
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      event_handler_(event_handler) {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  message_loop_ = audio_manager->GetMessageLoop();
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestAudioInputController::~TestAudioInputController() {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Inform the factory so that it allows creating new instances in future.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  factory_->OnTestAudioInputControllerDestroyed(this);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestAudioInputController::Record() {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (factory_->delegate_)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    factory_->delegate_->TestAudioControllerOpened(this);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestAudioInputController::Close(const base::Closure& closed_task) {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  message_loop_->PostTask(FROM_HERE, closed_task);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (factory_->delegate_)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    factory_->delegate_->TestAudioControllerClosed(this);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestAudioInputControllerFactory::TestAudioInputControllerFactory()
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : controller_(NULL),
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delegate_(NULL) {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestAudioInputControllerFactory::~TestAudioInputControllerFactory() {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!controller_);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AudioInputController* TestAudioInputControllerFactory::Create(
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AudioManager* audio_manager,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AudioInputController::EventHandler* event_handler,
523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    AudioParameters params,
533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    UserInputMonitor* user_input_monitor) {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!controller_);  // Only one test instance managed at a time.
553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  controller_ = new TestAudioInputController(
563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      this, audio_manager, params, event_handler, NULL, user_input_monitor);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return controller_;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestAudioInputControllerFactory::OnTestAudioInputControllerDestroyed(
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TestAudioInputController* controller) {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_EQ(controller_, controller);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  controller_ = NULL;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace media
67