Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(480)

Side by Side Diff: chromecast/media/audio/audio_manager.cc

Issue 1308153005: [Chromecast] Plumbs raw audio through CMA backend. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: changed default sample rate Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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/audio_manager.h"
6
7 #include "chromecast/base/task_runner_impl.h"
8 #include "chromecast/media/audio/audio_output_stream.h"
9 #include "chromecast/public/cast_media_shlib.h"
10 #include "chromecast/public/media/media_pipeline_backend.h"
11 #include "chromecast/public/media/media_pipeline_device_params.h"
12
13 namespace {
14 const int kDefaultSampleRate = 48000;
15
16 // Define bounds for the output buffer size (in frames).
17 // Note: These values are copied from AudioManagerPulse implementation.
18 static const int kMinimumOutputBufferSize = 512;
19 static const int kMaximumOutputBufferSize = 8192;
20 static const int kDefaultOutputBufferSize = 2048;
21 } // namespace
22
23 namespace chromecast {
24 namespace media {
25
26 AudioManager::AudioManager(::media::AudioLogFactory* audio_log_factory)
27 : AudioManagerBase(audio_log_factory) {}
28
29 AudioManager::~AudioManager() {
30 Shutdown();
31 }
32
33 bool AudioManager::HasAudioOutputDevices() {
34 return true;
35 }
36
37 bool AudioManager::HasAudioInputDevices() {
38 return false;
39 }
40
41 void AudioManager::ShowAudioInputSettings() {
42 LOG(WARNING) << "No support for input audio devices";
43 }
44
45 void AudioManager::GetAudioInputDeviceNames(
46 ::media::AudioDeviceNames* device_names) {
47 DCHECK(device_names->empty());
48 LOG(WARNING) << "No support for input audio devices";
49 }
50
51 ::media::AudioParameters AudioManager::GetInputStreamParameters(
52 const std::string& device_id) {
53 LOG(WARNING) << "No support for input audio devices";
54 // Need to send a valid AudioParameters object even when it will unused.
55 return ::media::AudioParameters(
56 ::media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
57 ::media::CHANNEL_LAYOUT_STEREO, 48000, 16, 1024);
58 }
59
60 scoped_ptr<MediaPipelineBackend> AudioManager::CreateMediaPipelineBackend() {
61 if (!audio_task_runner_)
62 audio_task_runner_.reset(new TaskRunnerImpl());
63
64 MediaPipelineDeviceParams device_params(
65 MediaPipelineDeviceParams::kModeIgnorePts, audio_task_runner_.get());
66 return scoped_ptr<MediaPipelineBackend>(
67 CastMediaShlib::CreateMediaPipelineBackend(device_params));
68 }
69
70 ::media::AudioOutputStream* AudioManager::MakeLinearOutputStream(
71 const ::media::AudioParameters& params) {
72 DCHECK_EQ(::media::AudioParameters::AUDIO_PCM_LINEAR, params.format());
73 return new AudioOutputStream(params, this);
74 }
75
76 ::media::AudioOutputStream* AudioManager::MakeLowLatencyOutputStream(
77 const ::media::AudioParameters& params,
78 const std::string& device_id) {
79 DCHECK_EQ(::media::AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format());
80 return new AudioOutputStream(params, this);
81 }
82
83 ::media::AudioInputStream* AudioManager::MakeLinearInputStream(
84 const ::media::AudioParameters& params,
85 const std::string& device_id) {
86 LOG(WARNING) << "No support for input audio devices";
87 return nullptr;
88 }
89
90 ::media::AudioInputStream* AudioManager::MakeLowLatencyInputStream(
91 const ::media::AudioParameters& params,
92 const std::string& device_id) {
93 LOG(WARNING) << "No support for input audio devices";
94 return nullptr;
95 }
96
97 ::media::AudioParameters AudioManager::GetPreferredOutputStreamParameters(
98 const std::string& output_device_id,
99 const ::media::AudioParameters& input_params) {
100 ::media::ChannelLayout channel_layout = ::media::CHANNEL_LAYOUT_STEREO;
101 int sample_rate = kDefaultSampleRate;
102 int buffer_size = kDefaultOutputBufferSize;
103 int bits_per_sample = 16;
104 if (input_params.IsValid()) {
105 // Do not change:
106 // - the channel layout
107 // - the number of bits per sample
108 // We support stereo only with 16 bits per sample.
109 sample_rate = input_params.sample_rate();
110 buffer_size = std::min(
111 kMaximumOutputBufferSize,
112 std::max(kMinimumOutputBufferSize, input_params.frames_per_buffer()));
113 }
114
115 ::media::AudioParameters output_params(
116 ::media::AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout,
117 sample_rate, bits_per_sample, buffer_size);
118 return output_params;
119 }
120
121 } // namespace media
122 } // namespace chromecast
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698