Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2014 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 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_AUDIO_SINK_H_ | |
| 6 #define DEVICE_BLUETOOTH_BLUETOOTH_AUDIO_SINK_H_ | |
| 7 | |
| 8 #include <string> | |
| 9 #include <vector> | |
| 10 | |
| 11 #include "base/callback.h" | |
| 12 #include "base/memory/ref_counted.h" | |
| 13 #include "base/memory/scoped_ptr.h" | |
| 14 #include "dbus/file_descriptor.h" | |
|
armansito
2014/12/02 19:20:20
We can't have dbus includes here. The code wouldn'
| |
| 15 | |
| 16 namespace device { | |
| 17 | |
| 18 class BluetoothAdapter; | |
| 19 | |
| 20 // BluetoothAudioSink represents a local audio sink where a remote device can | |
|
armansito
2014/12/02 19:20:19
In general you shouldn't refer to any BlueZ concep
Miao
2014/12/03 20:06:38
Done.
| |
| 21 // stream audio data. BluetoothAudioSink manages the creation/deletion of a BT | |
| 22 // Media Endpoint and delivers the file descriptor from the BT Media Transport | |
| 23 // which attaches to that endpoint. | |
|
armansito
2014/12/02 19:20:19
I wouldn't go into BlueZ API details here. This is
Miao
2014/12/03 20:06:38
Done.
| |
| 24 // An user applications can obtain a pointer to a BluetoothAudioSink object via | |
|
armansito
2014/12/02 19:20:19
"An user applications" -> "User applications" ?
Miao
2014/12/03 20:06:38
Done.
| |
| 25 // the interface provided by BluetoothAdapter. The validity of | |
| 26 // BluetoothAudioSink's endopint object depends on whether BluetoothAdapter is | |
|
armansito
2014/12/02 19:20:20
s/endopint/endpoint/
Though I wouldn't mention en
Miao
2014/12/03 20:06:38
Done.
| |
| 27 // present and whether it is powered. Therefore, BlueotoothAudioSink has to keep | |
| 28 // track of the changes on both BluetoothAdapter's state and the connection to | |
| 29 // the remote device. | |
|
armansito
2014/12/02 19:20:19
Get rid of the last sentence. These are implementa
Miao
2014/12/03 20:06:38
Done.
| |
| 30 class BluetoothAudioSink : public base::RefCounted<BluetoothAudioSink> { | |
| 31 public: | |
| 32 // Possible values indicating the connection states between the | |
| 33 // BluetoothAudioSink and the remote device. Since a BluetoothAudioSink object | |
| 34 // depends on the BluetoothAdapter object's state, the BluetoothAudioSink has | |
| 35 // to unregister its endpoint if either present or power of the | |
| 36 // BluetoothAdapter object's changes. | |
|
armansito
2014/12/02 19:20:19
You don't need the second sentence. Just saying "P
Miao
2014/12/03 20:06:38
Done.
| |
| 37 enum AudioSinkState { | |
| 38 STATE_INVALID, // BluetoothAdapter not presented or not powered. | |
| 39 STATE_DISCONNECTED, // Not connected. | |
| 40 STATE_IDLE, // Connected but not streaming. | |
| 41 STATE_PENDING, // Connected, streaming but not acquired. | |
| 42 STATE_ACTIVE, // Connected, streaming and acquired. | |
| 43 }; | |
| 44 | |
| 45 // Used to configure an BT Media Endpoint. | |
|
armansito
2014/12/02 19:20:20
Don't mention anything about BlueZ APIs. Just say
Miao
2014/12/03 20:06:38
Done.
| |
| 46 struct AudioSinkOptions { | |
|
armansito
2014/12/02 19:20:20
I'd just call this "struct Options". BluetoothAudi
Miao
2014/12/03 20:06:38
Done.
| |
| 47 AudioSinkOptions(); | |
| 48 ~AudioSinkOptions(); | |
| 49 | |
| 50 scoped_ptr<uint8_t> codec; | |
| 51 scoped_ptr<std::vector<uint8_t>> capabilities; | |
|
armansito
2014/12/02 19:20:20
Aren't codec and capabilities mandatory? I would r
Miao
2014/12/03 20:06:38
Done.
Codec and capabilities are mandatory. In the
| |
| 52 }; | |
| 53 | |
| 54 // Interface for observing changes from Bluetooth Audio Sinks. | |
|
armansito
2014/12/02 19:20:20
from a BluetoothAudioSink
Miao
2014/12/03 20:06:38
Done.
| |
| 55 class Observer { | |
| 56 public: | |
| 57 virtual ~Observer() {} | |
| 58 | |
| 59 // Called when the state of the BluetoothAudioSink object is changed. | |
| 60 // |audio_sink| indicates the object being changed, and |audio_sink_state| | |
| 61 // indicates the new state of that object. | |
| 62 virtual void BluetoothAudioSinkStateChanged( | |
| 63 BluetoothAudioSink* audio_sink, | |
| 64 const BluetoothAudioSink::AudioSinkState& audio_sink_state) = 0; | |
|
armansito
2014/12/02 19:20:20
Pass enum by value. No need for a const reference
Miao
2014/12/03 20:06:38
Done.
| |
| 65 | |
| 66 // Called when the volume of the BluetoothAudioSink object is changed. | |
| 67 // |audio_sink| indicates the object being changed, and |audio_sink_volume| | |
| 68 // indicates the new volume level of that object. | |
| 69 virtual void BluetoothAudioSinkVolumeChanged( | |
| 70 BluetoothAudioSink* audio_sink, | |
| 71 uint16_t audio_sink_volume) = 0; | |
| 72 | |
| 73 // Called when the file descriptor of the BluetoothAudioSink object is | |
| 74 // ready to be read. |fd| is the file descriptor, where |read_mtu| and | |
| 75 // |write_mtu| are the maximum transport units for reading and writing. | |
| 76 virtual void BluetoothAudioSinkFdAvailable(BluetoothAudioSink* audio_sink, | |
| 77 const dbus::FileDescriptor& fd, | |
|
armansito
2014/12/02 19:20:20
Don't expose dbus objects here since the whole poi
| |
| 78 uint16_t read_mtu, | |
| 79 uint16_t write_mtu) = 0; | |
| 80 }; | |
| 81 | |
| 82 // The EndpointAcuiredCallback is used to pass the scoped_refptr of | |
|
armansito
2014/12/02 19:20:19
Acuired -> Acquired
Also you called it EndpointRe
Miao
2014/12/03 20:06:38
Done.
| |
| 83 // a BluetoothAudioSink object while a BT Media Endpoint is successfully | |
|
armansito
2014/12/02 19:20:19
Don't mention BlueZ concepts.
Miao
2014/12/03 20:06:38
Done.
| |
| 84 // created and registered. | |
| 85 typedef base::Callback<void( | |
| 86 scoped_refptr<BluetoothAudioSink>)> EndpointRegisteredCallback; | |
|
armansito
2014/12/02 19:20:20
I would call this "AudioSinkRegisteredCallback" si
Miao
2014/12/03 20:06:38
Done.
| |
| 87 | |
| 88 // The EndpointDeletedCallback is used to handle the clean-up while a BT Media | |
|
armansito
2014/12/02 19:20:20
EndpointUnregisteredCallback?
Miao
2014/12/03 20:06:38
Done.
| |
| 89 // Endpoint is unregistered. | |
| 90 typedef base::Callback<void()> EndpointUnregisteredCallback; | |
|
armansito
2014/12/02 19:20:20
This typedef is unnecessary since you're method ca
Miao
2014/12/03 20:06:38
Done.
| |
| 91 | |
| 92 // The ErrorCallback is used for the methods that can fail in which case it | |
| 93 // can fail. | |
|
armansito
2014/12/02 19:20:19
"in which case it can fail" -> "in which case it i
Miao
2014/12/03 20:06:38
Done.
Miao
2014/12/03 20:06:38
Done.
| |
| 94 typedef base::Callback<void(const std::string& error_message)> ErrorCallback; | |
| 95 | |
| 96 virtual ~BluetoothAudioSink(); | |
| 97 | |
| 98 // Adds and removes a observer for events on the BluetoothAudioSink object. If | |
| 99 // monitoring multiple audio sinks, check the |audio_sink| parameter of | |
| 100 // observer methods to determine which audio sink is issuing the event. | |
| 101 virtual void AddObserver(Observer* observer) = 0; | |
| 102 virtual void RemoveObserver(Observer* observer) = 0; | |
| 103 | |
| 104 // Registers a BT Media Endpoint. User applications can use |options| to | |
| 105 // configure a new BT Media Endpoint which will bound to the audio sink. | |
| 106 // |callback| will be executed if the endpoint is successfully created, | |
| 107 // otherwise |error_callback| will be called. | |
| 108 virtual void RegisterEndpoint(const AudioSinkOptions& options, | |
| 109 const EndpointRegisteredCallback& callback, | |
| 110 const ErrorCallback& error_callback) = 0; | |
|
armansito
2014/12/02 19:20:19
I thought we were going to have this method in Blu
Miao
2014/12/03 20:06:38
Sorry about the confusion, there is no doubt that
| |
| 111 | |
| 112 // Unregister the BT Media Endpoint if there is one. |callback| should handle | |
| 113 // the clean-up after the endpoint is deleted successfully, otherwise | |
| 114 // |error_callback| will be called. | |
| 115 virtual void UnregisterEndpoint(const EndpointUnregisteredCallback& callback, | |
|
armansito
2014/12/02 19:20:19
I think just base::Closure is sufficient.
armansito
2014/12/02 19:20:20
Should we call this method just "Unregister"? I do
Miao
2014/12/03 20:06:38
Done.
| |
| 116 const ErrorCallback& error_callback) = 0; | |
| 117 | |
| 118 protected: | |
| 119 BluetoothAudioSink(); | |
| 120 | |
| 121 private: | |
| 122 DISALLOW_COPY_AND_ASSIGN(BluetoothAudioSink); | |
| 123 }; | |
| 124 | |
| 125 } // namespace device | |
| 126 | |
| 127 #endif // DEVICE_BLUETOOTH_BLUETOOTH_AUDIO_SINK_H_ | |
| OLD | NEW |