Skip to content

Commit 4712933

Browse files
committed
Add DeviceAddress's AudioDevice support
1 parent 73476f9 commit 4712933

File tree

5 files changed

+81
-4
lines changed

5 files changed

+81
-4
lines changed

include/AndroidHalTypes.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ struct DeviceAddress
7676
} address;
7777
std::string busAddress;
7878
std::string rSubmixAddress;
79-
DeviceAddress():device(AUDIO_DEVICE_OUT_DEFAULT){
79+
DeviceAddress(AudioDevice device = AUDIO_DEVICE_OUT_DEFAULT):device(device){
8080
address.alsa.card = 0;
8181
address.alsa.device = 0;
8282
};

include/DeviceAddressHelper.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ class AndroidDeviceAddressHelper
3131
static std::tuple<AudioDevice, std::string, std::string> getTupleFromDeviceAddreess(DeviceAddress deviceAddress);
3232

3333
public:
34+
static std::string getDeviceString(AudioDevice device);
35+
static AudioDevice getDeviceFromDeviceString(std::string deviceString);
36+
3437
static std::string getStringFromDeviceAddr(DeviceAddress deviceAddress);
3538
static DeviceAddress getDeviceAddrFromString(std::string deviceAddrString);
3639

src/AndroidHalEffectFactory.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ std::shared_ptr<IEffect> IEffectsFactory::createEffect(Uuid uuid, AudioSession s
4848
pEffect->associateFilter( AudioEffectHelper::getFilterInstance( uuid ) );
4949
}
5050

51+
// TODO: AUDIO_SESSION_DEVICE should be applied to PipedSink...
5152
switch(session){
5253
case AUDIO_SESSION_DEVICE:
5354
case AUDIO_SESSION_OUTPUT_STAGE:

src/AndroidHalHelper.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,17 @@ void AndroidHalHelper::initialize(std::string filterPlugInPath, std::string uuid
5959
std::make_shared<ILoudnessEnhancerEffect>();
6060
std::make_shared<IDownmixEffect>();
6161
std::make_shared<IVisualizerEffect>();
62+
63+
// TODO: Attach Sink, Source
64+
SourceSinkManager::attachSink(AUDIO_DEVICE_OUT_DEFAULT, std::make_shared<Sink>() );
65+
SourceSinkManager::attachSource(AUDIO_DEVICE_IN_DEFAULT, std::make_shared<Source>() );
6266
}
6367

6468
void AndroidHalHelper::terminate(void)
6569
{
70+
// TODO: Detach Sink, Source
71+
72+
6673
// --- terminate EffectHelper
6774
AudioEffectHelper::terminate();
6875

src/DeviceAddressHelper.cpp

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616

1717
#include "DeviceAddressHelper.hpp"
18+
#include "StringTokenizer.hpp"
1819
#include <sstream>
1920

2021
std::string AndroidDeviceAddressHelper::getMacAddressString(MacAddress macAddress)
@@ -28,26 +29,91 @@ std::string AndroidDeviceAddressHelper::getMacAddressString(MacAddress macAddres
2829
return ss.str();
2930
}
3031

32+
struct stDeviceString
33+
{
34+
AudioDevice device;
35+
std::string description;
36+
stDeviceString(AudioDevice device, std::string description):device(device), description(description){};
37+
};
38+
39+
const static stDeviceString tbl[] =
40+
{
41+
stDeviceString(AUDIO_DEVICE_OUT_DEFAULT, "AUDIO_DEVICE_OUT_DEFAULT"),
42+
stDeviceString(AUDIO_DEVICE_OUT_LINE, "AUDIO_DEVICE_OUT_LINE"),
43+
stDeviceString(AUDIO_DEVICE_OUT_SPDIF, "AUDIO_DEVICE_OUT_SPDIF"),
44+
stDeviceString(AUDIO_DEVICE_OUT_HDMI_EARC, "AUDIO_DEVICE_OUT_HDMI_EARC"),
45+
stDeviceString(AUDIO_DEVICE_OUT_HDMI_ARC, "AUDIO_DEVICE_OUT_HDMI_ARC"),
46+
stDeviceString(AUDIO_DEVICE_OUT_USB_DEVICE, "AUDIO_DEVICE_OUT_USB_DEVICE"),
47+
stDeviceString(AUDIO_DEVICE_OUT_HDMI, "AUDIO_DEVICE_OUT_HDMI"),
48+
stDeviceString(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP, "AUDIO_DEVICE_OUT_BLUETOOTH_A2DP"),
49+
stDeviceString(AUDIO_DEVICE_OUT_SPEAKER, "AUDIO_DEVICE_OUT_SPEAKER"),
50+
stDeviceString(AUDIO_DEVICE_OUT_BLUETOOTH_SCO, "AUDIO_DEVICE_OUT_BLUETOOTH_SCO"),
51+
stDeviceString(AUDIO_DEVICE_IN_BUILTIN_MIC, "AUDIO_DEVICE_IN_BUILTIN_MIC"),
52+
stDeviceString(AUDIO_DEVICE_IN_HDMI, "AUDIO_DEVICE_IN_HDMI"),
53+
stDeviceString(AUDIO_DEVICE_IN_USB_DEVICE, "AUDIO_DEVICE_IN_USB_DEVICE"),
54+
stDeviceString(AUDIO_DEVICE_IN_LINE, "AUDIO_DEVICE_IN_LINE"),
55+
stDeviceString(AUDIO_DEVICE_IN_DEFAULT, "AUDIO_DEVICE_IN_DEFAULT"),
56+
stDeviceString(AUDIO_DEVICE_IN_DEFAULT, ""),
57+
};
58+
59+
60+
std::string AndroidDeviceAddressHelper::getDeviceString(AudioDevice device)
61+
{
62+
std::string result;
63+
64+
for( int i=0; tbl[i].device != AUDIO_DEVICE_IN_DEFAULT && !tbl[i].description.empty(); ){
65+
if( tbl[i].device == device ){
66+
result = tbl[i].description;
67+
break;
68+
}
69+
}
70+
71+
return result;
72+
}
73+
74+
AudioDevice AndroidDeviceAddressHelper::getDeviceFromDeviceString(std::string deviceString)
75+
{
76+
AudioDevice result = AUDIO_DEVICE_OUT_DEFAULT;
77+
78+
for( int i=0; tbl[i].device != AUDIO_DEVICE_IN_DEFAULT && !tbl[i].description.empty(); ){
79+
if( tbl[i].description == deviceString ){
80+
result = tbl[i].device;
81+
break;
82+
}
83+
}
84+
85+
return result;
86+
}
87+
3188
std::tuple<AudioDevice, std::string, std::string> AndroidDeviceAddressHelper::getTupleFromDeviceAddreess(DeviceAddress deviceAddress)
3289
{
3390
return std::make_tuple( deviceAddress.device, getMacAddressString(deviceAddress.address.mac), deviceAddress.busAddress );
3491
}
3592

3693
std::string AndroidDeviceAddressHelper::getStringFromDeviceAddr(DeviceAddress deviceAddress)
3794
{
38-
// TODO : FIX this
3995
auto&& id = getTupleFromDeviceAddreess(deviceAddress);
4096
if( !mDeviceConnected.contains( id ) ){
4197
mDeviceConnected.insert_or_assign( id, std::make_tuple(deviceAddress, false) );
4298
}
4399

44-
return deviceAddress.busAddress;
100+
// TODO : FIX this. Add the other identifier such as MacAddress, etc.
101+
return deviceAddress.busAddress.empty() ? getDeviceString(deviceAddress.device) : getDeviceString(deviceAddress.device) + ":" + deviceAddress.busAddress;
45102
}
46103

47104
DeviceAddress AndroidDeviceAddressHelper::getDeviceAddrFromString(std::string deviceAddrString)
48105
{
49106
DeviceAddress deviceAddr;
50-
deviceAddr.busAddress = deviceAddrString;
107+
StringTokenizer tok(deviceAddrString, ":");
108+
if( tok.hasNext() ){
109+
deviceAddr.device = getDeviceFromDeviceString( tok.getNext() );
110+
if( tok.hasNext() ){
111+
deviceAddr.busAddress = tok.getNext();
112+
}
113+
} else {
114+
deviceAddr.device = getDeviceFromDeviceString( deviceAddrString );
115+
}
116+
51117
return deviceAddr;
52118
}
53119

0 commit comments

Comments
 (0)