diff options
Diffstat (limited to 'emulator/audio')
-rw-r--r-- | emulator/audio/audio_policy_configuration.xml | 119 | ||||
-rw-r--r-- | emulator/audio/car_audio_configuration.xml | 218 | ||||
-rw-r--r-- | emulator/audio/car_emulator_audio.mk | 4 | ||||
-rw-r--r-- | emulator/audio/driver/audio_hw.c | 75 | ||||
-rw-r--r-- | emulator/audio/driver/ext_pcm.c | 2 |
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)); |