OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "chromecast/media/audio/cast_audio_manager.h" |
| 6 |
| 7 #include "base/logging.h" |
| 8 #include "chromecast/base/task_runner_impl.h" |
| 9 #include "chromecast/media/audio/chromecast_device_audio_output_stream.h" |
| 10 #include "chromecast/media/base/converters.h" |
| 11 #include "chromecast/public/media/cast_audio_output_device.h" |
| 12 #include "chromecast/public/media/cast_audio_output_stream.h" |
| 13 |
| 14 namespace chromecast { |
| 15 namespace media { |
| 16 |
| 17 namespace { |
| 18 |
| 19 // Default parameters to provide for input stream. |
| 20 const int kDefaultBitsPerSample = 16; |
| 21 const int kDefaultInputBufferSize = 1024; |
| 22 const int kDefaultSampleRate = 32000; |
| 23 |
| 24 } // namespace |
| 25 |
| 26 CastAudioManager::CastAudioManager(::media::AudioLogFactory* audio_log_factory, |
| 27 CastAudioOutputDevice* output_device) |
| 28 : ::media::AudioManagerBase(audio_log_factory), |
| 29 audio_output_device_(output_device) { |
| 30 CHECK(audio_output_device_); |
| 31 SetMaxOutputStreamsAllowed( |
| 32 audio_output_device_->GetMaximumOutputStreamsAllowed()); |
| 33 } |
| 34 |
| 35 CastAudioManager::~CastAudioManager() { |
| 36 Shutdown(); |
| 37 } |
| 38 |
| 39 bool CastAudioManager::HasAudioOutputDevices() { |
| 40 return true; |
| 41 } |
| 42 |
| 43 bool CastAudioManager::HasAudioInputDevices() { |
| 44 return false; |
| 45 } |
| 46 |
| 47 void CastAudioManager::ShowAudioInputSettings() { |
| 48 LOG(WARNING) << "No support for input audio devices."; |
| 49 } |
| 50 |
| 51 void CastAudioManager::GetAudioInputDeviceNames( |
| 52 ::media::AudioDeviceNames* device_names) { |
| 53 LOG(WARNING) << "No support for input audio devices."; |
| 54 } |
| 55 |
| 56 ::media::AudioParameters CastAudioManager::GetInputStreamParameters( |
| 57 const std::string& device_id) { |
| 58 // TODO(slan): Providing the invalid parameters impacts also the output |
| 59 // parameter selection during WebAudio playback (and it fails). (b/20630187). |
| 60 LOG(WARNING) << "No support for input audio devices."; |
| 61 return ::media::AudioParameters( |
| 62 ::media::AudioParameters::AUDIO_PCM_LOW_LATENCY, |
| 63 ::media::CHANNEL_LAYOUT_STEREO, |
| 64 kDefaultSampleRate, |
| 65 kDefaultBitsPerSample, |
| 66 kDefaultInputBufferSize); |
| 67 } |
| 68 |
| 69 ::media::AudioInputStream* CastAudioManager::MakeLinearInputStream( |
| 70 const ::media::AudioParameters& params, |
| 71 const std::string& device_id) { |
| 72 LOG(WARNING) << "No support for input audio devices"; |
| 73 return nullptr; |
| 74 } |
| 75 |
| 76 ::media::AudioInputStream* CastAudioManager::MakeLowLatencyInputStream( |
| 77 const ::media::AudioParameters& params, |
| 78 const std::string& device_id) { |
| 79 LOG(WARNING) << "No support for input audio devices"; |
| 80 return nullptr; |
| 81 } |
| 82 |
| 83 ::media::AudioOutputStream* CastAudioManager::MakeLinearOutputStream( |
| 84 const ::media::AudioParameters& params) { |
| 85 DCHECK_EQ(::media::AudioParameters::AUDIO_PCM_LINEAR, params.format()); |
| 86 return MakeCastOutputStream(params); |
| 87 } |
| 88 |
| 89 ::media::AudioOutputStream* CastAudioManager::MakeLowLatencyOutputStream( |
| 90 const ::media::AudioParameters& params, |
| 91 const std::string& device_id) { |
| 92 DCHECK_EQ(::media::AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format()); |
| 93 return MakeCastOutputStream(params); |
| 94 } |
| 95 |
| 96 ::media::AudioParameters CastAudioManager::GetPreferredOutputStreamParameters( |
| 97 const std::string& output_device_id, |
| 98 const ::media::AudioParameters& suggested) { |
| 99 // Convert the suggested params into the chromecast variety. |
| 100 AudioParameters params = FromChromiumParams(suggested); |
| 101 |
| 102 // Get the preferences. Convert them back to Chromium params and return. |
| 103 params = audio_output_device_->GetPreferredOutputStreamParameters(params); |
| 104 return FromChromecastParams(params); |
| 105 } |
| 106 |
| 107 ::media::AudioOutputStream* CastAudioManager::MakeCastOutputStream( |
| 108 const ::media::AudioParameters& params) { |
| 109 // Get the Cast output stream. |
| 110 AudioParameters chromecast_params = FromChromiumParams(params); |
| 111 CastAudioOutputStream* stream = audio_output_device_->MakeOutputStream( |
| 112 chromecast_params, new TaskRunnerImpl()); |
| 113 if (!stream) |
| 114 return nullptr; |
| 115 |
| 116 // Note: The caller of this method does not own the returned instance of the |
| 117 // stream. The stream MUST call AudioManagerBase::ReleaseOutputStream() as |
| 118 // the last line of its Close() method to avoid a leak. This pattern is not |
| 119 // favorable, but is currently required by AudioManagerBase. Please see |
| 120 // ChromecastDeviceAudioOutputStream::Close() before changing this behavior. |
| 121 return new ChromecastDeviceAudioOutputStream(stream, chromecast_params, this); |
| 122 } |
| 123 |
| 124 } // namespace media |
| 125 } // namespace chromecast |
OLD | NEW |