Audio HAL: Add optional Destination to SinkMetadata
Currently this is used to indicate the output device when the input stream is from an intermediate processing module like MSD. Bug: 120859615 Test: make Change-Id: I60bac5c24a263ab0b8965e9dbf9514445e88c270
This commit is contained in:
parent
1bf027f79d
commit
1503a98940
8 changed files with 48 additions and 33 deletions
|
@ -20,6 +20,7 @@ hidl_interface {
|
|||
"android.hardware.audio.common@5.0",
|
||||
"android.hardware.audio.effect@5.0",
|
||||
"android.hidl.base@1.0",
|
||||
"android.hidl.safe_union@1.0",
|
||||
],
|
||||
types: [
|
||||
"AudioDrain",
|
||||
|
@ -28,18 +29,13 @@ hidl_interface {
|
|||
"AudioMicrophoneCoordinate",
|
||||
"AudioMicrophoneDirectionality",
|
||||
"AudioMicrophoneLocation",
|
||||
"DeviceAddress",
|
||||
"MessageQueueFlagBits",
|
||||
"MicrophoneInfo",
|
||||
"MmapBufferFlag",
|
||||
"MmapBufferInfo",
|
||||
"MmapPosition",
|
||||
"ParameterValue",
|
||||
"PlaybackTrackMetadata",
|
||||
"RecordTrackMetadata",
|
||||
"Result",
|
||||
"SinkMetadata",
|
||||
"SourceMetadata",
|
||||
"TimeSpec",
|
||||
],
|
||||
gen_java: false,
|
||||
|
|
|
@ -133,7 +133,7 @@ interface IDevice {
|
|||
* @param config stream configuration.
|
||||
* @param flags additional flags.
|
||||
* @param sinkMetadata Description of the audio that is suggested by the client.
|
||||
* May be used by implementations to configure hardware effects.
|
||||
* May be used by implementations to configure processing effects.
|
||||
* @return retval operation completion status.
|
||||
* @return inStream in case of success, created input stream.
|
||||
* @return suggestedConfig in case of invalid parameters, suggested config.
|
||||
|
|
|
@ -49,34 +49,11 @@ struct TimeSpec {
|
|||
uint64_t tvNSec; // nanoseconds
|
||||
};
|
||||
|
||||
/**
|
||||
* IEEE 802 MAC address.
|
||||
*/
|
||||
typedef uint8_t[6] MacAddress;
|
||||
|
||||
struct ParameterValue {
|
||||
string key;
|
||||
string value;
|
||||
};
|
||||
|
||||
/**
|
||||
* Specifies a device in case when several devices of the same type
|
||||
* can be connected (e.g. BT A2DP, USB).
|
||||
*/
|
||||
struct DeviceAddress {
|
||||
AudioDevice device; // discriminator
|
||||
union Address {
|
||||
MacAddress mac; // used for BLUETOOTH_A2DP_*
|
||||
uint8_t[4] ipv4; // used for IP
|
||||
struct Alsa {
|
||||
int32_t card;
|
||||
int32_t device;
|
||||
} alsa; // used for USB_*
|
||||
} address;
|
||||
string busAddress; // used for BUS
|
||||
string rSubmixAddress; // used for REMOTE_SUBMIX
|
||||
};
|
||||
|
||||
enum MmapBufferFlag : uint32_t {
|
||||
NONE = 0x0,
|
||||
/**
|
||||
|
|
|
@ -9,6 +9,9 @@ hidl_interface {
|
|||
srcs: [
|
||||
"types.hal",
|
||||
],
|
||||
interfaces: [
|
||||
"android.hidl.safe_union@1.0",
|
||||
],
|
||||
types: [
|
||||
"AudioChannelMask",
|
||||
"AudioConfig",
|
||||
|
@ -38,7 +41,12 @@ hidl_interface {
|
|||
"AudioSource",
|
||||
"AudioStreamType",
|
||||
"AudioUsage",
|
||||
"DeviceAddress",
|
||||
"FixedChannelCount",
|
||||
"PlaybackTrackMetadata",
|
||||
"RecordTrackMetadata",
|
||||
"SinkMetadata",
|
||||
"SourceMetadata",
|
||||
"ThreadInfo",
|
||||
"Uuid",
|
||||
],
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
|
||||
package android.hardware.audio.common@5.0;
|
||||
|
||||
import android.hidl.safe_union@1.0;
|
||||
|
||||
/*
|
||||
*
|
||||
* IDs and Handles
|
||||
|
@ -601,6 +603,29 @@ enum AudioDevice : uint32_t {
|
|||
// Note that the 2.0 IN_ALL* have been moved to helper functions
|
||||
};
|
||||
|
||||
/**
|
||||
* IEEE 802 MAC address.
|
||||
*/
|
||||
typedef uint8_t[6] MacAddress;
|
||||
|
||||
/**
|
||||
* Specifies a device address in case when several devices of the same type
|
||||
* can be connected (e.g. BT A2DP, USB).
|
||||
*/
|
||||
struct DeviceAddress {
|
||||
AudioDevice device; // discriminator
|
||||
union Address {
|
||||
MacAddress mac; // used for BLUETOOTH_A2DP_*
|
||||
uint8_t[4] ipv4; // used for IP
|
||||
struct Alsa {
|
||||
int32_t card;
|
||||
int32_t device;
|
||||
} alsa; // used for USB_*
|
||||
} address;
|
||||
string busAddress; // used for BUS
|
||||
string rSubmixAddress; // used for REMOTE_SUBMIX
|
||||
};
|
||||
|
||||
/**
|
||||
* The audio output flags serve two purposes:
|
||||
*
|
||||
|
@ -748,9 +773,17 @@ struct RecordTrackMetadata {
|
|||
* Must not be negative.
|
||||
*/
|
||||
float gain;
|
||||
/**
|
||||
* Indicates the destination of an input stream, can be left unspecified.
|
||||
*/
|
||||
safe_union Destination {
|
||||
Monostate unspecified;
|
||||
DeviceAddress device;
|
||||
};
|
||||
Destination destination;
|
||||
};
|
||||
|
||||
/** Metadatas of the source of a StreamIn. */
|
||||
/** Metadatas of the sink of a StreamIn. */
|
||||
struct SinkMetadata {
|
||||
vec<RecordTrackMetadata> tracks;
|
||||
};
|
||||
|
|
|
@ -64,7 +64,7 @@ TEST_F(AudioPrimaryHidlTest, GetMicrophonesTest) {
|
|||
config.sampleRateHz = 8000;
|
||||
config.format = AudioFormat::PCM_16_BIT;
|
||||
auto flags = hidl_bitfield<AudioInputFlag>(AudioInputFlag::NONE);
|
||||
const SinkMetadata initMetadata = {{{AudioSource::MIC, 1 /* gain */}}};
|
||||
const SinkMetadata initMetadata = {{{.source = AudioSource::MIC, .gain = 1}}};
|
||||
EventFlag* efGroup;
|
||||
for (auto microphone : microphones) {
|
||||
if (microphone.deviceAddress.device != AudioDevice::IN_BUILTIN_MIC) {
|
||||
|
@ -200,7 +200,7 @@ TEST_P(InputStreamTest, updateSinkMetadata) {
|
|||
// Test all possible track configuration
|
||||
for (AudioSource source : range) {
|
||||
for (float volume : {0.0, 0.5, 1.0}) {
|
||||
const SinkMetadata metadata = {{{source, volume}}};
|
||||
const SinkMetadata metadata = {{{.source = source, .gain = volume}}};
|
||||
ASSERT_OK(stream->updateSinkMetadata(metadata))
|
||||
<< "source=" << toString(source) << ", volume=" << volume;
|
||||
}
|
||||
|
|
|
@ -769,7 +769,7 @@ class InputStreamTest : public OpenStreamTest<IStreamIn> {
|
|||
#if MAJOR_VERSION == 2
|
||||
const AudioSource initMetadata = AudioSource::DEFAULT;
|
||||
#elif MAJOR_VERSION >= 4
|
||||
const SinkMetadata initMetadata = {{{AudioSource::DEFAULT, 1 /* gain */}}};
|
||||
const SinkMetadata initMetadata = {{{.source = AudioSource::DEFAULT, .gain = 1}}};
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ hidl_interface {
|
|||
interfaces: [
|
||||
"android.hardware.audio.common@5.0",
|
||||
"android.hidl.base@1.0",
|
||||
"android.hidl.safe_union@1.0",
|
||||
],
|
||||
types: [
|
||||
"AudioBuffer",
|
||||
|
|
Loading…
Reference in a new issue