summaryrefslogtreecommitdiff
path: root/emulator/audio
diff options
context:
space:
mode:
Diffstat (limited to 'emulator/audio')
-rw-r--r--emulator/audio/audio_policy_configuration.xml119
-rw-r--r--emulator/audio/car_audio_configuration.xml218
-rw-r--r--emulator/audio/car_emulator_audio.mk4
-rw-r--r--emulator/audio/driver/audio_hw.c75
-rw-r--r--emulator/audio/driver/ext_pcm.c2
5 files changed, 326 insertions, 92 deletions
diff --git a/emulator/audio/audio_policy_configuration.xml b/emulator/audio/audio_policy_configuration.xml
index d2a2b26..bf9b585 100644
--- a/emulator/audio/audio_policy_configuration.xml
+++ b/emulator/audio/audio_policy_configuration.xml
@@ -62,7 +62,14 @@
<!-- names with _audio_zone_# are used for defined an emulator rear seat audio zone
where each number # is the zone id number -->
<item>bus100_audio_zone_1</item>
+ <item>bus101_audio_zone_1</item>
+ <item>bus110_audio_zone_1</item>
+ <item>bus111_audio_zone_1</item>
<item>bus200_audio_zone_2</item>
+ <item>bus201_audio_zone_2</item>
+ <item>bus210_audio_zone_2</item>
+ <item>bus211_audio_zone_2</item>
+ <item>bus1000_mirror_device</item>
<item>Built-In Mic</item>
<item>Built-In Back Mic</item>
<item>Echo-Reference Mic</item>
@@ -118,11 +125,46 @@
samplingRates="48000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="mixport_bus101_audio_zone_1" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000"
+ channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="mixport_bus110_audio_zone_1" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000"
+ channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="mixport_bus111_audio_zone_1" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000"
+ channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="mixport_bus200_audio_zone_2" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="mixport_bus201_audio_zone_2" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000"
+ channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="mixport_bus210_audio_zone_2" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000"
+ channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="mixport_bus211_audio_zone_2" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000"
+ channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="mixport_bus1000_mirror_device" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000"
+ channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="primary input" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
@@ -235,6 +277,46 @@
defaultValueMB="0" stepValueMB="100"/>
</gains>
</devicePort>
+ <devicePort tagName="bus101_audio_zone_1" role="sink" type="AUDIO_DEVICE_OUT_BUS"
+ address="bus101_audio_zone_1">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ <gains>
+ <gain name="" mode="AUDIO_GAIN_MODE_JOINT"
+ minValueMB="-3200" maxValueMB="600"
+ defaultValueMB="0" stepValueMB="100"/>
+ </gains>
+ </devicePort>
+ <devicePort tagName="bus110_audio_zone_1" role="sink" type="AUDIO_DEVICE_OUT_BUS"
+ address="bus110_audio_zone_1">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ <gains>
+ <gain name="" mode="AUDIO_GAIN_MODE_JOINT"
+ minValueMB="-3200" maxValueMB="600"
+ defaultValueMB="0" stepValueMB="100"/>
+ </gains>
+ </devicePort>
+ <devicePort tagName="bus111_audio_zone_1" role="sink" type="AUDIO_DEVICE_OUT_BUS"
+ address="bus111_audio_zone_1">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ <gains>
+ <gain name="" mode="AUDIO_GAIN_MODE_JOINT"
+ minValueMB="-3200" maxValueMB="600"
+ defaultValueMB="0" stepValueMB="100"/>
+ </gains>
+ </devicePort>
+ <devicePort tagName="bus1000_mirror_device" role="sink" type="AUDIO_DEVICE_OUT_BUS"
+ address="bus1000_mirror_device">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ <gains>
+ <gain name="" mode="AUDIO_GAIN_MODE_JOINT"
+ minValueMB="-3200" maxValueMB="600"
+ defaultValueMB="0" stepValueMB="100"/>
+ </gains>
+ </devicePort>
<devicePort tagName="bus200_audio_zone_2" role="sink" type="AUDIO_DEVICE_OUT_BUS"
address="bus200_audio_zone_2">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
@@ -245,6 +327,36 @@
defaultValueMB="0" stepValueMB="100"/>
</gains>
</devicePort>
+ <devicePort tagName="bus201_audio_zone_2" role="sink" type="AUDIO_DEVICE_OUT_BUS"
+ address="bus201_audio_zone_2">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ <gains>
+ <gain name="" mode="AUDIO_GAIN_MODE_JOINT"
+ minValueMB="-3200" maxValueMB="600"
+ defaultValueMB="0" stepValueMB="100"/>
+ </gains>
+ </devicePort>
+ <devicePort tagName="bus210_audio_zone_2" role="sink" type="AUDIO_DEVICE_OUT_BUS"
+ address="bus210_audio_zone_2">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ <gains>
+ <gain name="" mode="AUDIO_GAIN_MODE_JOINT"
+ minValueMB="-3200" maxValueMB="600"
+ defaultValueMB="0" stepValueMB="100"/>
+ </gains>
+ </devicePort>
+ <devicePort tagName="bus211_audio_zone_2" role="sink" type="AUDIO_DEVICE_OUT_BUS"
+ address="bus211_audio_zone_2">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ <gains>
+ <gain name="" mode="AUDIO_GAIN_MODE_JOINT"
+ minValueMB="-3200" maxValueMB="600"
+ defaultValueMB="0" stepValueMB="100"/>
+ </gains>
+ </devicePort>
<devicePort tagName="Built-In Mic" type="AUDIO_DEVICE_IN_BUILTIN_MIC" role="source"
address="Built-In Mic" >
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
@@ -307,7 +419,14 @@
<route type="mix" sink="bus7_system_sound_out"
sources="mixport_bus7_system_sound_out"/>
<route type="mix" sink="bus100_audio_zone_1" sources="mixport_bus100_audio_zone_1"/>
+ <route type="mix" sink="bus101_audio_zone_1" sources="mixport_bus101_audio_zone_1"/>
+ <route type="mix" sink="bus110_audio_zone_1" sources="mixport_bus110_audio_zone_1"/>
+ <route type="mix" sink="bus111_audio_zone_1" sources="mixport_bus111_audio_zone_1"/>
+ <route type="mix" sink="bus1000_mirror_device" sources="mixport_bus1000_mirror_device"/>
<route type="mix" sink="bus200_audio_zone_2" sources="mixport_bus200_audio_zone_2"/>
+ <route type="mix" sink="bus201_audio_zone_2" sources="mixport_bus201_audio_zone_2"/>
+ <route type="mix" sink="bus210_audio_zone_2" sources="mixport_bus210_audio_zone_2"/>
+ <route type="mix" sink="bus211_audio_zone_2" sources="mixport_bus211_audio_zone_2"/>
<route type="mix" sink="primary input"
sources="Built-In Mic,Built-In Back Mic,Echo-Reference Mic"/>
<route type="mix" sink="mixport_tuner0" sources="FM Tuner"/>
diff --git a/emulator/audio/car_audio_configuration.xml b/emulator/audio/car_audio_configuration.xml
index 5c0a880..81ccbfa 100644
--- a/emulator/audio/car_audio_configuration.xml
+++ b/emulator/audio/car_audio_configuration.xml
@@ -21,87 +21,155 @@
- Volume groups
in the car environment.
-->
-<carAudioConfiguration version="2">
+<carAudioConfiguration version="3">
<zones>
<zone name="primary zone" isPrimary="true" occupantZoneId="0">
- <volumeGroups>
- <group>
- <device address="bus0_media_out">
- <context context="music"/>
- <context context="announcement"/>
- </device>
- <device address="bus6_notification_out">
- <context context="notification"/>
- </device>
- </group>
- <group>
- <device address="bus1_navigation_out">
- <context context="navigation"/>
- </device>
- <device address="bus2_voice_command_out">
- <context context="voice_command"/>
- </device>
- </group>
- <group>
- <device address="bus4_call_out">
- <context context="call"/>
- </device>
- <device address="bus3_call_ring_out">
- <context context="call_ring"/>
- </device>
- </group>
- <group>
- <device address="bus5_alarm_out">
- <context context="alarm"/>
- </device>
- <device address="bus7_system_sound_out">
- <context context="system_sound"/>
- <context context="emergency"/>
- <context context="safety"/>
- <context context="vehicle_status"/>
- </device>
- </group>
- </volumeGroups>
+ <zoneConfigs>
+ <zoneConfig name="primary zone config 0" isDefault="true">
+ <volumeGroups>
+ <group>
+ <device address="bus0_media_out">
+ <context context="music"/>
+ <context context="announcement"/>
+ </device>
+ <device address="bus6_notification_out">
+ <context context="notification"/>
+ </device>
+ </group>
+ <group>
+ <device address="bus1_navigation_out">
+ <context context="navigation"/>
+ </device>
+ <device address="bus2_voice_command_out">
+ <context context="voice_command"/>
+ </device>
+ </group>
+ <group>
+ <device address="bus4_call_out">
+ <context context="call"/>
+ </device>
+ <device address="bus3_call_ring_out">
+ <context context="call_ring"/>
+ </device>
+ </group>
+ <group>
+ <device address="bus5_alarm_out">
+ <context context="alarm"/>
+ </device>
+ <device address="bus7_system_sound_out">
+ <context context="system_sound"/>
+ <context context="emergency"/>
+ <context context="safety"/>
+ <context context="vehicle_status"/>
+ </device>
+ </group>
+ </volumeGroups>
+ </zoneConfig>
+ </zoneConfigs>
</zone>
<zone name="rear seat zone 1" audioZoneId="1">
- <volumeGroups>
- <group>
- <device address="bus100_audio_zone_1">
- <context context="music"/>
- <context context="navigation"/>
- <context context="voice_command"/>
- <context context="call_ring"/>
- <context context="call"/>
- <context context="alarm"/>
- <context context="notification"/>
- <context context="system_sound"/>
- <context context="emergency"/>
- <context context="safety"/>
- <context context="vehicle_status"/>
- <context context="announcement"/>
- </device>
- </group>
- </volumeGroups>
+ <zoneConfigs>
+ <zoneConfig name="rear seat zone 1 config 0" isDefault="true">
+ <volumeGroups>
+ <group>
+ <device address="bus100_audio_zone_1">
+ <context context="music"/>
+ </device>
+ </group>
+ <group>
+ <device address="bus101_audio_zone_1">
+ <context context="navigation"/>
+ <context context="voice_command"/>
+ <context context="call_ring"/>
+ <context context="call"/>
+ <context context="alarm"/>
+ <context context="notification"/>
+ <context context="system_sound"/>
+ <context context="emergency"/>
+ <context context="safety"/>
+ <context context="vehicle_status"/>
+ <context context="announcement"/>
+ </device>
+ </group>
+ </volumeGroups>
+ </zoneConfig>
+ <zoneConfig name="rear seat zone 1 config 1">
+ <volumeGroups>
+ <group>
+ <device address="bus110_audio_zone_1">
+ <context context="music"/>
+ </device>
+ </group>
+ <group>
+ <device address="bus111_audio_zone_1">
+ <context context="navigation"/>
+ <context context="voice_command"/>
+ <context context="call_ring"/>
+ <context context="call"/>
+ <context context="alarm"/>
+ <context context="notification"/>
+ <context context="system_sound"/>
+ <context context="emergency"/>
+ <context context="safety"/>
+ <context context="vehicle_status"/>
+ <context context="announcement"/>
+ </device>
+ </group>
+ </volumeGroups>
+ </zoneConfig>
+ </zoneConfigs>
</zone>
<zone name="rear seat zone 2" audioZoneId="2">
- <volumeGroups>
- <group>
- <device address="bus200_audio_zone_2">
- <context context="music"/>
- <context context="navigation"/>
- <context context="voice_command"/>
- <context context="call_ring"/>
- <context context="call"/>
- <context context="alarm"/>
- <context context="notification"/>
- <context context="system_sound"/>
- <context context="emergency"/>
- <context context="safety"/>
- <context context="vehicle_status"/>
- <context context="announcement"/>
- </device>
- </group>
- </volumeGroups>
+ <zoneConfigs>
+ <zoneConfig name="rear seat zone 2 config 0" isDefault="true">
+ <volumeGroups>
+ <group>
+ <device address="bus200_audio_zone_2">
+ <context context="music"/>
+ </device>
+ </group>
+ <group>
+ <device address="bus201_audio_zone_2">
+ <context context="navigation"/>
+ <context context="voice_command"/>
+ <context context="call_ring"/>
+ <context context="call"/>
+ <context context="alarm"/>
+ <context context="notification"/>
+ <context context="system_sound"/>
+ <context context="emergency"/>
+ <context context="safety"/>
+ <context context="vehicle_status"/>
+ <context context="announcement"/>
+ </device>
+ </group>
+ </volumeGroups>
+ </zoneConfig>
+ <zoneConfig name="rear seat zone 2 config 1">
+ <volumeGroups>
+ <group>
+ <device address="bus210_audio_zone_2">
+ <context context="music"/>
+ </device>
+ </group>
+ <group>
+ <device address="bus211_audio_zone_2">
+ <context context="navigation"/>
+ <context context="voice_command"/>
+ <context context="call_ring"/>
+ <context context="call"/>
+ <context context="alarm"/>
+ <context context="notification"/>
+ <context context="system_sound"/>
+ <context context="emergency"/>
+ <context context="safety"/>
+ <context context="vehicle_status"/>
+ <context context="announcement"/>
+ </device>
+ </group>
+ </volumeGroups>
+ </zoneConfig>
+ </zoneConfigs>
</zone>
</zones>
</carAudioConfiguration>
diff --git a/emulator/audio/car_emulator_audio.mk b/emulator/audio/car_emulator_audio.mk
index 80e59f7..6b3147f 100644
--- a/emulator/audio/car_emulator_audio.mk
+++ b/emulator/audio/car_emulator_audio.mk
@@ -22,12 +22,12 @@ PRODUCT_PACKAGES += audio.primary.caremu
PRODUCT_PACKAGES += \
android.hardware.audio@6.0-impl:32
-DEVICE_MANIFEST_FILE += device/generic/car/emulator/audio/android.hardware.audio.effects@6.0.xml
+PRODUCT_COPY_FILES += \
+ device/generic/car/emulator/audio/android.hardware.audio.effects@6.0.xml:/vendor/etc/vintf/manifest/android.hardware.audio.effects@6.0.xml
PRODUCT_PROPERTY_OVERRIDES += ro.hardware.audio.primary=caremu
PRODUCT_COPY_FILES += \
- frameworks/native/data/etc/android.hardware.broadcastradio.xml:system/etc/permissions/android.hardware.broadcastradio.xml \
frameworks/av/services/audiopolicy/config/a2dp_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/a2dp_audio_policy_configuration.xml \
frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/usb_audio_policy_configuration.xml \
frameworks/av/services/audiopolicy/config/r_submix_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/r_submix_audio_policy_configuration.xml \
diff --git a/emulator/audio/driver/audio_hw.c b/emulator/audio/driver/audio_hw.c
index 94a4205..7714087 100644
--- a/emulator/audio/driver/audio_hw.c
+++ b/emulator/audio/driver/audio_hw.c
@@ -55,10 +55,26 @@
#define DEFAULT_IN_PERIOD_MS 15
#define DEFAULT_IN_PERIOD_COUNT 4
-static const char* PROP_KEY_OUT_PERIOD_MS = "ro.vendor.caremu.audiohal.out_period_ms";
-static const char* PROP_KEY_OUT_PERIOD_COUNT = "ro.vendor.caremu.audiohal.out_period_count";
-static const char* PROP_KEY_IN_PERIOD_MS = "ro.vendor.caremu.audiohal.in_period_ms";
-static const char* PROP_KEY_IN_PERIOD_COUNT = "ro.vendor.caremu.audiohal.in_period_count";
+#ifndef ARRAY_SIZE
+#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
+#endif
+
+static const char* PROP_KEY_OUT_PERIOD_MS[2] = {
+ "ro.boot.vendor.caremu.audiohal.out_period_ms",
+ "ro.vendor.caremu.audiohal.out_period_ms",
+};
+static const char* PROP_KEY_OUT_PERIOD_COUNT[2] = {
+ "ro.boot.vendor.caremu.audiohal.out_period_count",
+ "ro.vendor.caremu.audiohal.out_period_count",
+};
+static const char* PROP_KEY_IN_PERIOD_MS[2] = {
+ "ro.boot.vendor.caremu.audiohal.in_period_ms",
+ "ro.vendor.caremu.audiohal.in_period_ms",
+};
+static const char* PROP_KEY_IN_PERIOD_COUNT[2] = {
+ "ro.boot.vendor.caremu.audiohal.in_period_count",
+ "ro.vendor.caremu.audiohal.in_period_count",
+};
#define PI 3.14159265
#define TWO_PI (2*PI)
@@ -75,7 +91,7 @@ static const char* PROP_KEY_IN_PERIOD_COUNT = "ro.vendor.caremu.audiohal.in_peri
#define _bool_str(x) ((x)?"true":"false")
-static const char * const PROP_KEY_SIMULATE_MULTI_ZONE_AUDIO = "ro.aae.simulateMultiZoneAudio";
+static const char * const PROP_KEY_SIMULATE_MULTI_ZONE_AUDIO = "ro.vendor.caremu.audiohal.simulateMultiZoneAudio";
static const char * const AAE_PARAMETER_KEY_FOR_SELECTED_ZONE = "com.android.car.emulator.selected_zone";
#define PRIMARY_ZONE_ID 0
#define INVALID_ZONE_ID -1
@@ -92,10 +108,23 @@ static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
static int adev_get_mic_mute(const struct audio_hw_device *dev, bool *state);
+static int audio_get_property(const char** keys, size_t num_keys, int32_t default_value) {
+ static char prop_value[PROP_VALUE_MAX] = {0};
+ for (size_t i = 0; i < num_keys; ++i) {
+ if (property_get(keys[i], prop_value, NULL) > 0) {
+ return property_get_int32(keys[i], default_value);
+ }
+ }
+
+ return default_value;
+}
+
static int get_out_period_ms() {
static int out_period_ms = -1;
if (out_period_ms == -1) {
- out_period_ms = property_get_int32(PROP_KEY_OUT_PERIOD_MS, DEFAULT_OUT_PERIOD_MS);
+ out_period_ms = audio_get_property(PROP_KEY_OUT_PERIOD_MS,
+ ARRAY_SIZE(PROP_KEY_OUT_PERIOD_MS),
+ DEFAULT_OUT_PERIOD_MS);
}
return out_period_ms;
}
@@ -103,7 +132,9 @@ static int get_out_period_ms() {
static int get_out_period_count() {
static int out_period_count = -1;
if (out_period_count == -1) {
- out_period_count = property_get_int32(PROP_KEY_OUT_PERIOD_COUNT, DEFAULT_OUT_PERIOD_COUNT);
+ out_period_count = audio_get_property(PROP_KEY_OUT_PERIOD_COUNT,
+ ARRAY_SIZE(PROP_KEY_OUT_PERIOD_COUNT),
+ DEFAULT_OUT_PERIOD_COUNT);
}
return out_period_count;
}
@@ -111,7 +142,9 @@ static int get_out_period_count() {
static int get_in_period_ms() {
static int in_period_ms = -1;
if (in_period_ms == -1) {
- in_period_ms = property_get_int32(PROP_KEY_IN_PERIOD_MS, DEFAULT_IN_PERIOD_MS);
+ in_period_ms = audio_get_property(PROP_KEY_IN_PERIOD_MS,
+ ARRAY_SIZE(PROP_KEY_IN_PERIOD_MS),
+ DEFAULT_IN_PERIOD_MS);
}
return in_period_ms;
}
@@ -119,7 +152,9 @@ static int get_in_period_ms() {
static int get_in_period_count() {
static int in_period_count = -1;
if (in_period_count == -1) {
- in_period_count = property_get_int32(PROP_KEY_IN_PERIOD_COUNT, DEFAULT_IN_PERIOD_COUNT);
+ in_period_count = audio_get_property(PROP_KEY_IN_PERIOD_COUNT,
+ ARRAY_SIZE(PROP_KEY_IN_PERIOD_COUNT),
+ DEFAULT_IN_PERIOD_COUNT);
}
return in_period_count;
}
@@ -1002,12 +1037,19 @@ static bool is_tone_generator_device(struct generic_stream_in *in) {
address_has_tone_keyword(in->bus_address));
}
+static bool is_microphone_device(struct generic_stream_in *in) {
+ return in->device == AUDIO_DEVICE_IN_BACK_MIC ||
+ in->device == AUDIO_DEVICE_IN_BUILTIN_MIC;
+}
+
static ssize_t in_read(struct audio_stream_in *stream, void *buffer, size_t bytes) {
struct generic_stream_in *in = (struct generic_stream_in *)stream;
struct generic_audio_device *adev = in->dev;
const size_t frames = bytes / audio_stream_in_frame_size(stream);
int ret = 0;
+ bool read_mute = false;
bool mic_mute = false;
+ bool is_tone_generator = false;
size_t read_bytes = 0;
set_shortened_thread_name(pthread_self(), __func__);
@@ -1019,8 +1061,13 @@ static ssize_t in_read(struct audio_stream_in *stream, void *buffer, size_t byte
in->worker_standby = false;
}
+ // Only mute read if mic is muted and device is mic.
+ // Other devices, e.g. FM_TUNER, are not muted by mic mute
+ read_mute = mic_mute && is_microphone_device(in);
+
+ is_tone_generator = is_tone_generator_device(in);
// Tone generators fill the buffer via pseudo_pcm_read directly
- if (!is_tone_generator_device(in)) {
+ if (!is_tone_generator) {
pthread_cond_signal(&in->worker_wake);
}
@@ -1057,7 +1104,7 @@ static ssize_t in_read(struct audio_stream_in *stream, void *buffer, size_t byte
}
in->standby_frames_read += frames;
- if (is_tone_generator_device(in)) {
+ if (is_tone_generator) {
int read_bytes = pseudo_pcm_read(buffer, bytes, &in->oscillator);
read_frames = read_bytes / audio_stream_in_frame_size(stream);
} else if (popcount(in->req_config.channel_mask) == 1 &&
@@ -1091,7 +1138,7 @@ static ssize_t in_read(struct audio_stream_in *stream, void *buffer, size_t byte
exit:
read_bytes = read_frames*audio_stream_in_frame_size(stream);
- if (mic_mute) {
+ if (read_mute) {
read_bytes = 0;
}
@@ -1192,8 +1239,6 @@ static int adev_open_output_stream(struct audio_hw_device *dev,
pthread_cond_init(&out->worker_wake, NULL);
out->worker_standby = true;
out->worker_exit = false;
- pthread_create(&out->worker_thread, NULL, out_write_worker, out);
- set_shortened_thread_name(out->worker_thread, address);
out->enabled_channels = BOTH_CHANNELS;
// For targets where output streams are closed regularly, currently ducked/muted addresses
@@ -1219,6 +1264,8 @@ static int adev_open_output_stream(struct audio_hw_device *dev,
out->bus_address, out->enabled_channels == RIGHT_CHANNEL ? "Right" : "Left");
}
}
+ pthread_create(&out->worker_thread, NULL, out_write_worker, out);
+ set_shortened_thread_name(out->worker_thread, address);
*stream_out = &out->stream;
ALOGD("%s bus: %s", __func__, out->bus_address);
}
diff --git a/emulator/audio/driver/ext_pcm.c b/emulator/audio/driver/ext_pcm.c
index 2b0e825..5bbc547 100644
--- a/emulator/audio/driver/ext_pcm.c
+++ b/emulator/audio/driver/ext_pcm.c
@@ -87,7 +87,7 @@ static void *mixer_thread_loop(void *context) {
int ret = pcm_write(ext_pcm->pcm, (void *)ext_pcm->mixer_pipeline.buffer,
ext_pcm->mixer_pipeline.position * sizeof(int16_t));
if (ret != 0) {
- ALOGE("%s error[%d] writing data to pcm");
+ ALOGE("%s error[%d] writing data to pcm", __func__, ret);
}
}
memset(&ext_pcm->mixer_pipeline, 0, sizeof(struct ext_mixer_pipeline));