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

Side by Side Diff: chromeos/dbus/cras_audio_client.cc

Issue 14314002: Implement new audio handler which talks to the new audio dbus apis. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chromeos/dbus/cras_audio_client.h" 5 #include "chromeos/dbus/cras_audio_client.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "dbus/bus.h" 8 #include "dbus/bus.h"
9 #include "dbus/message.h" 9 #include "dbus/message.h"
10 #include "dbus/object_path.h" 10 #include "dbus/object_path.h"
(...skipping 19 matching lines...) Expand all
30 // The CrasAudioClient implementation used in production. 30 // The CrasAudioClient implementation used in production.
31 class CrasAudioClientImpl : public CrasAudioClient { 31 class CrasAudioClientImpl : public CrasAudioClient {
32 public: 32 public:
33 explicit CrasAudioClientImpl(dbus::Bus* bus) 33 explicit CrasAudioClientImpl(dbus::Bus* bus)
34 : cras_proxy_(NULL), 34 : cras_proxy_(NULL),
35 weak_ptr_factory_(this) { 35 weak_ptr_factory_(this) {
36 cras_proxy_ = bus->GetObjectProxy( 36 cras_proxy_ = bus->GetObjectProxy(
37 cras::kCrasServiceName, 37 cras::kCrasServiceName,
38 dbus::ObjectPath(cras::kCrasServicePath)); 38 dbus::ObjectPath(cras::kCrasServicePath));
39 39
40 // Monitor NameOwnerChanged signal.
41 cras_proxy_->SetNameOwnerChangedCallback(
42 base::Bind(&CrasAudioClientImpl::NameOwnerChangedReceived,
43 weak_ptr_factory_.GetWeakPtr()));
44
40 // Monitor the D-Bus signal for output volume change. 45 // Monitor the D-Bus signal for output volume change.
41 cras_proxy_->ConnectToSignal( 46 cras_proxy_->ConnectToSignal(
42 cras::kCrasControlInterface, 47 cras::kCrasControlInterface,
43 cras::kOutputVolumeChanged, 48 cras::kOutputVolumeChanged,
44 base::Bind(&CrasAudioClientImpl::OutputVolumeChangedReceived, 49 base::Bind(&CrasAudioClientImpl::OutputVolumeChangedReceived,
45 weak_ptr_factory_.GetWeakPtr()), 50 weak_ptr_factory_.GetWeakPtr()),
46 base::Bind(&CrasAudioClientImpl::SignalConnected, 51 base::Bind(&CrasAudioClientImpl::SignalConnected,
47 weak_ptr_factory_.GetWeakPtr())); 52 weak_ptr_factory_.GetWeakPtr()));
48 53
49 // Monitor the D-Bus signal for output mute change. 54 // Monitor the D-Bus signal for output mute change.
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 210
206 private: 211 private:
207 // Called when the cras signal is initially connected. 212 // Called when the cras signal is initially connected.
208 void SignalConnected(const std::string& interface_name, 213 void SignalConnected(const std::string& interface_name,
209 const std::string& signal_name, 214 const std::string& signal_name,
210 bool success) { 215 bool success) {
211 LOG_IF(ERROR, !success) 216 LOG_IF(ERROR, !success)
212 << "Failed to connect to cras signal:" << signal_name; 217 << "Failed to connect to cras signal:" << signal_name;
213 } 218 }
214 219
220 void NameOwnerChangedReceived(dbus::Signal* signal) {
221 FOR_EACH_OBSERVER(Observer, observers_, AudioClientRestarted());
222 }
223
215 // Called when a OutputVolumeChanged signal is received. 224 // Called when a OutputVolumeChanged signal is received.
216 void OutputVolumeChangedReceived(dbus::Signal* signal) { 225 void OutputVolumeChangedReceived(dbus::Signal* signal) {
217 dbus::MessageReader reader(signal); 226 dbus::MessageReader reader(signal);
218 int32 volume; 227 int32 volume;
219 if (!reader.PopInt32(&volume)) { 228 if (!reader.PopInt32(&volume)) {
220 LOG(ERROR) << "Error reading signal from cras:" 229 LOG(ERROR) << "Error reading signal from cras:"
221 << signal->ToString(); 230 << signal->ToString();
222 } 231 }
223 FOR_EACH_OBSERVER(Observer, observers_, OutputVolumeChanged(volume)); 232 FOR_EACH_OBSERVER(Observer, observers_, OutputVolumeChanged(volume));
224 } 233 }
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 callback.Run(volume_state, success); 311 callback.Run(volume_state, success);
303 } 312 }
304 313
305 void OnGetNodes(const GetNodesCallback& callback, 314 void OnGetNodes(const GetNodesCallback& callback,
306 dbus::Response* response) { 315 dbus::Response* response) {
307 bool success = true; 316 bool success = true;
308 AudioNodeList node_list; 317 AudioNodeList node_list;
309 if (response) { 318 if (response) {
310 dbus::MessageReader response_reader(response); 319 dbus::MessageReader response_reader(response);
311 dbus::MessageReader array_reader(response); 320 dbus::MessageReader array_reader(response);
312 while(response_reader.HasMoreData()) { 321 while (response_reader.HasMoreData()) {
313 if (!response_reader.PopArray(&array_reader)) { 322 if (!response_reader.PopArray(&array_reader)) {
314 success = false; 323 success = false;
315 LOG(ERROR) << "Error reading response from cras: " 324 LOG(ERROR) << "Error reading response from cras: "
316 << response->ToString(); 325 << response->ToString();
317 break; 326 break;
318 } 327 }
319 328
320 AudioNode node; 329 AudioNode node;
321 if (!GetAudioNode(response, &array_reader, &node)) { 330 if (!GetAudioNode(response, &array_reader, &node)) {
322 success = false; 331 success = false;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 390
382 DISALLOW_COPY_AND_ASSIGN(CrasAudioClientImpl); 391 DISALLOW_COPY_AND_ASSIGN(CrasAudioClientImpl);
383 }; 392 };
384 393
385 // The CrasAudioClient implementation used on Linux desktop, 394 // The CrasAudioClient implementation used on Linux desktop,
386 // which does nothing. 395 // which does nothing.
387 class CrasAudioClientStubImpl : public CrasAudioClient { 396 class CrasAudioClientStubImpl : public CrasAudioClient {
388 public: 397 public:
389 CrasAudioClientStubImpl() { 398 CrasAudioClientStubImpl() {
390 VLOG(1) << "CrasAudioClientStubImpl is created"; 399 VLOG(1) << "CrasAudioClientStubImpl is created";
400
401 // Fake audio nodes.
402 AudioNode node_1;
403 node_1.is_input = false;
404 node_1.id = 10001;
405 node_1.device_name = "Fake Audio Output";
406 node_1.type = "INTERNAL_SPEAKER";
407 node_1.name = "Internal Speaker";
408 node_1.active = true;
409
410 AudioNode node_2;
411 node_2.is_input = true;
412 node_2.id = 10002;
413 node_2.device_name = "Fake Audio Input";
414 node_2.type = "INTERNAL_MIC";
415 node_2.name = "Internal Mic";
416 node_2.active = true;
417
418 node_list_.push_back(node_1);
419 node_list_.push_back(node_2);
391 } 420 }
392 virtual ~CrasAudioClientStubImpl() {} 421 virtual ~CrasAudioClientStubImpl() {
422 }
393 423
394 // CrasAudioClient overrides: 424 // CrasAudioClient overrides:
395 // TODO(jennyz): Implement the observers and callbacks in the stub for UI 425 // TODO(jennyz): Implement the observers and callbacks in the stub for UI
396 // testing. 426 // testing.
397 virtual void AddObserver(Observer* observer) OVERRIDE {} 427 virtual void AddObserver(Observer* observer) OVERRIDE {
398 virtual void RemoveObserver(Observer* observer) OVERRIDE {} 428 observers_.AddObserver(observer);
399 virtual bool HasObserver(Observer* observer) OVERRIDE { return false; } 429 }
430
431 virtual void RemoveObserver(Observer* observer) OVERRIDE {
432 observers_.RemoveObserver(observer);
433 }
434
435 virtual bool HasObserver(Observer* observer) OVERRIDE {
436 return observers_.HasObserver(observer);
437 }
438
400 virtual void GetVolumeState(const GetVolumeStateCallback& callback) OVERRIDE { 439 virtual void GetVolumeState(const GetVolumeStateCallback& callback) OVERRIDE {
440 callback.Run(volume_state_, true);
401 } 441 }
402 virtual void GetNodes(const GetNodesCallback& callback)OVERRIDE {} 442
403 virtual void SetOutputVolume(int32 volume) OVERRIDE {} 443 virtual void GetNodes(const GetNodesCallback& callback)OVERRIDE {
404 virtual void SetOutputMute(bool mute_on) OVERRIDE {} 444 callback.Run(node_list_, true);
405 virtual void SetInputGain(int32 input_gain) OVERRIDE {} 445 }
406 virtual void SetInputMute(bool mute_on) OVERRIDE {} 446
407 virtual void SetActiveOutputNode(uint64 node_id) OVERRIDE {} 447 virtual void SetOutputVolume(int32 volume) OVERRIDE {
408 virtual void SetActiveInputNode(uint64 node_id) OVERRIDE {} 448 LOG(ERROR) << "CrasAudioClientStubImpl::SetOutputVolume volume=" << volume;
stevenjb 2013/04/17 01:25:12 ->VLOG here and below
jennyz 2013/04/18 01:21:19 Done.
449 volume_state_.output_volume = volume;
450 FOR_EACH_OBSERVER(Observer,
451 observers_,
452 OutputVolumeChanged(volume_state_.output_volume));
453 }
454
455 virtual void SetOutputMute(bool mute_on) OVERRIDE {
456 LOG(ERROR) << "CrasAudioClientStubImpl::SetOutputMute, mute_on=" << mute_on;
457 volume_state_.output_mute = mute_on;
458 FOR_EACH_OBSERVER(Observer,
459 observers_,
460 OutputMuteChanged(volume_state_.output_mute));
461 }
462
463 virtual void SetInputGain(int32 input_gain) OVERRIDE {
464 volume_state_.input_gain = input_gain;
465 FOR_EACH_OBSERVER(Observer,
466 observers_,
467 InputGainChanged(volume_state_.input_gain));
468 }
469
470 virtual void SetInputMute(bool mute_on) OVERRIDE {
471 volume_state_.input_mute = mute_on;
472 FOR_EACH_OBSERVER(Observer,
473 observers_,
474 InputMuteChanged(volume_state_.input_mute));
475 }
476
477 virtual void SetActiveOutputNode(uint64 node_id) OVERRIDE {
478 active_output_node_id_ = node_id;
479 FOR_EACH_OBSERVER(Observer,
480 observers_,
481 ActiveOutputNodeChanged(node_id));
482 }
483
484 virtual void SetActiveInputNode(uint64 node_id) OVERRIDE {
485 active_input_node_id_ = node_id;
486 FOR_EACH_OBSERVER(Observer,
487 observers_,
488 ActiveInputNodeChanged(node_id));
489 }
409 490
410 private: 491 private:
492 VolumeState volume_state_;
493 AudioNodeList node_list_;
494 uint64 active_input_node_id_;
495 uint64 active_output_node_id_;
496 ObserverList<Observer> observers_;
497
411 DISALLOW_COPY_AND_ASSIGN(CrasAudioClientStubImpl); 498 DISALLOW_COPY_AND_ASSIGN(CrasAudioClientStubImpl);
412 }; 499 };
413 500
414 CrasAudioClient::Observer::~Observer() { 501 CrasAudioClient::Observer::~Observer() {
415 } 502 }
416 503
504 void CrasAudioClient::Observer::AudioClientRestarted() {
505 }
506
417 void CrasAudioClient::Observer::OutputVolumeChanged(int32 volume) { 507 void CrasAudioClient::Observer::OutputVolumeChanged(int32 volume) {
418 } 508 }
419 509
420 void CrasAudioClient::Observer::OutputMuteChanged(bool mute_on) { 510 void CrasAudioClient::Observer::OutputMuteChanged(bool mute_on) {
421 } 511 }
422 512
423 void CrasAudioClient::Observer::InputGainChanged(int gain) { 513 void CrasAudioClient::Observer::InputGainChanged(int gain) {
424 } 514 }
425 515
426 void CrasAudioClient::Observer::InputMuteChanged(bool mute_on) { 516 void CrasAudioClient::Observer::InputMuteChanged(bool mute_on) {
(...skipping 19 matching lines...) Expand all
446 DBusClientImplementationType type, 536 DBusClientImplementationType type,
447 dbus::Bus* bus) { 537 dbus::Bus* bus) {
448 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) { 538 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) {
449 return new CrasAudioClientImpl(bus); 539 return new CrasAudioClientImpl(bus);
450 } 540 }
451 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); 541 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type);
452 return new CrasAudioClientStubImpl(); 542 return new CrasAudioClientStubImpl();
453 } 543 }
454 544
455 } // namespace chromeos 545 } // namespace chromeos
OLDNEW
« chromeos/audio/cras_audio_handler.cc ('K') | « chromeos/dbus/cras_audio_client.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698