[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid.spec
^
|
|
[-]
[+]
|
Deleted |
_service:tar_git:pulseaudio-modules-droid-8.0.51.tar.bz2/src/common/droid-util-42.h
^
|
@@ -1,280 +0,0 @@
-/*
- * Copyright (C) 2013 Jolla Ltd.
- *
- * Contact: Juho Hämäläinen <juho.hamalainen@tieto.com>
- *
- * These PulseAudio Modules are free software; you can redistribute
- * it and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation
- * version 2.1 of the License.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
- * USA.
- */
-
-#ifndef _ANDROID_UTIL_V42_H_
-#define _ANDROID_UTIL_V42_H_
-
-#define DROID_HAL 2
-
-#include <hardware/audio.h>
-#include <hardware_legacy/audio_policy_conf.h>
-
-// PulseAudio value - Android value
-
-uint32_t conversion_table_output_channel[][2] = {
- { PA_CHANNEL_POSITION_MONO, AUDIO_CHANNEL_OUT_MONO },
- { PA_CHANNEL_POSITION_FRONT_LEFT, AUDIO_CHANNEL_OUT_FRONT_LEFT },
- { PA_CHANNEL_POSITION_FRONT_RIGHT, AUDIO_CHANNEL_OUT_FRONT_RIGHT},
- { PA_CHANNEL_POSITION_FRONT_CENTER, AUDIO_CHANNEL_OUT_FRONT_CENTER },
- { PA_CHANNEL_POSITION_SUBWOOFER, AUDIO_CHANNEL_OUT_LOW_FREQUENCY },
- { PA_CHANNEL_POSITION_REAR_LEFT, AUDIO_CHANNEL_OUT_BACK_LEFT },
- { PA_CHANNEL_POSITION_REAR_RIGHT, AUDIO_CHANNEL_OUT_BACK_RIGHT },
- { PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER, AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER },
- { PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER, AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER },
- { PA_CHANNEL_POSITION_REAR_CENTER, AUDIO_CHANNEL_OUT_BACK_CENTER },
- { PA_CHANNEL_POSITION_SIDE_LEFT, AUDIO_CHANNEL_OUT_SIDE_LEFT },
- { PA_CHANNEL_POSITION_SIDE_RIGHT, AUDIO_CHANNEL_OUT_SIDE_RIGHT },
- { PA_CHANNEL_POSITION_TOP_CENTER, AUDIO_CHANNEL_OUT_TOP_CENTER },
- { PA_CHANNEL_POSITION_TOP_FRONT_LEFT, AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT },
- { PA_CHANNEL_POSITION_TOP_FRONT_CENTER, AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER },
- { PA_CHANNEL_POSITION_TOP_FRONT_RIGHT, AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT },
- { PA_CHANNEL_POSITION_TOP_REAR_LEFT, AUDIO_CHANNEL_OUT_TOP_BACK_LEFT },
- { PA_CHANNEL_POSITION_TOP_REAR_CENTER, AUDIO_CHANNEL_OUT_TOP_BACK_CENTER },
- { PA_CHANNEL_POSITION_TOP_REAR_RIGHT, AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT }
-};
-
-uint32_t conversion_table_input_channel[][2] = {
- { PA_CHANNEL_POSITION_MONO, AUDIO_CHANNEL_IN_MONO },
- { PA_CHANNEL_POSITION_FRONT_LEFT, AUDIO_CHANNEL_IN_LEFT },
- { PA_CHANNEL_POSITION_FRONT_RIGHT, AUDIO_CHANNEL_IN_RIGHT},
- { PA_CHANNEL_POSITION_FRONT_CENTER, AUDIO_CHANNEL_IN_FRONT },
- { PA_CHANNEL_POSITION_REAR_CENTER, AUDIO_CHANNEL_IN_BACK },
- /* Following are missing suitable counterparts on PulseAudio side. */
- { AUDIO_CHANNEL_IN_LEFT_PROCESSED, AUDIO_CHANNEL_IN_LEFT_PROCESSED },
- { AUDIO_CHANNEL_IN_RIGHT_PROCESSED, AUDIO_CHANNEL_IN_RIGHT_PROCESSED },
- { AUDIO_CHANNEL_IN_FRONT_PROCESSED, AUDIO_CHANNEL_IN_FRONT_PROCESSED },
- { AUDIO_CHANNEL_IN_BACK_PROCESSED, AUDIO_CHANNEL_IN_BACK_PROCESSED },
- { AUDIO_CHANNEL_IN_PRESSURE, AUDIO_CHANNEL_IN_PRESSURE },
- { AUDIO_CHANNEL_IN_X_AXIS, AUDIO_CHANNEL_IN_X_AXIS },
- { AUDIO_CHANNEL_IN_Y_AXIS, AUDIO_CHANNEL_IN_Y_AXIS },
- { AUDIO_CHANNEL_IN_Z_AXIS, AUDIO_CHANNEL_IN_Z_AXIS },
- { AUDIO_CHANNEL_IN_VOICE_UPLINK, AUDIO_CHANNEL_IN_VOICE_UPLINK },
- { AUDIO_CHANNEL_IN_VOICE_DNLINK, AUDIO_CHANNEL_IN_VOICE_DNLINK }
-};
-
-uint32_t conversion_table_format[][2] = {
- { PA_SAMPLE_U8, AUDIO_FORMAT_PCM_8_BIT },
- { PA_SAMPLE_S16LE, AUDIO_FORMAT_PCM_16_BIT },
- { PA_SAMPLE_S32LE, AUDIO_FORMAT_PCM_32_BIT },
- { PA_SAMPLE_S24LE, AUDIO_FORMAT_PCM_8_24_BIT }
-};
-
-uint32_t conversion_table_default_audio_source[][2] = {
- { AUDIO_DEVICE_IN_ALL, AUDIO_SOURCE_DEFAULT }
-};
-
-struct string_conversion {
- uint32_t value;
- const char *str;
-};
-
-#if defined(STRING_ENTRY)
-#error STRING_ENTRY already defined somewhere, fix this lib.
-#endif
-#define STRING_ENTRY(str) { str, #str }
-/* Output devices */
-struct string_conversion string_conversion_table_output_device[] = {
- STRING_ENTRY(AUDIO_DEVICE_OUT_EARPIECE),
- STRING_ENTRY(AUDIO_DEVICE_OUT_SPEAKER),
- STRING_ENTRY(AUDIO_DEVICE_OUT_WIRED_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_OUT_WIRED_HEADPHONE),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_SCO),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER),
- STRING_ENTRY(AUDIO_DEVICE_OUT_AUX_DIGITAL),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_OUT_USB_ACCESSORY),
- STRING_ENTRY(AUDIO_DEVICE_OUT_USB_DEVICE),
- STRING_ENTRY(AUDIO_DEVICE_OUT_REMOTE_SUBMIX),
- STRING_ENTRY(AUDIO_DEVICE_OUT_DEFAULT),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ALL),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ALL_A2DP),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ALL_SCO),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ALL_USB),
- { 0, NULL }
-};
-
-struct string_conversion string_conversion_table_output_device_fancy[] = {
- { AUDIO_DEVICE_OUT_EARPIECE, "output-earpiece" },
- { AUDIO_DEVICE_OUT_SPEAKER, "output-speaker" },
- { AUDIO_DEVICE_OUT_SPEAKER
- | AUDIO_DEVICE_OUT_WIRED_HEADPHONE, "output-speaker+wired_headphone" },
- { AUDIO_DEVICE_OUT_WIRED_HEADSET, "output-wired_headset" },
- { AUDIO_DEVICE_OUT_WIRED_HEADPHONE, "output-wired_headphone" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_SCO, "output-bluetooth_sco" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET, "output-sco_headset" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT, "output-sco_carkit" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_A2DP, "output-a2dp" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES, "output-a2dp_headphones" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER, "output-a2dp_speaker" },
- { AUDIO_DEVICE_OUT_AUX_DIGITAL, "output-aux_digital" },
- { AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET, "output-analog_dock_headset" },
- { AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET, "output-digital_dock_headset" },
- { AUDIO_DEVICE_OUT_USB_ACCESSORY, "output-usb_accessory" },
- { AUDIO_DEVICE_OUT_USB_DEVICE, "output-usb_device" },
- { AUDIO_DEVICE_OUT_REMOTE_SUBMIX, "output-remote_submix" },
- { 0, NULL }
-};
-
-/* Input devices */
-struct string_conversion string_conversion_table_input_device[] = {
- STRING_ENTRY(AUDIO_DEVICE_IN_COMMUNICATION),
- STRING_ENTRY(AUDIO_DEVICE_IN_AMBIENT),
- STRING_ENTRY(AUDIO_DEVICE_IN_BUILTIN_MIC),
- STRING_ENTRY(AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_IN_WIRED_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_IN_AUX_DIGITAL),
- STRING_ENTRY(AUDIO_DEVICE_IN_VOICE_CALL),
- STRING_ENTRY(AUDIO_DEVICE_IN_BACK_MIC),
- STRING_ENTRY(AUDIO_DEVICE_IN_REMOTE_SUBMIX),
- STRING_ENTRY(AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_IN_USB_ACCESSORY),
- STRING_ENTRY(AUDIO_DEVICE_IN_USB_DEVICE),
- STRING_ENTRY(AUDIO_DEVICE_IN_DEFAULT),
- /* Combination entries consisting of multiple devices defined above.
- * These don't require counterpart in string_conversion_table_input_device_fancy. */
- STRING_ENTRY(AUDIO_DEVICE_IN_ALL),
- STRING_ENTRY(AUDIO_DEVICE_IN_ALL_SCO),
- { 0, NULL }
-};
-
-struct string_conversion string_conversion_table_input_device_fancy[] = {
- { AUDIO_DEVICE_IN_COMMUNICATION, "input-communication" },
- { AUDIO_DEVICE_IN_AMBIENT, "input-ambient" },
- { AUDIO_DEVICE_IN_BUILTIN_MIC, "input-builtin_mic" },
- { AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET, "input-bluetooth_sco_headset" },
- { AUDIO_DEVICE_IN_WIRED_HEADSET, "input-wired_headset" },
- { AUDIO_DEVICE_IN_AUX_DIGITAL, "input-aux_digital" },
- { AUDIO_DEVICE_IN_VOICE_CALL, "input-voice_call" },
- { AUDIO_DEVICE_IN_BACK_MIC, "input-back_mic" },
- { AUDIO_DEVICE_IN_REMOTE_SUBMIX, "input-remote_submix" },
- { AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET, "input-analog_dock_headset" },
- { AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET, "input-digital_dock_headset" },
- { AUDIO_DEVICE_IN_USB_ACCESSORY, "input-usb_accessory" },
- { AUDIO_DEVICE_IN_USB_DEVICE, "input-usb_device" },
- { AUDIO_DEVICE_IN_DEFAULT, "input-default" },
- { 0, NULL }
-};
-
-struct string_conversion string_conversion_table_audio_source_fancy[] = {
- { AUDIO_SOURCE_DEFAULT, "default" },
- { AUDIO_SOURCE_MIC, "mic" },
- { AUDIO_SOURCE_VOICE_UPLINK, "voice uplink" },
- { AUDIO_SOURCE_VOICE_DOWNLINK, "voice downlink" },
- { AUDIO_SOURCE_VOICE_CALL, "voice call" },
- { AUDIO_SOURCE_CAMCORDER, "camcorder" },
- { AUDIO_SOURCE_VOICE_RECOGNITION, "voice recognition" },
- { AUDIO_SOURCE_VOICE_COMMUNICATION, "voice communication" },
- { AUDIO_SOURCE_REMOTE_SUBMIX, "remote submix" },
-#ifdef QCOM_HARDWARE
- { AUDIO_SOURCE_FM_RX, "fm rx" },
- { AUDIO_SOURCE_FM_RX_A2DP, "fm rx a2dp" },
-#endif
- { (uint32_t)-1, NULL }
-};
-
-/* Flags */
|
[-]
[+]
|
Deleted |
_service:tar_git:pulseaudio-modules-droid-8.0.51.tar.bz2/src/common/droid-util-44.h
^
|
@@ -1,358 +0,0 @@
-/*
- * Copyright (C) 2013 Jolla Ltd.
- *
- * Contact: Juho Hämäläinen <juho.hamalainen@tieto.com>
- *
- * These PulseAudio Modules are free software; you can redistribute
- * it and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation
- * version 2.1 of the License.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
- * USA.
- */
-
-#ifndef _ANDROID_UTIL_V44_H_
-#define _ANDROID_UTIL_V44_H_
-
-#define DROID_HAL 2
-
-// Android v4.4 has SPEAKER_DRC_ENABLED_TAG, so might the future versions
-#define DROID_HAVE_DRC
-
-// Until we implement MER_HA_CHIPSET in hw-release, every non-Qualcomm ARM
-// device will need to have an exception below (just like i9305).
-// This decision is based on the trend of Q3/Q4 2014 that most devices ported
-// to 4.4 via hybris are Qualcomm ones.
-// TODO: things elegantly
-#if defined(__arm__) && !defined(DROID_DEVICE_I9305)
-#define QCOM_HARDWARE
-#endif
-
-#include <hardware/audio.h>
-#include <hardware_legacy/audio_policy_conf.h>
-
-// PulseAudio value - Android value
-
-uint32_t conversion_table_output_channel[][2] = {
- { PA_CHANNEL_POSITION_MONO, AUDIO_CHANNEL_OUT_MONO },
- { PA_CHANNEL_POSITION_FRONT_LEFT, AUDIO_CHANNEL_OUT_FRONT_LEFT },
- { PA_CHANNEL_POSITION_FRONT_RIGHT, AUDIO_CHANNEL_OUT_FRONT_RIGHT},
- { PA_CHANNEL_POSITION_FRONT_CENTER, AUDIO_CHANNEL_OUT_FRONT_CENTER },
- { PA_CHANNEL_POSITION_SUBWOOFER, AUDIO_CHANNEL_OUT_LOW_FREQUENCY },
- { PA_CHANNEL_POSITION_REAR_LEFT, AUDIO_CHANNEL_OUT_BACK_LEFT },
- { PA_CHANNEL_POSITION_REAR_RIGHT, AUDIO_CHANNEL_OUT_BACK_RIGHT },
- { PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER, AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER },
- { PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER, AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER },
- { PA_CHANNEL_POSITION_REAR_CENTER, AUDIO_CHANNEL_OUT_BACK_CENTER },
- { PA_CHANNEL_POSITION_SIDE_LEFT, AUDIO_CHANNEL_OUT_SIDE_LEFT },
- { PA_CHANNEL_POSITION_SIDE_RIGHT, AUDIO_CHANNEL_OUT_SIDE_RIGHT },
- { PA_CHANNEL_POSITION_TOP_CENTER, AUDIO_CHANNEL_OUT_TOP_CENTER },
- { PA_CHANNEL_POSITION_TOP_FRONT_LEFT, AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT },
- { PA_CHANNEL_POSITION_TOP_FRONT_CENTER, AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER },
- { PA_CHANNEL_POSITION_TOP_FRONT_RIGHT, AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT },
- { PA_CHANNEL_POSITION_TOP_REAR_LEFT, AUDIO_CHANNEL_OUT_TOP_BACK_LEFT },
- { PA_CHANNEL_POSITION_TOP_REAR_CENTER, AUDIO_CHANNEL_OUT_TOP_BACK_CENTER },
- { PA_CHANNEL_POSITION_TOP_REAR_RIGHT, AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT }
-};
-
-uint32_t conversion_table_input_channel[][2] = {
- { PA_CHANNEL_POSITION_MONO, AUDIO_CHANNEL_IN_MONO },
- { PA_CHANNEL_POSITION_FRONT_LEFT, AUDIO_CHANNEL_IN_LEFT },
- { PA_CHANNEL_POSITION_FRONT_RIGHT, AUDIO_CHANNEL_IN_RIGHT},
- { PA_CHANNEL_POSITION_FRONT_CENTER, AUDIO_CHANNEL_IN_FRONT },
- { PA_CHANNEL_POSITION_REAR_CENTER, AUDIO_CHANNEL_IN_BACK },
- /* Following are missing suitable counterparts on PulseAudio side. */
- { AUDIO_CHANNEL_IN_LEFT_PROCESSED, AUDIO_CHANNEL_IN_LEFT_PROCESSED },
- { AUDIO_CHANNEL_IN_RIGHT_PROCESSED, AUDIO_CHANNEL_IN_RIGHT_PROCESSED },
- { AUDIO_CHANNEL_IN_FRONT_PROCESSED, AUDIO_CHANNEL_IN_FRONT_PROCESSED },
- { AUDIO_CHANNEL_IN_BACK_PROCESSED, AUDIO_CHANNEL_IN_BACK_PROCESSED },
- { AUDIO_CHANNEL_IN_PRESSURE, AUDIO_CHANNEL_IN_PRESSURE },
- { AUDIO_CHANNEL_IN_X_AXIS, AUDIO_CHANNEL_IN_X_AXIS },
- { AUDIO_CHANNEL_IN_Y_AXIS, AUDIO_CHANNEL_IN_Y_AXIS },
- { AUDIO_CHANNEL_IN_Z_AXIS, AUDIO_CHANNEL_IN_Z_AXIS },
- { AUDIO_CHANNEL_IN_VOICE_UPLINK, AUDIO_CHANNEL_IN_VOICE_UPLINK },
- { AUDIO_CHANNEL_IN_VOICE_DNLINK, AUDIO_CHANNEL_IN_VOICE_DNLINK }
-};
-
-uint32_t conversion_table_format[][2] = {
- { PA_SAMPLE_U8, AUDIO_FORMAT_PCM_8_BIT },
- { PA_SAMPLE_S16LE, AUDIO_FORMAT_PCM_16_BIT },
- { PA_SAMPLE_S32LE, AUDIO_FORMAT_PCM_32_BIT },
- { PA_SAMPLE_S24LE, AUDIO_FORMAT_PCM_8_24_BIT }
-};
-
-uint32_t conversion_table_default_audio_source[][2] = {
-#if defined(DROID_DEVICE_HAMMERHEAD) || defined(DROID_DEVICE_ARMANI) || defined(DROID_DEVICE_MAKO)
- { AUDIO_DEVICE_IN_COMMUNICATION, AUDIO_SOURCE_MIC },
- { AUDIO_DEVICE_IN_AMBIENT, AUDIO_SOURCE_MIC },
- { AUDIO_DEVICE_IN_BUILTIN_MIC, AUDIO_SOURCE_MIC },
- { AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET, AUDIO_SOURCE_MIC },
- { AUDIO_DEVICE_IN_WIRED_HEADSET, AUDIO_SOURCE_MIC },
- { AUDIO_DEVICE_IN_AUX_DIGITAL, AUDIO_SOURCE_MIC },
- { AUDIO_DEVICE_IN_VOICE_CALL, AUDIO_SOURCE_VOICE_CALL },
- { AUDIO_DEVICE_IN_BACK_MIC, AUDIO_SOURCE_MIC },
- { AUDIO_DEVICE_IN_REMOTE_SUBMIX, AUDIO_SOURCE_REMOTE_SUBMIX },
- { AUDIO_DEVICE_IN_ANC_HEADSET, AUDIO_SOURCE_MIC },
- { AUDIO_DEVICE_IN_FM_RX, AUDIO_SOURCE_FM_RX },
- { AUDIO_DEVICE_IN_FM_RX_A2DP, AUDIO_SOURCE_FM_RX_A2DP },
-#endif
- { AUDIO_DEVICE_IN_ALL, AUDIO_SOURCE_DEFAULT }
-};
-
-struct string_conversion {
- uint32_t value;
- const char *str;
-};
-
-#if defined(STRING_ENTRY)
-#error STRING_ENTRY already defined somewhere, fix this lib.
-#endif
-#define STRING_ENTRY(str) { str, #str }
-/* Output devices */
-struct string_conversion string_conversion_table_output_device[] = {
- STRING_ENTRY(AUDIO_DEVICE_OUT_EARPIECE),
- STRING_ENTRY(AUDIO_DEVICE_OUT_SPEAKER),
- STRING_ENTRY(AUDIO_DEVICE_OUT_WIRED_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_OUT_WIRED_HEADPHONE),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_SCO),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER),
- STRING_ENTRY(AUDIO_DEVICE_OUT_AUX_DIGITAL),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_OUT_USB_ACCESSORY),
- STRING_ENTRY(AUDIO_DEVICE_OUT_USB_DEVICE),
- STRING_ENTRY(AUDIO_DEVICE_OUT_REMOTE_SUBMIX),
- STRING_ENTRY(AUDIO_DEVICE_OUT_DEFAULT),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ALL),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ALL_A2DP),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ALL_SCO),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ALL_USB),
-#ifdef QCOM_HARDWARE
- STRING_ENTRY(AUDIO_DEVICE_OUT_FM),
- STRING_ENTRY(AUDIO_DEVICE_OUT_FM_TX),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ANC_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ANC_HEADPHONE),
- STRING_ENTRY(AUDIO_DEVICE_OUT_PROXY),
-#endif
- { 0, NULL }
-};
-
-struct string_conversion string_conversion_table_output_device_fancy[] = {
- { AUDIO_DEVICE_OUT_EARPIECE, "output-earpiece" },
- { AUDIO_DEVICE_OUT_SPEAKER, "output-speaker" },
- { AUDIO_DEVICE_OUT_SPEAKER
- | AUDIO_DEVICE_OUT_WIRED_HEADPHONE, "output-speaker+wired_headphone" },
- { AUDIO_DEVICE_OUT_WIRED_HEADSET, "output-wired_headset" },
- { AUDIO_DEVICE_OUT_WIRED_HEADPHONE, "output-wired_headphone" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_SCO, "output-bluetooth_sco" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET, "output-sco_headset" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT, "output-sco_carkit" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_A2DP, "output-a2dp" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES, "output-a2dp_headphones" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER, "output-a2dp_speaker" },
- { AUDIO_DEVICE_OUT_AUX_DIGITAL, "output-aux_digital" },
- { AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET, "output-analog_dock_headset" },
- { AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET, "output-digital_dock_headset" },
- { AUDIO_DEVICE_OUT_USB_ACCESSORY, "output-usb_accessory" },
- { AUDIO_DEVICE_OUT_USB_DEVICE, "output-usb_device" },
- { AUDIO_DEVICE_OUT_REMOTE_SUBMIX, "output-remote_submix" },
-#ifdef QCOM_HARDWARE
- { AUDIO_DEVICE_OUT_FM, "output-fm" },
- { AUDIO_DEVICE_OUT_FM_TX, "output-fm_tx" },
- { AUDIO_DEVICE_OUT_ANC_HEADSET, "output-anc_headset" },
- { AUDIO_DEVICE_OUT_ANC_HEADPHONE, "output-anc_headphone" },
- { AUDIO_DEVICE_OUT_PROXY, "output-proxy" },
-#endif
- { 0, NULL }
-};
-
-/* Input devices */
-struct string_conversion string_conversion_table_input_device[] = {
- STRING_ENTRY(AUDIO_DEVICE_IN_COMMUNICATION),
- STRING_ENTRY(AUDIO_DEVICE_IN_AMBIENT),
- STRING_ENTRY(AUDIO_DEVICE_IN_BUILTIN_MIC),
- STRING_ENTRY(AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_IN_WIRED_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_IN_AUX_DIGITAL),
- STRING_ENTRY(AUDIO_DEVICE_IN_VOICE_CALL),
- STRING_ENTRY(AUDIO_DEVICE_IN_BACK_MIC),
- STRING_ENTRY(AUDIO_DEVICE_IN_REMOTE_SUBMIX),
- STRING_ENTRY(AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_IN_USB_ACCESSORY),
- STRING_ENTRY(AUDIO_DEVICE_IN_USB_DEVICE),
-#ifdef QCOM_HARDWARE
- STRING_ENTRY(AUDIO_DEVICE_IN_ANC_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_IN_FM_RX),
- STRING_ENTRY(AUDIO_DEVICE_IN_FM_RX_A2DP),
|
[-]
[+]
|
Deleted |
_service:tar_git:pulseaudio-modules-droid-8.0.51.tar.bz2/src/common/droid-util-51.h
^
|
@@ -1,418 +0,0 @@
-/*
- * Copyright (C) 2015 Jolla Ltd.
- *
- * Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
- *
- * These PulseAudio Modules are free software; you can redistribute
- * it and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation
- * version 2.1 of the License.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
- * USA.
- */
-
-#ifndef _DROID_UTIL_V51_H_
-#define _DROID_UTIL_V51_H_
-
-#define DROID_HAL 3
-
-#define DROID_HAVE_DRC
-
-// Until we implement MER_HA_CHIPSET in hw-release, every non-Qualcomm ARM
-// device will need to have an exception below (just like i9305).
-// TODO: things elegantly
-#if defined(__arm__) && !defined(DROID_DEVICE_I9305)
-#define QCOM_HARDWARE
-#endif
-
-#ifdef QCOM_BSP
-#define DROID_AUDIO_HAL_USE_VSID
-#endif
-
-#include <hardware/audio.h>
-#include <hardware_legacy/audio_policy_conf.h>
-
-// PulseAudio value - Android value
-
-uint32_t conversion_table_output_channel[][2] = {
- { PA_CHANNEL_POSITION_MONO, AUDIO_CHANNEL_OUT_MONO },
- { PA_CHANNEL_POSITION_FRONT_LEFT, AUDIO_CHANNEL_OUT_FRONT_LEFT },
- { PA_CHANNEL_POSITION_FRONT_RIGHT, AUDIO_CHANNEL_OUT_FRONT_RIGHT},
- { PA_CHANNEL_POSITION_FRONT_CENTER, AUDIO_CHANNEL_OUT_FRONT_CENTER },
- { PA_CHANNEL_POSITION_SUBWOOFER, AUDIO_CHANNEL_OUT_LOW_FREQUENCY },
- { PA_CHANNEL_POSITION_REAR_LEFT, AUDIO_CHANNEL_OUT_BACK_LEFT },
- { PA_CHANNEL_POSITION_REAR_RIGHT, AUDIO_CHANNEL_OUT_BACK_RIGHT },
- { PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER, AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER },
- { PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER, AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER },
- { PA_CHANNEL_POSITION_REAR_CENTER, AUDIO_CHANNEL_OUT_BACK_CENTER },
- { PA_CHANNEL_POSITION_SIDE_LEFT, AUDIO_CHANNEL_OUT_SIDE_LEFT },
- { PA_CHANNEL_POSITION_SIDE_RIGHT, AUDIO_CHANNEL_OUT_SIDE_RIGHT },
- { PA_CHANNEL_POSITION_TOP_CENTER, AUDIO_CHANNEL_OUT_TOP_CENTER },
- { PA_CHANNEL_POSITION_TOP_FRONT_LEFT, AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT },
- { PA_CHANNEL_POSITION_TOP_FRONT_CENTER, AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER },
- { PA_CHANNEL_POSITION_TOP_FRONT_RIGHT, AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT },
- { PA_CHANNEL_POSITION_TOP_REAR_LEFT, AUDIO_CHANNEL_OUT_TOP_BACK_LEFT },
- { PA_CHANNEL_POSITION_TOP_REAR_CENTER, AUDIO_CHANNEL_OUT_TOP_BACK_CENTER },
- { PA_CHANNEL_POSITION_TOP_REAR_RIGHT, AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT }
-};
-
-uint32_t conversion_table_input_channel[][2] = {
- { PA_CHANNEL_POSITION_MONO, AUDIO_CHANNEL_IN_MONO },
- { PA_CHANNEL_POSITION_FRONT_LEFT, AUDIO_CHANNEL_IN_LEFT },
- { PA_CHANNEL_POSITION_FRONT_RIGHT, AUDIO_CHANNEL_IN_RIGHT},
- { PA_CHANNEL_POSITION_FRONT_CENTER, AUDIO_CHANNEL_IN_FRONT },
- { PA_CHANNEL_POSITION_REAR_CENTER, AUDIO_CHANNEL_IN_BACK },
- /* Following are missing suitable counterparts on PulseAudio side. */
- { PA_CHANNEL_POSITION_FRONT_LEFT, AUDIO_CHANNEL_IN_LEFT_PROCESSED },
- { PA_CHANNEL_POSITION_FRONT_RIGHT, AUDIO_CHANNEL_IN_RIGHT_PROCESSED },
- { PA_CHANNEL_POSITION_FRONT_CENTER, AUDIO_CHANNEL_IN_FRONT_PROCESSED },
- { PA_CHANNEL_POSITION_REAR_CENTER, AUDIO_CHANNEL_IN_BACK_PROCESSED },
- { PA_CHANNEL_POSITION_SUBWOOFER, AUDIO_CHANNEL_IN_PRESSURE },
- { PA_CHANNEL_POSITION_AUX0, AUDIO_CHANNEL_IN_X_AXIS },
- { PA_CHANNEL_POSITION_AUX1, AUDIO_CHANNEL_IN_Y_AXIS },
- { PA_CHANNEL_POSITION_AUX2, AUDIO_CHANNEL_IN_Z_AXIS },
- { PA_CHANNEL_POSITION_MONO, AUDIO_CHANNEL_IN_VOICE_UPLINK },
- { PA_CHANNEL_POSITION_MONO, AUDIO_CHANNEL_IN_VOICE_DNLINK }
-};
-
-uint32_t conversion_table_format[][2] = {
- { PA_SAMPLE_U8, AUDIO_FORMAT_PCM_8_BIT },
- { PA_SAMPLE_S16LE, AUDIO_FORMAT_PCM_16_BIT },
- { PA_SAMPLE_S32LE, AUDIO_FORMAT_PCM_32_BIT },
- { PA_SAMPLE_S24LE, AUDIO_FORMAT_PCM_8_24_BIT }
-};
-
-uint32_t conversion_table_default_audio_source[][2] = {
- { AUDIO_DEVICE_IN_COMMUNICATION, AUDIO_SOURCE_MIC },
- { AUDIO_DEVICE_IN_AMBIENT, AUDIO_SOURCE_MIC },
- { AUDIO_DEVICE_IN_BUILTIN_MIC, AUDIO_SOURCE_MIC },
- { AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET, AUDIO_SOURCE_MIC },
- { AUDIO_DEVICE_IN_WIRED_HEADSET, AUDIO_SOURCE_MIC },
- { AUDIO_DEVICE_IN_AUX_DIGITAL, AUDIO_SOURCE_MIC },
- { AUDIO_DEVICE_IN_VOICE_CALL, AUDIO_SOURCE_VOICE_CALL },
- { AUDIO_DEVICE_IN_BACK_MIC, AUDIO_SOURCE_MIC },
- { AUDIO_DEVICE_IN_REMOTE_SUBMIX, AUDIO_SOURCE_REMOTE_SUBMIX },
-#ifdef QCOM_HARDWARE
- { AUDIO_DEVICE_IN_FM_RX, AUDIO_SOURCE_FM_RX },
- { AUDIO_DEVICE_IN_FM_RX_A2DP, AUDIO_SOURCE_FM_RX_A2DP },
-#endif
- { AUDIO_DEVICE_IN_ALL, AUDIO_SOURCE_DEFAULT }
-};
-
-struct string_conversion {
- uint32_t value;
- const char *str;
-};
-
-#if defined(STRING_ENTRY)
-#error STRING_ENTRY already defined somewhere, fix this lib.
-#endif
-#define STRING_ENTRY(str) { str, #str }
-/* Output devices */
-struct string_conversion string_conversion_table_output_device[] = {
- /* Each device listed here needs fancy name counterpart
- * in string_conversion_table_output_device_fancy. */
- STRING_ENTRY(AUDIO_DEVICE_OUT_EARPIECE),
- STRING_ENTRY(AUDIO_DEVICE_OUT_SPEAKER),
- STRING_ENTRY(AUDIO_DEVICE_OUT_WIRED_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_OUT_WIRED_HEADPHONE),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_SCO),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES),
- STRING_ENTRY(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER),
- STRING_ENTRY(AUDIO_DEVICE_OUT_AUX_DIGITAL),
- STRING_ENTRY(AUDIO_DEVICE_OUT_HDMI),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_OUT_USB_ACCESSORY),
- STRING_ENTRY(AUDIO_DEVICE_OUT_USB_DEVICE),
- STRING_ENTRY(AUDIO_DEVICE_OUT_REMOTE_SUBMIX),
- STRING_ENTRY(AUDIO_DEVICE_OUT_TELEPHONY_TX),
- STRING_ENTRY(AUDIO_DEVICE_OUT_LINE),
- STRING_ENTRY(AUDIO_DEVICE_OUT_HDMI_ARC),
- STRING_ENTRY(AUDIO_DEVICE_OUT_SPDIF),
- STRING_ENTRY(AUDIO_DEVICE_OUT_FM),
- STRING_ENTRY(AUDIO_DEVICE_OUT_AUX_LINE),
- STRING_ENTRY(AUDIO_DEVICE_OUT_SPEAKER_SAFE),
-#ifdef QCOM_HARDWARE
- STRING_ENTRY(AUDIO_DEVICE_OUT_FM_TX),
- STRING_ENTRY(AUDIO_DEVICE_OUT_PROXY),
-#endif
- /* Combination entries consisting of multiple devices defined above.
- * These don't require counterpart in string_conversion_table_output_device_fancy. */
- STRING_ENTRY(AUDIO_DEVICE_OUT_DEFAULT),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ALL),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ALL_A2DP),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ALL_SCO),
- STRING_ENTRY(AUDIO_DEVICE_OUT_ALL_USB),
- { 0, NULL }
-};
-
-struct string_conversion string_conversion_table_output_device_fancy[] = {
- { AUDIO_DEVICE_OUT_EARPIECE, "output-earpiece" },
- { AUDIO_DEVICE_OUT_SPEAKER, "output-speaker" },
- { AUDIO_DEVICE_OUT_SPEAKER
- | AUDIO_DEVICE_OUT_WIRED_HEADPHONE, "output-speaker+wired_headphone" },
- { AUDIO_DEVICE_OUT_WIRED_HEADSET, "output-wired_headset" },
- { AUDIO_DEVICE_OUT_WIRED_HEADPHONE, "output-wired_headphone" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_SCO, "output-bluetooth_sco" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET, "output-sco_headset" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT, "output-sco_carkit" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_A2DP, "output-a2dp" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES, "output-a2dp_headphones" },
- { AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER, "output-a2dp_speaker" },
- { AUDIO_DEVICE_OUT_AUX_DIGITAL, "output-aux_digital" },
- { AUDIO_DEVICE_OUT_HDMI, "output-hdmi" },
- { AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET, "output-analog_dock_headset" },
- { AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET, "output-digital_dock_headset" },
- { AUDIO_DEVICE_OUT_USB_ACCESSORY, "output-usb_accessory" },
- { AUDIO_DEVICE_OUT_USB_DEVICE, "output-usb_device" },
- { AUDIO_DEVICE_OUT_REMOTE_SUBMIX, "output-remote_submix" },
- { AUDIO_DEVICE_OUT_TELEPHONY_TX, "output-telephony" },
- { AUDIO_DEVICE_OUT_LINE, "output-line" },
- { AUDIO_DEVICE_OUT_HDMI_ARC, "output-hdmi_arc" },
- { AUDIO_DEVICE_OUT_SPDIF, "output-spdif" },
- { AUDIO_DEVICE_OUT_FM, "output-fm" },
- { AUDIO_DEVICE_OUT_AUX_LINE, "output-aux_line" },
- { AUDIO_DEVICE_OUT_SPEAKER_SAFE, "output-speaker_safe" },
-#ifdef QCOM_HARDWARE
- { AUDIO_DEVICE_OUT_FM_TX, "output-fm_tx" },
- { AUDIO_DEVICE_OUT_PROXY, "output-proxy" },
-#endif
- { 0, NULL }
-};
-
-/* Input devices */
-struct string_conversion string_conversion_table_input_device[] = {
- /* Each device listed here needs fancy name counterpart
- * in string_conversion_table_input_device_fancy. */
- STRING_ENTRY(AUDIO_DEVICE_IN_COMMUNICATION),
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.61.tar.bz2/README
^
|
@@ -11,14 +11,27 @@
* 4.1.x with Qualcomm extensions (tested with 4.1.2)
* 4.2.x
* 4.4.x
- * 5.1
+ * 5.x
+ * 6.0.x
Headers for defining devices and strings for different droid versions are in
-src/common/droid-util-XXX.h
+src/common/droid-util-audio.h (legacy headers for Jolla 1 in droid-util-41qc.h).
-These headers are then included in src/common/droid-util.h based on detected
-droid version. Version is defined in android-version.h, included from
-android-config.h, which is part of droid hal devel package.
+When new devices with relevant new enums appear, add enum check to configure.ac,
+for example: (the CC_CHECK_DROID_ENUM m4 macro will create define HAVE_ENUM_FOO
+if the enum FOO exists in HAL audio.h)
+ CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_OUT_IP])
+
+and then in droid-util-audio.h add the enum to proper tables with ifdefs:
+ /* string_conversion_table_output_device[] */
+ #ifdef HAVE_ENUM_AUDIO_DEVICE_OUT_IP
+ STRING_ENTRY( AUDIO_DEVICE_OUT_IP ),
+ #endif
+
+ /* string_conversion_table_output_device_fancy[] */
+ #ifdef HAVE_ENUM_AUDIO_DEVICE_OUT_IP
+ { AUDIO_DEVICE_OUT_IP, "output-ip" },
+ #endif
The purpose of droid-modules is to "replace AudioFlinger". Many hardware
adaptations use ALSA as the kernel interface, but there is no saying that
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.61.tar.bz2/configure.ac
^
|
@@ -187,6 +187,75 @@
AC_SUBST(DBUS_CFLAGS)
AC_SUBST(DBUS_LIBS)
+# Output devices
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_OUT_HDMI])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_OUT_HDMI_ARC])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_OUT_TELEPHONY_TX])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_OUT_LINE])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_OUT_SPDIF])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_OUT_AUX_LINE])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_OUT_SPEAKER_SAFE])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_OUT_FM])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_OUT_FM_TX])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_OUT_ANC_HEADSET])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_OUT_ANC_HEADPHONE])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_OUT_PROXY])
+# Added in 6.0
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_OUT_IP])
+
+# Input devices
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_IN_HDMI])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_IN_TELEPHONY_RX])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_IN_FM_TUNER])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_IN_TV_TUNER])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_IN_LINE])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_IN_SPDIF])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_IN_BLUETOOTH_A2DP])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_IN_LOOPBACK])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_IN_PROXY])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_IN_FM_RX])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_IN_FM_RX_A2DP])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_IN_ALL_USB])
+# Added in 6.0
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_DEVICE_IN_IP])
+
+# Audio sources
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_SOURCE_FM_TUNER])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_SOURCE_FM_RX])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_SOURCE_FM_RX_A2DP])
+
+# Output flags
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_OUTPUT_FLAG_NON_BLOCKING])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_OUTPUT_FLAG_HW_AV_SYNC])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_OUTPUT_FLAG_VOIP_RX])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_OUTPUT_FLAG_INCALL_MUSIC])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH])
+# Added in 6.0
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_OUTPUT_FLAG_TTS])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_OUTPUT_FLAG_RAW])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_OUTPUT_FLAG_SYNC])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_OUTPUT_FLAG_IEC958_NONAUDIO])
+
+# Input flags
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_INPUT_FLAG_NONE])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_INPUT_FLAG_FAST])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_INPUT_FLAG_HW_HOTWORD])
+# Added in 6.0
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_INPUT_FLAG_RAW])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_INPUT_FLAG_SYNC])
+
+# Channels
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_CHANNEL_OUT_SURROUND])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_CHANNEL_OUT_5POINT1_BACK])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_CHANNEL_OUT_5POINT1_SIDE])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_CHANNEL_IN_VOICE_CALL_MONO])
+
+# Formats
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_FORMAT_PCM_OFFLOAD])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_FORMAT_FLAC])
+CC_CHECK_DROID_ENUM([${DROIDHEADERS_CFLAGS}], [AUDIO_FORMAT_OPUS])
+
AC_ARG_WITH([module-dir],
AS_HELP_STRING([--with-module-dir],[Directory where to install the modules to (defaults to ${pulseaudiodir}/lib/pulse-${PA_MAJORMINOR}/modules/]),
[modlibexecdir=$withval], [modlibexecdir="${pulseaudiodir}/lib/pulse-${PA_MAJORMINOR}/modules"])
|
[-]
[+]
|
Added |
_service:tar_git:pulseaudio-modules-droid-8.0.61.tar.bz2/m4/check_droid_enum.m4
^
|
@@ -0,0 +1,21 @@
+AC_DEFUN([CC_CHECK_DROID_ENUM],
+[AC_MSG_CHECKING([if droid headers have enum $2])
+ AC_LANG_SAVE
+ AC_LANG_C
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $1"
+ AC_TRY_COMPILE(
+ [ #include <android-config.h>
+ #ifdef QCOM_BSP
+ #define QCOM_HARDWARE
+ #endif
+ #include <system/audio.h> ],
+ [ unsigned int e = $2; ],
+ cc_check_droid_enum=yes, cc_check_droid_enum=no)
+ CFLAGS="$SAVE_CFLAGS"
+ AC_LANG_RESTORE
+ AC_MSG_RESULT([$cc_check_droid_enum])
+if test x"$cc_check_droid_enum" = x"yes"; then
+ AC_DEFINE(HAVE_ENUM_$2,,[define if enum $2 is found in headers])
+fi
+])
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.61.tar.bz2/src/common/droid-util-41qc.h
^
|
@@ -22,8 +22,6 @@
#ifndef _ANDROID_UTIL_V412_H_
#define _ANDROID_UTIL_V412_H_
-#define DROID_HAL 1
-
#ifdef DROID_DEVICE_SBJ
#define QCOM_HARDWARE
#endif
|
[-]
[+]
|
Added |
_service:tar_git:pulseaudio-modules-droid-8.0.61.tar.bz2/src/common/droid-util-audio.h
^
|
@@ -0,0 +1,591 @@
+/*
+ * Copyright (C) 2017 Jolla Ltd.
+ *
+ * Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
+ *
+ * These PulseAudio Modules are free software; you can redistribute
+ * it and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+ * USA.
+ */
+
+#ifndef _DROID_UTIL_AUDIO_H_
+#define _DROID_UTIL_AUDIO_H_
+
+#ifdef QCOM_BSP
+#define QCOM_HARDWARE
+#endif
+
+#include <hardware/audio.h>
+#include <hardware_legacy/audio_policy_conf.h>
+
+#ifdef SPEAKER_DRC_ENABLED_TAG
+#define DROID_HAVE_DRC
+#endif
+
+
+#ifdef STRING_ENTRY
+#error Macro clashing with our helper macro already defined somewhere, fix this droid lib.
+#endif
+
+struct string_conversion {
+ uint32_t value;
+ const char *str;
+};
+
+#define STRING_ENTRY(str) { str, #str }
+
+// PulseAudio value - Android value
+
+uint32_t conversion_table_output_channel[][2] = {
+ { PA_CHANNEL_POSITION_MONO, AUDIO_CHANNEL_OUT_MONO },
+ { PA_CHANNEL_POSITION_FRONT_LEFT, AUDIO_CHANNEL_OUT_FRONT_LEFT },
+ { PA_CHANNEL_POSITION_FRONT_RIGHT, AUDIO_CHANNEL_OUT_FRONT_RIGHT },
+ { PA_CHANNEL_POSITION_FRONT_CENTER, AUDIO_CHANNEL_OUT_FRONT_CENTER },
+ { PA_CHANNEL_POSITION_SUBWOOFER, AUDIO_CHANNEL_OUT_LOW_FREQUENCY },
+ { PA_CHANNEL_POSITION_REAR_LEFT, AUDIO_CHANNEL_OUT_BACK_LEFT },
+ { PA_CHANNEL_POSITION_REAR_RIGHT, AUDIO_CHANNEL_OUT_BACK_RIGHT },
+ { PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER, AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER },
+ { PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER, AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER },
+ { PA_CHANNEL_POSITION_REAR_CENTER, AUDIO_CHANNEL_OUT_BACK_CENTER },
+ { PA_CHANNEL_POSITION_SIDE_LEFT, AUDIO_CHANNEL_OUT_SIDE_LEFT },
+ { PA_CHANNEL_POSITION_SIDE_RIGHT, AUDIO_CHANNEL_OUT_SIDE_RIGHT },
+ { PA_CHANNEL_POSITION_TOP_CENTER, AUDIO_CHANNEL_OUT_TOP_CENTER },
+ { PA_CHANNEL_POSITION_TOP_FRONT_LEFT, AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT },
+ { PA_CHANNEL_POSITION_TOP_FRONT_CENTER, AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER },
+ { PA_CHANNEL_POSITION_TOP_FRONT_RIGHT, AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT },
+ { PA_CHANNEL_POSITION_TOP_REAR_LEFT, AUDIO_CHANNEL_OUT_TOP_BACK_LEFT },
+ { PA_CHANNEL_POSITION_TOP_REAR_CENTER, AUDIO_CHANNEL_OUT_TOP_BACK_CENTER },
+ { PA_CHANNEL_POSITION_TOP_REAR_RIGHT, AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT }
+};
+
+uint32_t conversion_table_input_channel[][2] = {
+ { PA_CHANNEL_POSITION_MONO, AUDIO_CHANNEL_IN_MONO },
+ { PA_CHANNEL_POSITION_FRONT_LEFT, AUDIO_CHANNEL_IN_LEFT },
+ { PA_CHANNEL_POSITION_FRONT_RIGHT, AUDIO_CHANNEL_IN_RIGHT },
+ { PA_CHANNEL_POSITION_FRONT_CENTER, AUDIO_CHANNEL_IN_FRONT },
+ { PA_CHANNEL_POSITION_REAR_CENTER, AUDIO_CHANNEL_IN_BACK },
+ /* Following are missing suitable counterparts on PulseAudio side. */
+ { PA_CHANNEL_POSITION_FRONT_LEFT, AUDIO_CHANNEL_IN_LEFT_PROCESSED },
+ { PA_CHANNEL_POSITION_FRONT_RIGHT, AUDIO_CHANNEL_IN_RIGHT_PROCESSED },
+ { PA_CHANNEL_POSITION_FRONT_CENTER, AUDIO_CHANNEL_IN_FRONT_PROCESSED },
+ { PA_CHANNEL_POSITION_REAR_CENTER, AUDIO_CHANNEL_IN_BACK_PROCESSED },
+ { PA_CHANNEL_POSITION_SUBWOOFER, AUDIO_CHANNEL_IN_PRESSURE },
+ { PA_CHANNEL_POSITION_AUX0, AUDIO_CHANNEL_IN_X_AXIS },
+ { PA_CHANNEL_POSITION_AUX1, AUDIO_CHANNEL_IN_Y_AXIS },
+ { PA_CHANNEL_POSITION_AUX2, AUDIO_CHANNEL_IN_Z_AXIS },
+ { PA_CHANNEL_POSITION_MONO, AUDIO_CHANNEL_IN_VOICE_UPLINK },
+ { PA_CHANNEL_POSITION_MONO, AUDIO_CHANNEL_IN_VOICE_DNLINK }
+};
+
+uint32_t conversion_table_format[][2] = {
+ { PA_SAMPLE_U8, AUDIO_FORMAT_PCM_8_BIT },
+ { PA_SAMPLE_S16LE, AUDIO_FORMAT_PCM_16_BIT },
+ { PA_SAMPLE_S32LE, AUDIO_FORMAT_PCM_32_BIT },
+ { PA_SAMPLE_S24LE, AUDIO_FORMAT_PCM_8_24_BIT }
+};
+
+uint32_t conversion_table_default_audio_source[][2] = {
+ { AUDIO_DEVICE_IN_COMMUNICATION, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_AMBIENT, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_BUILTIN_MIC, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_WIRED_HEADSET, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_AUX_DIGITAL, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_VOICE_CALL, AUDIO_SOURCE_VOICE_CALL },
+ { AUDIO_DEVICE_IN_BACK_MIC, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_REMOTE_SUBMIX, AUDIO_SOURCE_REMOTE_SUBMIX },
+#if defined(HAVE_ENUM_AUDIO_DEVICE_IN_FM_RX) && defined(HAVE_ENUM_AUDIO_SOURCE_FM_RX)
+ { AUDIO_DEVICE_IN_FM_RX, AUDIO_SOURCE_FM_RX },
+#endif
+#if defined(HAVE_ENUM_AUDIO_DEVICE_IN_FM_TUNER) && defined(HAVE_ENUM_AUDIO_SOURCE_FM_TUNER)
+ { AUDIO_DEVICE_IN_FM_TUNER, AUDIO_SOURCE_FM_TUNER },
+#endif
+#if defined(HAVE_ENUM_AUDIO_DEVICE_IN_FM_RX_A2DP) && defined(HAVE_ENUM_AUDIO_SOURCE_FM_RX_A2DP)
+ { AUDIO_DEVICE_IN_FM_RX_A2DP, AUDIO_SOURCE_FM_RX_A2DP },
+#endif
+ { AUDIO_DEVICE_IN_ALL, AUDIO_SOURCE_DEFAULT }
+};
+
+/* Output devices */
+struct string_conversion string_conversion_table_output_device[] = {
+ /* Each device listed here needs fancy name counterpart
+ * in string_conversion_table_output_device_fancy. */
+ STRING_ENTRY( AUDIO_DEVICE_OUT_EARPIECE ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_SPEAKER ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_WIRED_HEADSET ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_WIRED_HEADPHONE ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_BLUETOOTH_SCO ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_BLUETOOTH_A2DP ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_AUX_DIGITAL ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_USB_ACCESSORY ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_USB_DEVICE ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_REMOTE_SUBMIX ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_DEFAULT ),
+
+ /* Devices which may or may not be defined for all devices,
+ * update configure.ac CC_CHECK_DROID_ENUM list if you encounter new ones. */
+#ifdef HAVE_ENUM_AUDIO_DEVICE_OUT_HDMI
+ STRING_ENTRY( AUDIO_DEVICE_OUT_HDMI ),
+#endif
+#ifdef HAVE_ENUM_AUDIO_DEVICE_OUT_HDMI_ARC
+ STRING_ENTRY( AUDIO_DEVICE_OUT_HDMI_ARC ),
+#endif
+#ifdef HAVE_ENUM_AUDIO_DEVICE_OUT_TELEPHONY_TX
+ STRING_ENTRY( AUDIO_DEVICE_OUT_TELEPHONY_TX ),
+#endif
+#ifdef HAVE_ENUM_AUDIO_DEVICE_OUT_LINE
+ STRING_ENTRY( AUDIO_DEVICE_OUT_LINE ),
+#endif
+#ifdef HAVE_ENUM_AUDIO_DEVICE_OUT_SPDIF
+ STRING_ENTRY( AUDIO_DEVICE_OUT_SPDIF ),
+#endif
+#ifdef HAVE_ENUM_AUDIO_DEVICE_OUT_AUX_LINE
+ STRING_ENTRY( AUDIO_DEVICE_OUT_AUX_LINE ),
+#endif
+#ifdef HAVE_ENUM_AUDIO_DEVICE_OUT_SPEAKER_SAFE
+ STRING_ENTRY( AUDIO_DEVICE_OUT_SPEAKER_SAFE ),
+#endif
+#ifdef HAVE_ENUM_AUDIO_DEVICE_OUT_FM
+ STRING_ENTRY( AUDIO_DEVICE_OUT_FM ),
+#endif
+#ifdef HAVE_ENUM_AUDIO_DEVICE_OUT_FM_TX
+ STRING_ENTRY( AUDIO_DEVICE_OUT_FM_TX ),
+#endif
+#ifdef HAVE_ENUM_AUDIO_DEVICE_OUT_ANC_HEADSET
+ STRING_ENTRY( AUDIO_DEVICE_OUT_ANC_HEADSET ),
+#endif
+#ifdef HAVE_ENUM_AUDIO_DEVICE_OUT_ANC_HEADPHONE
+ STRING_ENTRY( AUDIO_DEVICE_OUT_ANC_HEADPHONE ),
+#endif
+#ifdef HAVE_ENUM_AUDIO_DEVICE_OUT_PROXY
+ STRING_ENTRY( AUDIO_DEVICE_OUT_PROXY ),
+#endif
+#ifdef HAVE_ENUM_AUDIO_DEVICE_OUT_IP
+ STRING_ENTRY( AUDIO_DEVICE_OUT_IP ),
+#endif
+
+ /* Combination entries consisting of multiple devices defined above.
+ * These don't require counterpart in string_conversion_table_output_device_fancy. */
+ STRING_ENTRY( AUDIO_DEVICE_OUT_ALL ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_ALL_A2DP ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_ALL_SCO ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_ALL_USB ),
+
+ { 0, NULL }
+};
+
+struct string_conversion string_conversion_table_output_device_fancy[] = {
+ { AUDIO_DEVICE_OUT_EARPIECE, "output-earpiece" },
+ { AUDIO_DEVICE_OUT_SPEAKER, "output-speaker" },
+ { AUDIO_DEVICE_OUT_SPEAKER
+ | AUDIO_DEVICE_OUT_WIRED_HEADPHONE, "output-speaker+wired_headphone" },
+ { AUDIO_DEVICE_OUT_WIRED_HEADSET, "output-wired_headset" },
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.61.tar.bz2/src/common/droid-util.c
^
|
@@ -25,6 +25,7 @@
#include <signal.h>
#include <stdio.h>
+#include <string.h>
#ifdef HAVE_VALGRIND_MEMCHECK_H
#include <valgrind/memcheck.h>
@@ -59,6 +60,46 @@
#include "droid-util.h"
+struct droid_quirk {
+ const char *name;
+ uint32_t value;
+};
+
+struct droid_quirk valid_quirks[] = {
+ { "input_atoi", QUIRK_INPUT_ATOI },
+ { "set_parameters", QUIRK_SET_PARAMETERS },
+ { "close_input", QUIRK_CLOSE_INPUT }
+};
+
+struct pa_droid_quirks {
+ bool enabled[QUIRK_COUNT];
+};
+
+#define SLLIST_APPEND(t, head, item) \
+ do { \
+ item->next = NULL; \
+ if (!head) { \
+ head = item; \
+ } else { \
+ t *_list; \
+ for (_list = head; _list->next; _list = _list->next); \
+ _list->next = item; \
+ } \
+ } while (0)
+
+#define SLLIST_FOREACH(i, head) \
+ for (i = (head); i; i = i->next)
+
+#define SLLIST_STEAL_FIRST(i, head) \
+ do { \
+ if (head) { \
+ i = head; \
+ head = head->next; \
+ } else \
+ i = NULL; \
+ } while (0)
+
+
#define CONVERT_FUNC(TABL) \
bool pa_convert_ ## TABL (uint32_t value, pa_conversion_field_t field, uint32_t *to_value) { \
for (unsigned int i = 0; i < sizeof( conversion_table_ ## TABL )/(sizeof(uint32_t)*2); i++) { \
@@ -82,11 +123,26 @@
/* Section defining custom global configuration variables. */
#define GLOBAL_CONFIG_EXT_TAG "custom_properties"
+/* From recent audio_policy_conf.h */
+#ifndef AUDIO_HAL_VERSION_TAG
+#define AUDIO_HAL_VERSION_TAG "audio_hal_version"
+#endif
+#ifndef GAINS_TAG
+#define GAINS_TAG "gains"
+#endif
+
+#define GAIN_TAG_PREFIX "gain_"
+
+
static const char * const droid_combined_auto_outputs[3] = { "primary", "low_latency", NULL };
static const char * const droid_combined_auto_inputs[2] = { "primary", NULL };
+static void droid_config_free(pa_droid_config_audio *config);
static void droid_port_free(pa_droid_port *p);
+static pa_droid_stream *get_primary_output(pa_droid_hw_module *hw);
+static int input_stream_set_route(pa_droid_stream *s, audio_devices_t device);
+
static bool string_convert_num_to_str(const struct string_conversion *list, const uint32_t value, const char **to_str) {
pa_assert(list);
pa_assert(to_str);
@@ -118,13 +174,13 @@
char *str = NULL;
char *tmp;
-#if DROID_HAL >= 2
+#if AUDIO_API_VERSION_MAJ >= 2
if (flags & AUDIO_DEVICE_BIT_IN)
flags &= ~AUDIO_DEVICE_BIT_IN;
#endif
for (unsigned int i = 0; list[i].str; i++) {
-#if DROID_HAL >= 2
+#if AUDIO_API_VERSION_MAJ >= 2
if (list[i].value & AUDIO_DEVICE_BIT_IN) {
if (popcount(list[i].value & ~AUDIO_DEVICE_BIT_IN) != 1)
continue;
@@ -189,7 +245,7 @@
bool pa_input_device_default_audio_source(audio_devices_t input_device, audio_source_t *default_source)
{
-#if DROID_HAL >= 2
+#if AUDIO_API_VERSION_MAJ >= 2
input_device &= ~AUDIO_DEVICE_BIT_IN;
#endif
@@ -260,7 +316,7 @@
while ((entry = pa_split(str, "|", &state))) {
int32_t val;
-#if DROID_HAL >= 3
+#if AUDIO_API_VERSION_MAJ >= 3
if (pos == 0 && pa_streq(entry, "dynamic")) {
sampling_rates[pos++] = (uint32_t) -1;
pa_xfree(entry);
@@ -303,7 +359,7 @@
fail = must_have_all && unknown;
if (unknown) {
- pa_log_warn("[%s:%u] Unknown %s entries: %s", fn, ln, field, unknown);
+ pa_log_info("[%s:%u] Unknown %s entries: %s", fn, ln, field, unknown);
pa_xfree(unknown);
}
@@ -324,7 +380,7 @@
pa_assert(str);
pa_assert(formats);
-#if DROID_HAL >= 3
+#if AUDIO_API_VERSION_MAJ >= 3
/* Needs to be probed later */
if (pa_streq(str, "dynamic")) {
*formats = 0;
@@ -337,8 +393,8 @@
return check_and_log(fn, ln, "formats", count, str, unknown, false);
}
-static int parse_channels(const char *fn, const unsigned ln,
- const char *str, bool in_output, audio_channel_mask_t *channels) {
+static bool parse_channels(const char *fn, const unsigned ln,
+ const char *str, bool in_output, audio_channel_mask_t *channels) {
int count;
char *unknown = NULL;
@@ -391,7 +447,7 @@
return check_and_log(fn, ln, "flags", count, str, unknown, false);
}
-#if DROID_HAL >= 3
+#if AUDIO_API_VERSION_MAJ >= 3
static bool parse_input_flags(const char *fn, const unsigned ln,
const char *str, audio_input_flags_t *flags) {
int count;
@@ -407,6 +463,27 @@
}
#endif
+static bool parse_version(const char *fn, const unsigned ln, const char *str, uint32_t *version) {
+ uint32_t version_maj;
+ uint32_t version_min;
+
+ pa_assert(fn);
+ pa_assert(str);
+ pa_assert(version);
+
+ if ((sscanf(str, "%u.%u", &version_maj, &version_min)) != 2) {
+ pa_log("[%s:%u] Failed to parse %s (%s).", fn, ln, AUDIO_HAL_VERSION_TAG, str);
+ return false;
+ } else {
+ *version = HARDWARE_DEVICE_API_VERSION(version_maj, version_min);
+ return true;
+ }
+}
+
+static void log_parse_error(const char *fn, const unsigned ln, const char *section, const char *v) {
+ pa_log("[%s:%u] failed to parse line in section %s: unknown section (%s)", fn, ln, section, v);
+}
+
#define MAX_LINE_LENGTH (1024)
bool pa_parse_droid_audio_config(const char *filename, pa_droid_config_audio *config) {
@@ -414,6 +491,7 @@
unsigned n = 0;
bool ret = true;
char *full_line = NULL;
+ uint32_t hw_module_count = 0;
enum config_loc {
IN_ROOT = 0,
@@ -422,7 +500,12 @@
IN_HW_MODULES = 3,
IN_MODULE = 4,
IN_OUTPUT_INPUT = 5,
- IN_CONFIG = 6
+ IN_CONFIG = 6,
+ IN_MODULE_GLOBAL = 10,
+ IN_DEVICES = 20,
+ IN_DEVICES_DEVICE = 21,
+ IN_GAINS = 22,
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.61.tar.bz2/src/common/droid-util.h
^
|
@@ -39,14 +39,26 @@
#if ANDROID_VERSION_MAJOR == 4 && ANDROID_VERSION_MINOR == 1
#include "droid-util-41qc.h"
-#elif ANDROID_VERSION_MAJOR == 4 && ANDROID_VERSION_MINOR == 2
-#include "droid-util-42.h"
-#elif ANDROID_VERSION_MAJOR == 4 && ANDROID_VERSION_MINOR == 4
-#include "droid-util-44.h"
-#elif ANDROID_VERSION_MAJOR == 5 && ANDROID_VERSION_MINOR == 1
-#include "droid-util-51.h"
#else
-#error "No valid ANDROID_VERSION found."
+#include "droid-util-audio.h"
+#endif
+
+/* We currently support API version up-to 3.0 */
+#define DROID_API_VERSION_SUPPORT HARDWARE_DEVICE_API_VERSION(3, 0)
+
+#if AUDIO_DEVICE_API_VERSION_CURRENT > DROID_API_VERSION_SUPPORT
+#warning Compiling against higher audio device API version than currently supported!
+#warning Compile likely fails or module may malfunction.
+#endif
+
+#define AUDIO_API_VERSION_MAJ ((AUDIO_DEVICE_API_VERSION_CURRENT >> 8) & 0xff)
+#define AUDIO_API_VERSION_MIN (AUDIO_DEVICE_API_VERSION_CURRENT & 0xff)
+
+#define AUDIO_API_VERSION_GET_MAJ(x) ((x >> 8) & 0xff)
+#define AUDIO_API_VERSION_GET_MIN(x) (x & 0xff)
+
+#if defined(QCOM_BSP) && (AUDIO_API_VERSION_MAJ >= 3)
+#define DROID_AUDIO_HAL_USE_VSID
#endif
#define PROP_DROID_DEVICES "droid.devices"
@@ -68,6 +80,15 @@
typedef struct pa_droid_config_audio pa_droid_config_audio;
typedef struct pa_droid_config_hw_module pa_droid_config_hw_module;
+typedef struct pa_droid_quirks pa_droid_quirks;
+
+typedef enum pa_droid_hook {
+ PA_DROID_HOOK_INPUT_CHANNEL_MAP_CHANGED, /* Call data: pa_droid_stream */
+ PA_DROID_HOOK_INPUT_BUFFER_SIZE_CHANGED, /* Call data: pa_droid_stream */
+ PA_DROID_HOOK_MAX
+} pa_droid_hook_t;
+
+
struct pa_droid_hw_module {
PA_REFCNT_DECLARE;
@@ -92,7 +113,9 @@
pa_idxset *inputs;
pa_atomic_t active_outputs;
- uint32_t output_device;
+
+ pa_droid_quirks *quirks;
+ pa_hook hooks[PA_DROID_HOOK_MAX];
};
struct pa_droid_stream {
@@ -102,7 +125,11 @@
pa_sample_spec sample_spec;
pa_channel_map channel_map;
+ pa_sample_spec input_sample_spec;
+ pa_channel_map input_channel_map;
uint32_t flags;
+ uint32_t device;
+ size_t buffer_size;
struct audio_stream_out *out;
struct audio_stream_in *in;
@@ -116,11 +143,9 @@
};
#define AUDIO_MAX_SAMPLING_RATES (32)
-#define AUDIO_MAX_HW_MODULES (8)
-#define AUDIO_MAX_INPUTS (8)
-#define AUDIO_MAX_OUTPUTS (8)
typedef struct pa_droid_config_global {
+ uint32_t audio_hal_version;
audio_devices_t attached_output_devices;
audio_devices_t default_output_device;
audio_devices_t attached_input_devices;
@@ -129,41 +154,46 @@
typedef struct pa_droid_config_output {
const pa_droid_config_hw_module *module;
- char name[AUDIO_HARDWARE_MODULE_ID_MAX_LEN];
+ char *name;
uint32_t sampling_rates[AUDIO_MAX_SAMPLING_RATES]; /* (uint32_t) -1 -> dynamic */
audio_channel_mask_t channel_masks; /* 0 -> dynamic */
audio_format_t formats; /* 0 -> dynamic */
audio_devices_t devices;
audio_output_flags_t flags;
+
+ struct pa_droid_config_output *next;
} pa_droid_config_output;
typedef struct pa_droid_config_input {
const pa_droid_config_hw_module *module;
- char name[AUDIO_HARDWARE_MODULE_ID_MAX_LEN];
+ char *name;
uint32_t sampling_rates[AUDIO_MAX_SAMPLING_RATES]; /* (uint32_t) -1 -> dynamic */
audio_channel_mask_t channel_masks; /* 0 -> dynamic */
audio_format_t formats; /* 0 -> dynamic */
audio_devices_t devices;
-#if DROID_HAL >= 3
+#if AUDIO_API_VERSION_MAJ >= 3
audio_input_flags_t flags;
#endif
+
+ struct pa_droid_config_input *next;
} pa_droid_config_input;
struct pa_droid_config_hw_module {
const pa_droid_config_audio *config;
- char name[AUDIO_HARDWARE_MODULE_ID_MAX_LEN];
- pa_droid_config_output outputs[AUDIO_MAX_OUTPUTS];
- uint32_t outputs_size;
- pa_droid_config_input inputs[AUDIO_MAX_INPUTS];
- uint32_t inputs_size;
+ char *name;
+ /* If global config is not defined for module, use root global config. */
+ pa_droid_config_global *global_config;
+ pa_droid_config_output *outputs;
+ pa_droid_config_input *inputs;
+
+ struct pa_droid_config_hw_module *next;
};
struct pa_droid_config_audio {
- pa_droid_config_global global_config;
- pa_droid_config_hw_module hw_modules[AUDIO_MAX_HW_MODULES];
- uint32_t hw_modules_size;
+ pa_droid_config_global *global_config;
+ pa_droid_config_hw_module *hw_modules;
};
@@ -233,6 +263,13 @@
#define PA_DROID_OUTPUT_PARKING "output-parking"
#define PA_DROID_INPUT_PARKING "input-parking"
+enum pa_droid_quirk_type {
+ QUIRK_INPUT_ATOI,
+ QUIRK_SET_PARAMETERS,
+ QUIRK_CLOSE_INPUT,
+ QUIRK_COUNT
+};
+
/* Open hardware module */
/* 'config' can be NULL if it is assumed that hw module with module_id already is open. */
/* if opening of hw_module succeeds, config ownership is transferred to hw_module and config
@@ -245,6 +282,10 @@
bool pa_droid_hw_module_try_lock(pa_droid_hw_module *hw);
void pa_droid_hw_module_unlock(pa_droid_hw_module *hw);
+bool pa_droid_quirk_parse(pa_droid_hw_module *hw, const char *quirks);
+bool pa_droid_quirk(pa_droid_hw_module *hw, enum pa_droid_quirk_type quirk);
+void pa_droid_quirk_log(pa_droid_hw_module *hw);
+
/* Conversion helpers */
typedef enum {
CONV_FROM_PA,
@@ -283,8 +324,8 @@
/* Profiles */
pa_droid_profile_set *pa_droid_profile_set_new(const pa_droid_config_hw_module *module);
pa_droid_profile_set *pa_droid_profile_set_combined_new(const pa_droid_config_hw_module *module,
- const pa_strlist *outputs,
- const pa_strlist *inputs);
+ pa_strlist *outputs,
+ pa_strlist *inputs);
void pa_droid_profile_set_free(pa_droid_profile_set *ps);
pa_droid_profile *pa_droid_profile_new(pa_droid_profile_set *ps, const pa_droid_config_output *output, const pa_droid_config_input *input);
@@ -312,6 +353,8 @@
/* Pretty audio source names */
bool pa_droid_audio_source_name(audio_source_t value, const char **to_str);
+pa_hook *pa_droid_hooks(pa_droid_hw_module *hw);
+
/* Module operations */
int pa_droid_set_parameters(pa_droid_hw_module *hw, const char *parameters);
@@ -328,29 +371,44 @@
audio_output_flags_t flags,
audio_devices_t devices);
-/* Set routing to the output stream, with following side-effects:
+/* Set routing to the input or output stream, with following side-effects:
+ * Output:
* - if routing is set to primary output stream, set routing to all other
* open streams as well
* - if routing is set to non-primary stream and primary stream exists, do nothing
* - if routing is set to non-primary stream and primary stream doesn't exist, set routing
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.61.tar.bz2/src/droid/droid-sink.c
^
|
@@ -95,7 +95,7 @@
char *voice_property_key;
char *voice_property_value;
pa_sink_input *voice_control_sink_input;
- pa_subscription *sink_input_subscription;
+ pa_hook_slot *sink_input_volume_changed_hook_slot;
pa_hook_slot *sink_input_put_hook_slot;
pa_hook_slot *sink_input_unlink_hook_slot;
@@ -213,7 +213,7 @@
routing = u->primary_devices | u->extra_devices;
- pa_droid_stream_set_output_route(u->stream, routing);
+ pa_droid_stream_set_route(u->stream, routing);
}
static bool parse_device_list(const char *str, audio_devices_t *dst) {
@@ -255,7 +255,7 @@
* here it's okay, as long as mute time isn't configured too strictly. */
p = pa_memblock_acquire(u->silence.memblock);
- wrote = u->stream->out->write(u->stream->out, (const uint8_t*) p + u->silence.index, u->silence.length);
+ wrote = pa_droid_stream_write(u->stream, (const uint8_t *) p + u->silence.index, u->silence.length);
pa_memblock_release(u->silence.memblock);
u->write_time = pa_rtclock_now() - u->write_time;
@@ -280,7 +280,7 @@
for (;;) {
p = pa_memblock_acquire(c.memblock);
- wrote = u->stream->out->write(u->stream->out, (const uint8_t*) p + c.index, c.length);
+ wrote = pa_droid_stream_write(u->stream, (const uint8_t *) p + c.index, c.length);
pa_memblock_release(c.memblock);
if (wrote < 0) {
@@ -633,11 +633,11 @@
pa_droid_hw_module_unlock(u->hw_module);
u->use_hw_volume = (ret == 0);
+ pa_log_debug("Using %s volume control with %s",
+ u->use_hw_volume ? "hardware" : "software", u->sink->name);
- if (pa_droid_stream_is_primary(u->stream)) {
- /* Apply callbacks */
- pa_droid_sink_set_voice_control(u->sink, false);
- }
+ if (u->use_hw_volume && pa_droid_stream_is_primary(u->stream))
+ pa_sink_set_set_volume_callback(u->sink, sink_set_volume_cb);
}
static void set_sink_name(pa_modargs *ma, pa_sink_new_data *data, const char *module_id) {
@@ -661,9 +661,22 @@
}
}
+static bool sink_input_is_voice_control(struct userdata *u, pa_sink_input *si) {
+ const char *val;
+
+ pa_assert(u);
+ pa_assert(si);
+
+ if ((val = pa_proplist_gets(si->proplist, u->voice_property_key))) {
+ if (pa_streq(val, u->voice_property_value))
+ return true;
+ }
+
+ return false;
+}
+
/* Called from main thread */
static pa_sink_input *find_volume_control_sink_input(struct userdata *u) {
- const char *val;
uint32_t idx;
pa_sink_input *i;
@@ -672,44 +685,31 @@
pa_assert(u->sink);
PA_IDXSET_FOREACH(i, u->sink->inputs, idx) {
- if ((val = pa_proplist_gets(i->proplist, u->voice_property_key))) {
- if (pa_streq(val, u->voice_property_value)) {
- return i;
- }
- }
+ if (sink_input_is_voice_control(u, i))
+ return i;
}
return NULL;
}
/* Called from main thread */
-static void sink_input_subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, struct userdata *u) {
- pa_sink_input *i;
+static pa_hook_result_t sink_input_volume_changed_hook_cb(pa_core *c, pa_sink_input *sink_input, struct userdata *u) {
+ pa_assert(c);
+ pa_assert(sink_input);
+ pa_assert(u);
- pa_assert_ctl_context();
+ if (!u->use_voice_volume)
+ return PA_HOOK_OK;
- if (t != (PA_SUBSCRIPTION_EVENT_SINK_INPUT | PA_SUBSCRIPTION_EVENT_NEW) &&
- t != (PA_SUBSCRIPTION_EVENT_SINK_INPUT | PA_SUBSCRIPTION_EVENT_CHANGE) &&
- t != (PA_SUBSCRIPTION_EVENT_SINK_INPUT | PA_SUBSCRIPTION_EVENT_REMOVE))
- return;
+ if (!u->voice_control_sink_input && sink_input_is_voice_control(u, sink_input))
+ u->voice_control_sink_input = sink_input;
- if (!(i = pa_idxset_get_by_index(c->sink_inputs, idx)))
- return;
+ if (u->voice_control_sink_input != sink_input)
+ return PA_HOOK_OK;
- if (t == (PA_SUBSCRIPTION_EVENT_SINK_INPUT | PA_SUBSCRIPTION_EVENT_NEW)) {
- if (!u->voice_control_sink_input && (i = find_volume_control_sink_input(u))) {
- u->voice_control_sink_input = i;
- set_voice_volume(u, i);
- }
- }
- else if (t == (PA_SUBSCRIPTION_EVENT_SINK_INPUT | PA_SUBSCRIPTION_EVENT_CHANGE)) {
- if (u->voice_control_sink_input == i)
- set_voice_volume(u, i);
- }
- else if (t == (PA_SUBSCRIPTION_EVENT_SINK_INPUT | PA_SUBSCRIPTION_EVENT_REMOVE)) {
- if (u->voice_control_sink_input == i)
- u->voice_control_sink_input = NULL;
- }
+ set_voice_volume(u, sink_input);
+
+ return PA_HOOK_OK;
}
/* Called from main thread */
@@ -725,7 +725,7 @@
pa_assert(u->sink == sink);
if (!pa_droid_stream_is_primary(u->stream)) {
- pa_log_debug("skipping voice volume control with non-primary stream");
+ pa_log_debug("Skipping voice volume control with non-primary sink %s", u->sink->name);
return;
}
@@ -735,18 +735,15 @@
u->use_voice_volume = enable;
if (u->use_voice_volume) {
- pa_log_debug("Using voice volume control for %s", u->sink->name);
- pa_sink_set_set_volume_callback(u->sink, NULL);
+ pa_log_debug("Using voice volume control with %s", u->sink->name);
- /* Susbcription tracking voice call volume control sink-input is set up when
- * voice volume control is enabled. In case volume control sink-input has already
- * connected to the sink, check for the sink-input here as well. */
-
- if (!u->sink_input_subscription)
- u->sink_input_subscription = pa_subscription_new(u->core,
- PA_SUBSCRIPTION_MASK_SINK_INPUT,
- (pa_subscription_cb_t) sink_input_subscription_cb,
- u);
+ pa_assert(!u->sink_input_volume_changed_hook_slot);
+
+ if (u->use_hw_volume)
+ pa_sink_set_set_volume_callback(u->sink, NULL);
+
+ u->sink_input_volume_changed_hook_slot = pa_hook_connect(&u->core->hooks[PA_CORE_HOOK_SINK_INPUT_VOLUME_CHANGED],
+ PA_HOOK_LATE+10, (pa_hook_cb_t) sink_input_volume_changed_hook_cb, u);
if ((i = find_volume_control_sink_input(u))) {
u->voice_control_sink_input = i;
@@ -754,19 +751,17 @@
}
} else {
- if (u->sink_input_subscription) {
- pa_subscription_free(u->sink_input_subscription);
- u->sink_input_subscription = NULL;
- u->voice_control_sink_input = NULL;
- }
+ pa_assert(u->sink_input_volume_changed_hook_slot);
- if (u->use_hw_volume) {
- pa_log_debug("Using hardware volume control for %s", u->sink->name);
+ u->voice_control_sink_input = NULL;
+ pa_hook_slot_free(u->sink_input_volume_changed_hook_slot);
+ u->sink_input_volume_changed_hook_slot = NULL;
+
+ pa_log_debug("Using %s volume control with %s",
+ u->use_hw_volume ? "hardware" : "software", u->sink->name);
+
+ if (u->use_hw_volume)
pa_sink_set_set_volume_callback(u->sink, sink_set_volume_cb);
- } else {
- pa_log_debug("Using software volume control for %s", u->sink->name);
- pa_sink_set_set_volume_callback(u->sink, NULL);
- }
}
}
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.61.tar.bz2/src/droid/droid-source.c
^
|
@@ -50,6 +50,7 @@
#include <pulsecore/thread-mq.h>
#include <pulsecore/rtpoll.h>
#include <pulsecore/time-smoother.h>
+#include <pulsecore/resampler.h>
#include "droid-source.h"
#include "droid-util.h"
@@ -66,16 +67,24 @@
pa_memchunk memchunk;
audio_devices_t primary_devices;
- bool routing_changes_enabled;
+ size_t source_buffer_size;
size_t buffer_size;
pa_usec_t timestamp;
+ pa_hook_slot *input_buffer_size_changed_slot;
+ pa_hook_slot *input_channel_map_changed_slot;
+ pa_resampler *resampler;
+
pa_droid_card_data *card_data;
pa_droid_hw_module *hw_module;
pa_droid_stream *stream;
};
+enum {
+ SOURCE_MESSAGE_DO_ROUTING = PA_SOURCE_MESSAGE_MAX
+};
+
#define DEFAULT_MODULE_ID "primary"
#define DROID_AUDIO_SOURCE "droid.audio_source"
@@ -83,46 +92,23 @@
static void userdata_free(struct userdata *u);
-static int do_routing(struct userdata *u, audio_devices_t devices, bool force) {
+static int do_routing(struct userdata *u, audio_devices_t devices) {
int ret;
- pa_proplist *p;
- const char *source_str;
audio_devices_t old_device;
- audio_source_t source;
pa_assert(u);
pa_assert(u->stream);
- if (!force && !u->routing_changes_enabled) {
- pa_log_debug("Skipping routing change.");
- return 0;
- }
-
- if (u->primary_devices == devices) {
- if (force)
- pa_log_debug("Refresh active device routing.");
- else
- return 0;
- }
+ if (u->primary_devices == devices)
+ pa_log_debug("Refresh active device routing.");
old_device = u->primary_devices;
u->primary_devices = devices;
- ret = pa_droid_stream_set_input_route(u->stream, devices, &source);
+ ret = pa_droid_stream_set_route(u->stream, devices);
if (ret < 0)
u->primary_devices = old_device;
- else {
- if (source != (uint32_t) -1)
- pa_assert_se(pa_droid_audio_source_name(source, &source_str));
- else
- source_str = DROID_AUDIO_SOURCE_UNDEFINED;
-
- p = pa_proplist_new();
- pa_proplist_sets(p, DROID_AUDIO_SOURCE, source_str);
- pa_source_update_proplist(u->source, PA_UPDATE_REPLACE, p);
- pa_proplist_free(p);
- }
return ret;
}
@@ -161,7 +147,7 @@
chunk.memblock = pa_memblock_new(u->core->mempool, (size_t) u->buffer_size);
p = pa_memblock_acquire(chunk.memblock);
- readd = u->stream->in->read(u->stream->in, (uint8_t*) p, pa_memblock_get_length(chunk.memblock));
+ readd = pa_droid_stream_read(u->stream, p, pa_memblock_get_length(chunk.memblock));
pa_memblock_release(chunk.memblock);
if (readd < 0) {
@@ -174,6 +160,19 @@
chunk.index = 0;
chunk.length = readd;
+ if (u->resampler) {
+ pa_memchunk rchunk;
+
+ pa_resampler_run(u->resampler, &chunk, &rchunk);
+
+ if (rchunk.length > 0)
+ pa_source_post(u->source, &rchunk);
+ if (rchunk.memblock)
+ pa_memblock_unref(rchunk.memblock);
+
+ goto end;
+ }
+
if (chunk.length > 0)
pa_source_post(u->source, &chunk);
@@ -198,8 +197,6 @@
u->timestamp = pa_rtclock_now();
- u->stream->in->common.standby(&u->stream->in->common);
-
for (;;) {
int ret;
@@ -262,24 +259,37 @@
struct userdata *u = PA_SOURCE(o)->userdata;
switch (code) {
+ case SOURCE_MESSAGE_DO_ROUTING: {
+ audio_devices_t device = PA_PTR_TO_UINT(data);
+
+ pa_assert(PA_SOURCE_IS_OPENED(u->source->thread_info.state));
+
+ pa_droid_stream_suspend(u->stream, true);
+ do_routing(u, device);
+ pa_droid_stream_suspend(u->stream, false);
+ break;
+ }
+
case PA_SOURCE_MESSAGE_SET_STATE: {
switch ((pa_source_state_t) PA_PTR_TO_UINT(data)) {
case PA_SOURCE_SUSPENDED: {
int r;
- pa_assert(PA_SOURCE_IS_OPENED(u->source->thread_info.state));
-
- if ((r = suspend(u)) < 0)
- return r;
+ if (PA_SOURCE_IS_OPENED(u->source->thread_info.state)) {
+ if ((r = suspend(u)) < 0)
+ return r;
+ }
break;
}
case PA_SOURCE_IDLE:
- break;
+ /* Fall through */
case PA_SOURCE_RUNNING: {
- unsuspend(u);
- u->timestamp = pa_rtclock_now();
+ if (u->source->thread_info.state == PA_SOURCE_SUSPENDED) {
+ unsuspend(u);
+ u->timestamp = pa_rtclock_now();
+ }
break;
}
@@ -301,7 +311,7 @@
return pa_source_process_msg(o, code, data, offset, chunk);
}
-static int droid_source_set_port(pa_source *s, pa_device_port *p, bool force) {
+static int source_set_port_cb(pa_source *s, pa_device_port *p) {
struct userdata *u = s->userdata;
pa_droid_port_data *data;
@@ -320,33 +330,13 @@
pa_log_debug("Source set port %u", data->device);
- return do_routing(u, data->device, force);
-}
-
-int pa_droid_source_set_port(pa_source *s, pa_device_port *p) {
- return droid_source_set_port(s, p, true);
-}
-
-static int source_set_port_cb(pa_source *s, pa_device_port *p) {
- return droid_source_set_port(s, p, false);
-}
-
-static void source_set_voicecall_source_port(struct userdata *u) {
- pa_device_port *port;
- pa_droid_port_data *data;
- void *state;
-
- pa_assert(u);
- pa_assert(u->source);
-
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.61.tar.bz2/src/droid/droid-source.h
^
|
@@ -53,7 +53,4 @@
pa_card *card);
void pa_droid_source_free(pa_source *s);
-void pa_droid_source_set_routing(pa_source *s, bool enabled);
-int pa_droid_source_set_port(pa_source *s, pa_device_port *p);
-
#endif
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.61.tar.bz2/src/droid/module-droid-card.c
^
|
@@ -76,12 +76,13 @@
"rate=<sample rate> "
"output_flags=<flags for sink> "
"module_id=<which droid hw module to load, default primary> "
- "voice_source_routing=<route source ports during voice call, default false> "
+ "voice_source_routing=<always true, parameter left for compatibility> "
"deferred_volume=<synchronize software and hardware volume changes to avoid momentary jumps?> "
"config=<location for droid audio configuration> "
"voice_property_key=<proplist key searched for sink-input that should control voice call volume> "
"voice_property_value=<proplist value for the key for voice control sink-input> "
- "combine=<comma separated list of outputs that should be merged to one profile. defaults to none>"
+ "combine=<comma separated list of outputs that should be merged to one profile. defaults to none> "
+ "quirks=<comma separated list of quirks to enable/disable>"
);
static const char* const valid_modargs[] = {
@@ -112,6 +113,7 @@
"voice_property_key",
"voice_property_value",
"combine",
+ "quirks",
NULL,
};
@@ -149,9 +151,6 @@
pa_droid_card_data card_data;
pa_droid_profile *old_profile;
- pa_source *voicecall_source;
-
- bool voice_source_routing;
pa_modargs *modargs;
pa_card *card;
@@ -259,7 +258,6 @@
static int set_parameters_cb(pa_droid_card_data *card_data, const char *str) {
struct userdata *u;
- int ret;
pa_assert(card_data);
pa_assert_se((u = card_data->userdata));
@@ -403,7 +401,6 @@
}
static void park_profile(pa_droid_profile *dp) {
- struct profile_data *data;
pa_droid_mapping *am;
uint32_t idx;
@@ -445,8 +442,6 @@
/* call mode specialities */
if (enabling) {
pa_droid_sink_set_voice_control(am_output->sink, true);
- if (am_input && !u->voice_source_routing)
- pa_droid_source_set_routing(am_input->source, false);
if (am_input && am_input->input->devices & AUDIO_DEVICE_IN_VOICE_CALL &&
(cp = pa_hashmap_get(u->card->profiles, VOICE_RECORD_PROFILE_NAME))) {
if (cp->available == PA_AVAILABLE_NO) {
@@ -456,8 +451,6 @@
}
} else {
pa_droid_sink_set_voice_control(am_output->sink, false);
- if (am_input && !u->voice_source_routing)
- pa_droid_source_set_routing(am_input->source, true);
if (am_input && am_input->input->devices & AUDIO_DEVICE_IN_VOICE_CALL &&
(cp = pa_hashmap_get(u->card->profiles, VOICE_RECORD_PROFILE_NAME))) {
if (cp->available == PA_AVAILABLE_YES) {
@@ -470,105 +463,6 @@
return true;
}
-#if (DROID_HAL == 1) || \
- (defined(QCOM_HARDWARE) && ANDROID_VERSION_MAJOR == 5 && ANDROID_VERSION_MINOR == 1)
-static bool voicecall_record_profile_event_cb(struct userdata *u, pa_droid_profile *p, bool enabling) {
- pa_queue *source_outputs = NULL;
- pa_droid_mapping *am;
-
- pa_assert_ctl_context();
- pa_assert(u);
- pa_assert(p);
- pa_assert(u->old_profile);
-
- if (enabling) {
- /* don't do anything if voicecall source has already been created. */
- if (u->voicecall_source)
- return true;
-
- pa_log_info("Enabling voice call record.");
-
- am = pa_droid_idxset_get_primary(u->old_profile->input_mappings);
-
- if (am && am->source) {
- source_outputs = pa_source_move_all_start(am->source, source_outputs);
- pa_droid_source_free(am->source);
- am->source = NULL;
- }
-
- u->voicecall_source = pa_droid_source_new(u->module, u->modargs, __FILE__, AUDIO_DEVICE_IN_VOICE_CALL, &u->card_data, am, u->card);
- if (!u->voicecall_source)
- pa_log("Failed to enable voice call recording.");
-
- if (u->voicecall_source && source_outputs) {
- pa_source_move_all_finish(u->voicecall_source, source_outputs, false);
- source_outputs = NULL;
- }
-
- } else {
- pa_log_info("Disabling voice call record.");
-
- if (u->voicecall_source) {
- source_outputs = pa_source_move_all_start(u->voicecall_source, source_outputs);
- pa_droid_source_free(u->voicecall_source);
- u->voicecall_source = NULL;
- }
-
- am = pa_droid_idxset_get_primary(u->old_profile->input_mappings);
-
- if (am && !am->source) {
- am->source = pa_droid_source_new(u->module, u->modargs, __FILE__, (audio_devices_t) 0, &u->card_data, am, u->card);
-
- if (source_outputs && am->source) {
- pa_source_move_all_finish(am->source, source_outputs, false);
- source_outputs = NULL;
- }
- }
- }
-
- if (source_outputs)
- pa_source_move_all_fail(source_outputs);
-
- return true;
-}
-
-#else
-
-static bool voicecall_record_profile_event_cb(struct userdata *u, pa_droid_profile *p, bool enabling) {
- pa_droid_mapping *am;
- pa_device_port *port;
- const char *port_name;
-
- pa_assert_ctl_context();
- pa_assert(u);
- pa_assert(p);
- pa_assert(u->old_profile);
-
- if (!(am = pa_droid_idxset_get_primary(u->old_profile->input_mappings))) {
- pa_log("Active profile doesn't have primary input device. Cannot enable record profile.");
- return false;
- }
-
- if (!am->source) {
- pa_log("No active source, refusing to switch source port.");
- return false;
- }
-
- pa_source_assert_ref(am->source);
-
- pa_assert_se(pa_droid_input_port_name(enabling ? AUDIO_DEVICE_IN_VOICE_CALL : AUDIO_DEVICE_IN_DEFAULT,
- &port_name));
- pa_assert_se((port = pa_hashmap_get(am->source->ports, port_name)));
-
- if (pa_droid_source_set_port(am->source, port) != 0)
- return false;
-
- pa_hook_fire(&u->core->hooks[PA_CORE_HOOK_SOURCE_PORT_CHANGED], am->source);
-
- return true;
-}
-#endif
-
#ifdef DROID_AUDIO_HAL_USE_VSID
static bool voicecall_vsid(struct userdata *u, pa_droid_profile *p, uint32_t vsid, bool enabling)
{
@@ -781,9 +675,9 @@
pa_droid_config_audio *config = NULL;
const char *module_id;
bool namereg_fail = false;
- bool voice_source_routing = false;
pa_card_profile *virtual;
const char *combine;
+ const char *quirks;
pa_assert(m);
@@ -796,22 +690,26 @@
struct userdata *u = pa_xnew0(struct userdata, 1);
u->core = m->core;
+ m->userdata = u;
if (!(config = pa_droid_config_load(ma)))
goto fail;
- if (pa_modargs_get_value_boolean(ma, "voice_source_routing", &voice_source_routing) < 0) {
- pa_log("Failed to parse voice_source_routing argument.");
- goto fail;
- }
- u->voice_source_routing = voice_source_routing;
-
|