Chromium Code Reviews| 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/cast_audio_output_device.h" | |
| 12 #include "chromecast/public/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 chromecast::TaskRunnerImpl()); | |
|
halliwell
2015/07/29 15:06:57
nit: chromecast:: unnecessary.
slan
2015/07/29 19:51:55
Removed.
| |
| 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 |