1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/audio/fake_audio_manager.h"
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace media {
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace {
10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)const int kDefaultInputBufferSize = 1024;
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)const int kDefaultSampleRate = 48000;
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}  // namespace
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)FakeAudioManager::FakeAudioManager(AudioLogFactory* audio_log_factory)
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    : AudioManagerBase(audio_log_factory) {}
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)FakeAudioManager::~FakeAudioManager() {
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Shutdown();
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Implementation of AudioManager.
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool FakeAudioManager::HasAudioOutputDevices() { return false; }
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool FakeAudioManager::HasAudioInputDevices() { return false; }
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Implementation of AudioManagerBase.
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)AudioOutputStream* FakeAudioManager::MakeLinearOutputStream(
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const AudioParameters& params) {
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return FakeAudioOutputStream::MakeFakeStream(this, params);
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)AudioOutputStream* FakeAudioManager::MakeLowLatencyOutputStream(
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const AudioParameters& params,
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::string& device_id) {
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return FakeAudioOutputStream::MakeFakeStream(this, params);
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)AudioInputStream* FakeAudioManager::MakeLinearInputStream(
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const AudioParameters& params,
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const std::string& device_id) {
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return FakeAudioInputStream::MakeFakeStream(this, params);
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)AudioInputStream* FakeAudioManager::MakeLowLatencyInputStream(
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const AudioParameters& params,
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const std::string& device_id) {
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return FakeAudioInputStream::MakeFakeStream(this, params);
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)AudioParameters FakeAudioManager::GetPreferredOutputStreamParameters(
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const std::string& output_device_id,
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const AudioParameters& input_params) {
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static const int kDefaultOutputBufferSize = 2048;
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static const int kDefaultSampleRate = 48000;
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  int sample_rate = kDefaultSampleRate;
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  int buffer_size = kDefaultOutputBufferSize;
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  int bits_per_sample = 16;
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (input_params.IsValid()) {
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    sample_rate = input_params.sample_rate();
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    bits_per_sample = input_params.bits_per_sample();
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    channel_layout = input_params.channel_layout();
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    buffer_size = std::min(input_params.frames_per_buffer(), buffer_size);
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return AudioParameters(
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout,
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      sample_rate, bits_per_sample, buffer_size, AudioParameters::NO_EFFECTS);
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)AudioParameters FakeAudioManager::GetInputStreamParameters(
74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const std::string& device_id) {
75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return AudioParameters(
76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO,
77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      kDefaultSampleRate, 16, kDefaultInputBufferSize);
78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace media
81