[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -2,7 +2,7 @@
<service name="tar_git">
<param name="url">https://github.com/mer-hybris/pulseaudio-modules-droid.git</param>
<param name="branch">master</param>
- <param name="revision">9c6842e7d9b19dc751cc078dc137f1a47f19332b</param>
+ <param name="revision">60ebe93c3432ed52569dc7e033e5a3405f52eec0</param>
<param name="token"/>
<param name="debian">N</param>
<param name="dumb">N</param>
|
[-]
[+]
|
Deleted |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/Makefile.am
^
|
@@ -1,10 +0,0 @@
-SUBDIRS = src
-
-ACLOCAL_AMFLAGS = -I m4
-
-$(top_srcdir)/.version:
- echo $(VERSION) > $@-t && mv $@-t $@
-
-dist-hook:
- echo $(VERSION) > $(distdir)/.tarball-version
- echo $(VERSION) > $(distdir)/.version
|
[-]
[+]
|
Deleted |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/bootstrap.sh
^
|
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-autoreconf -vfi
-
-if type -p colorgcc > /dev/null ; then
- export CC=colorgcc
-fi
-
-export CFLAGS=${CFLAGS-"-g -O0"}
-
-if test "x$NOCONFIGURE" = "x"; then
- ./configure --enable-maintainer-mode --disable-processing "$@"
- make clean
-fi
|
[-]
[+]
|
Deleted |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/configure.ac
^
|
@@ -1,336 +0,0 @@
-AC_PREREQ(2.60)
-
-AC_INIT([pulseaudio-modules-droid], [m4_esyscmd(./git-version-gen .tarball-version)], [mer-general@lists.merproject.org])
-AC_CONFIG_HEADER([config.h])
-AM_INIT_AUTOMAKE([foreign -Wall silent-rules])
-AC_CONFIG_MACRO_DIR(m4)
-AM_SILENT_RULES([yes])
-
-AS_IF([! test -n "$VERSION"], [
- AC_MSG_ERROR([git-version-gen failed])
-])
-
-if type -p stow > /dev/null && test -d /usr/local/stow ; then
- AC_MSG_NOTICE([*** Found /usr/local/stow: default install prefix set to /usr/local/stow/${PACKAGE_NAME}-${PACKAGE_VERSION} ***])
- ac_default_prefix="/usr/local/stow/${PACKAGE_NAME}-${PACKAGE_VERSION}"
-fi
-
-AC_PROG_CC
-AC_PROG_CC_C99
-AM_PROG_CC_C_O
-AC_PROG_GCC_TRADITIONAL
-
-m4_define(pa_major, `echo $VERSION | cut -d. -f1 | cut -d- -f1`)
-m4_define(pa_minor, `echo $VERSION | cut -d. -f2 | cut -d- -f1`)
-m4_define(pa_module_version, `echo $VERSION | cut -d. -f3 | cut -d- -f1`)
-
-AC_SUBST(PA_MAJOR, pa_major)
-AC_SUBST(PA_MAJORMINOR, pa_major.pa_minor)
-AC_SUBST(PA_MODULE_VERSION, pa_module_version)
-
-DESIRED_FLAGS="-Wall -W -Wextra -pedantic -pipe -Wno-long-long -Winline -Wvla -Wno-overlength-strings -Wunsafe-loop-optimizations -Wundef -Wformat=2 -Wlogical-op -Wsign-compare -Wpacked -Wformat-security -Wmissing-include-dirs -Wformat-nonliteral -Wold-style-definition -Wpointer-arith -Winit-self -Wfloat-equal -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wmissing-declarations -Wmissing-noreturn -Wshadow -Wendif-labels -Wstrict-aliasing=2 -Wwrite-strings -Wno-unused-parameter -ffast-math -Wp,-D_FORTIFY_SOURCE=2 -fno-common -fdiagnostics-show-option" # PulseAudio 0.9.15 usess same + -Wcast-align -Wdeclaration-after-statement
-
-for flag in $DESIRED_FLAGS ; do
- CC_CHECK_CFLAGS([$flag], [CFLAGS="$CFLAGS $flag"])
-done
-
-# FIXME: we should push that as .m4 macro installed by pulseaudio-dev package
-# Native atomic operation support
-AC_ARG_ENABLE([atomic-arm-linux-helpers],
- AS_HELP_STRING([--disable-atomic-arm-linux-helpers],[use inline asm or libatomic_ops instead]),
- [
- case "${enableval}" in
- yes) atomic_arm_linux_helpers=yes ;;
- no) atomic_arm_linux_helpers=no ;;
- *) AC_MSG_ERROR(bad value ${enableval} for --disable-atomic-arm-linux-helpers) ;;
- esac
- ],
- [atomic_arm_linux_helpers=auto])
-
-AC_ARG_ENABLE([atomic-arm-memory-barrier],
- AS_HELP_STRING([--enable-atomic-arm-memory-barrier],[only really needed in SMP arm systems]),
- [
- case "${enableval}" in
- yes) AC_DEFINE_UNQUOTED(ATOMIC_ARM_MEMORY_BARRIER_ENABLED, 1, [Enable memory barriers]) ;;
- no) ;;
- *) AC_MSG_ERROR(bad value ${enableval} for --disable-atomic-arm-linux-helpers) ;;
- esac
- ],)
-
-AC_CANONICAL_HOST
-AC_DEFINE_UNQUOTED([CANONICAL_HOST], "$host", [Canonical host string.])
-
-AC_MSG_CHECKING([target operating system])
-
-case $host in
- *-*-linux*)
- AC_MSG_RESULT([linux])
- pulse_target_os=linux
- ;;
- *)
- AC_MSG_RESULT([unknown])
- pulse_target_os=unknown
- ;;
-esac
-
-# If everything else fails use libatomic_ops
-need_libatomic_ops=yes
-
-AC_MSG_CHECKING([whether $CC knows __sync_bool_compare_and_swap()])
-AC_LANG_CONFTEST([int main() { int a = 4; __sync_bool_compare_and_swap(&a, 4, 5); }])
-$CC conftest.c $CFLAGS -o conftest > /dev/null 2> /dev/null
-ret=$?
-rm -f conftest.o conftest
-if test $ret -eq 0 ; then
- AC_DEFINE([HAVE_ATOMIC_BUILTINS], 1, [Have __sync_bool_compare_and_swap() and friends.])
- AC_MSG_RESULT([yes])
- need_libatomic_ops=no
-else
- AC_MSG_RESULT([no])
- # HW specific atomic ops stuff
- AC_MSG_CHECKING([architecture for native atomic operations])
- case $host_cpu in
- arm*)
- AC_MSG_RESULT([arm])
- AC_MSG_CHECKING([compiler support for arm inline asm atomic operations])
- AC_LANG_CONFTEST([[int main()
- {
- volatile int a=0;
- int o=0, n=1, r;
- asm volatile ("ldrex %0, [%1]\n"
- "subs %0, %0, %2\n"
- "strexeq %0, %3, [%1]\n"
- : "=&r" (r)
- : "r" (&a), "Ir" (o), "r" (n)
- : "cc");
- return (a==1 ? 0 : -1);
- }]])
- $CC conftest.c $CFLAGS -o conftest > /dev/null 2>&1
- ret=$?
- rm -f conftest.o conftest
- if test $ret -eq 0 ; then
- AC_DEFINE([ATOMIC_ARM_INLINE_ASM], 1, [Have ARMv6 instructions.])
- AC_MSG_RESULT([yes])
- need_libatomic_ops=no
- else
- # We really want inline asm atomic operations!!
- echo "ERROR No ARMv6 instructions available check your compiler!!!"
- exit 1
-
- AC_MSG_CHECKING([whether we can use Linux kernel helpers])
- # The Linux kernel helper functions have been there since 2.6.16. However
- # compile time checking for kernel version in cross compile environment
- # (which is usually the case for arm cpu) is tricky (or impossible).
- if test "x$pulse_target_os" = "xlinux" && test "x$atomic_arm_linux_helpers" != "xno"; then
- AC_MSG_RESULT([yes])
- AC_DEFINE_UNQUOTED(ATOMIC_ARM_LINUX_HELPERS, 1, [special arm linux implementation])
- need_libatomic_ops=no
- else
- AC_MSG_RESULT([no])
- fi
- fi
- ;;
- *)
- AC_MSG_RESULT([unknown])
- ;;
- esac
-fi
-
-AC_MSG_CHECKING([whether we need libatomic_ops])
-if test "x$need_libatomic_ops" = "xyes"; then
- AC_MSG_RESULT([yes])
- AC_CHECK_HEADERS([atomic_ops.h], [], [
- AC_MSG_ERROR([*** libatomic-ops headers not found])
- ])
-
- # Win32 does not need the lib and breaks horribly if we try to include it
- if test "x$os_is_win32" != "x1" ; then
- LIBS="$LIBS -latomic_ops"
- fi
-else
- AC_MSG_RESULT([no])
-fi
-
-CC_CHECK_TLS
-
-AC_CACHE_CHECK([whether $CC knows _Bool],
- pulseaudio_cv__Bool,
- [AC_COMPILE_IFELSE(
- AC_LANG_PROGRAM([], [[_Bool b;]]),
- [pulseaudio_cv__Bool=yes],
- [pulseaudio_cv__Bool=no])
- ])
-
-AS_IF([test "$pulseaudio_cv__Bool" = "yes"], [
- AC_DEFINE([HAVE_STD_BOOL], 1, [Have _Bool.])
- ])
-
-#### libtool stuff (FIXME: when sbox will have 2.2 )####
-#LT_PREREQ(2.2)
-#LT_INIT([dlopen win32-dll disable-static])
-AC_PROG_LIBTOOL
-
-PKG_CHECK_MODULES([PULSEAUDIO], [libpulse >= 5.0 pulsecore >= 5.0])
-AC_SUBST(PULSEAUDIO_CFLAGS)
-AC_SUBST(PULSEAUDIO_LIBS)
-
-#PKG_CHECK_MODULES([DROIDHEADERS], [android-headers >= 0.0.6])
-# android-headers.pc has broken version field
-PKG_CHECK_MODULES([DROIDHEADERS], [android-headers])
-AC_SUBST(DROIDHEADERS_CFLAGS)
-
-PKG_CHECK_MODULES([HYBRIS], [libhardware >= 0.1.0])
-AC_SUBST(HYBRIS_CFLAGS)
-AC_SUBST(HYBRIS_LIBS)
-
-#### expat (for xml config format parsing) (optional) ####
-
-AC_ARG_ENABLE([xml],
- AS_HELP_STRING([--disable-xml],[Disable optional xml config support]))
-
-AS_IF([test "x$enable_xml" != "xno"],
- [PKG_CHECK_MODULES(EXPAT, [ expat >= 2.1 ], HAVE_EXPAT=1, HAVE_EXPAT=0)],
- HAVE_EXPAT=0)
-
-AS_IF([test "x$enable_xml" = "xyes" && test "x$HAVE_EXPAT" = "x0"],
- [AC_MSG_ERROR([*** expat not found])])
-
-AC_SUBST(HAVE_EXPAT)
-AC_SUBST(EXPAT_CFLAGS)
|
[-]
[+]
|
Deleted |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/m4/.gitignore
^
|
@@ -1,5 +0,0 @@
-libtool.m4
-ltoptions.m4
-ltsugar.m4
-ltversion.m4
-lt~obsolete.m4
|
[-]
[+]
|
Deleted |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/m4/attributes.m4
^
|
@@ -1,258 +0,0 @@
-dnl Macros to check the presence of generic (non-typed) symbols.
-dnl Copyright (c) 2006-2007 Diego Pettenò <flameeyes@gmail.com>
-dnl Copyright (c) 2006-2007 xine project
-dnl
-dnl This program is free software; you can redistribute it and/or modify
-dnl it under the terms of the GNU General Public License as published by
-dnl the Free Software Foundation; either version 2, or (at your option)
-dnl any later version.
-dnl
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-dnl GNU General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU General Public License
-dnl along with this program; if not, write to the Free Software
-dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-dnl 02110-1301, USA.
-dnl
-dnl As a special exception, the copyright owners of the
-dnl macro gives unlimited permission to copy, distribute and modify the
-dnl configure scripts that are the output of Autoconf when processing the
-dnl Macro. You need not follow the terms of the GNU General Public
-dnl License when using or distributing such scripts, even though portions
-dnl of the text of the Macro appear in them. The GNU General Public
-dnl License (GPL) does govern all other use of the material that
-dnl constitutes the Autoconf Macro.
-dnl
-dnl This special exception to the GPL applies to versions of the
-dnl Autoconf Macro released by this project. When you make and
-dnl distribute a modified version of the Autoconf Macro, you may extend
-dnl this special exception to the GPL to apply to your modified version as
-dnl well.
-
-AC_DEFUN([CC_CHECK_CFLAGS_SILENT], [
- AC_CACHE_VAL(AS_TR_SH([cc_cv_cflags_$1]),
- [ac_save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $1"
- AC_COMPILE_IFELSE([int a;],
- [eval "AS_TR_SH([cc_cv_cflags_$1])='yes'"],
- [eval "AS_TR_SH([cc_cv_cflags_$1])='no'"])
- CFLAGS="$ac_save_CFLAGS"
- ])
-
- AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
- [$2], [$3])
-])
-
-AC_DEFUN([CC_CHECK_CFLAGS], [
- AC_CACHE_CHECK([if $CC supports $1 flag],
- AS_TR_SH([cc_cv_cflags_$1]),
- CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here!
- )
-
- AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
- [$2], [$3])
-])
-
-AC_DEFUN([CC_CHECK_LDFLAGS], [
- AC_CACHE_CHECK([if $CC supports $1 flag],
- AS_TR_SH([cc_cv_ldflags_$1]),
- [ac_save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $1"
- AC_LINK_IFELSE([int main() { return 1; }],
- [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"],
- [eval "AS_TR_SH([cc_cv_ldflags_$1])="])
- LDFLAGS="$ac_save_LDFLAGS"
- ])
-
- AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes],
- [$2], [$3])
-])
-
-dnl Check for a -Werror flag or equivalent. -Werror is the GCC
-dnl and ICC flag that tells the compiler to treat all the warnings
-dnl as fatal. We usually need this option to make sure that some
-dnl constructs (like attributes) are not simply ignored.
-dnl
-dnl Other compilers don't support -Werror per se, but they support
-dnl an equivalent flag:
-dnl - Sun Studio compiler supports -errwarn=%all
-AC_DEFUN([CC_CHECK_WERROR], [
- AC_CACHE_CHECK(
- [for $CC way to treat warnings as errors],
- [cc_cv_werror],
- [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror],
- [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])])
- ])
-])
-
-AC_DEFUN([CC_CHECK_ATTRIBUTE], [
- AC_REQUIRE([CC_CHECK_WERROR])
- AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))],
- AS_TR_SH([cc_cv_attribute_$1]),
- [ac_save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $cc_cv_werror"
- AC_COMPILE_IFELSE([$3],
- [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"],
- [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"])
- CFLAGS="$ac_save_CFLAGS"
- ])
-
- AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes],
- [AC_DEFINE(
- AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1,
- [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))]
- )
- $4],
- [$5])
-])
-
-AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [
- CC_CHECK_ATTRIBUTE(
- [constructor],,
- [void __attribute__((constructor)) ctor() { int a; }],
- [$1], [$2])
-])
-
-AC_DEFUN([CC_ATTRIBUTE_FORMAT], [
- CC_CHECK_ATTRIBUTE(
- [format], [format(printf, n, n)],
- [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }],
- [$1], [$2])
-])
-
-AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [
- CC_CHECK_ATTRIBUTE(
- [format_arg], [format_arg(printf)],
- [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }],
- [$1], [$2])
-])
-
-AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [
- CC_CHECK_ATTRIBUTE(
- [visibility_$1], [visibility("$1")],
- [void __attribute__((visibility("$1"))) $1_function() { }],
- [$2], [$3])
-])
-
-AC_DEFUN([CC_ATTRIBUTE_NONNULL], [
- CC_CHECK_ATTRIBUTE(
- [nonnull], [nonnull()],
- [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }],
- [$1], [$2])
-])
-
-AC_DEFUN([CC_ATTRIBUTE_UNUSED], [
- CC_CHECK_ATTRIBUTE(
- [unused], ,
- [void some_function(void *foo, __attribute__((unused)) void *bar);],
- [$1], [$2])
-])
-
-AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [
- CC_CHECK_ATTRIBUTE(
- [sentinel], ,
- [void some_function(void *foo, ...) __attribute__((sentinel));],
- [$1], [$2])
-])
-
-AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [
- CC_CHECK_ATTRIBUTE(
- [deprecated], ,
- [void some_function(void *foo, ...) __attribute__((deprecated));],
- [$1], [$2])
-])
-
-AC_DEFUN([CC_ATTRIBUTE_ALIAS], [
- CC_CHECK_ATTRIBUTE(
- [alias], [weak, alias],
- [void other_function(void *foo) { }
- void some_function(void *foo) __attribute__((weak, alias("other_function")));],
- [$1], [$2])
-])
-
-AC_DEFUN([CC_ATTRIBUTE_MALLOC], [
- CC_CHECK_ATTRIBUTE(
- [malloc], ,
- [void * __attribute__((malloc)) my_alloc(int n);],
- [$1], [$2])
-])
-
-AC_DEFUN([CC_ATTRIBUTE_PACKED], [
- CC_CHECK_ATTRIBUTE(
- [packed], ,
- [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));],
- [$1], [$2])
-])
-
-AC_DEFUN([CC_ATTRIBUTE_CONST], [
- CC_CHECK_ATTRIBUTE(
- [const], ,
- [int __attribute__((const)) twopow(int n) { return 1 << n; } ],
- [$1], [$2])
-])
-
-AC_DEFUN([CC_FLAG_VISIBILITY], [
- AC_REQUIRE([CC_CHECK_WERROR])
- AC_CACHE_CHECK([if $CC supports -fvisibility=hidden],
|
[-]
[+]
|
Deleted |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/m4/check_droid_enum.m4
^
|
@@ -1,26 +0,0 @@
-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])
- AC_DEFINE(STRING_ENTRY_IF_$2,[STRING_ENTRY($2),],[string entry for enum $2])
- AC_DEFINE(FANCY_ENTRY_IF_$2(n),[{$2, n},],[fancy entry for enum $2])
-else
- AC_DEFINE(STRING_ENTRY_IF_$2,,[string entry for enum $2])
- AC_DEFINE(FANCY_ENTRY_IF_$2(n),,[fancy entry for enum $2])
-fi
-])
|
[-]
[+]
|
Deleted |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/m4/tls.m4
^
|
@@ -1,17 +0,0 @@
-AC_DEFUN([CC_CHECK_TLS], [
- AC_CACHE_CHECK([whether $CC knows __thread for Thread-Local Storage],
- cc_cv_tls___thread,
- [AC_COMPILE_IFELSE(
- AC_LANG_PROGRAM(
- [[static __thread int a = 6;]],
- [[a = 5;]]),
- [cc_cv_tls___thread=yes],
- [cc_cv_tls___thread=no])
- ])
-
- AS_IF([test "x$cc_cv_tls___thread" = "xyes"],
- [AC_DEFINE([SUPPORT_TLS___THREAD], 1,
- [Define this if the compiler supports __thread for Thread-Local Storage])
- $1],
- [$2])
-])
|
[-]
[+]
|
Deleted |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/src/Makefile.am
^
|
@@ -1 +0,0 @@
-SUBDIRS = common droid
|
[-]
[+]
|
Deleted |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/src/common/Makefile.am
^
|
@@ -1,35 +0,0 @@
-AM_LIBADD = \
- $(PULSEAUDIO_LIBS) \
- $(HYBRIS_LIBS) \
- $(EXPAT_LIBS)
-AM_CFLAGS = \
- $(DROID_DEVICE_CFLAGS) \
- $(PULSEAUDIO_CFLAGS) \
- $(DROIDHEADERS_CFLAGS) \
- $(HYBRIS_CFLAGS) \
- $(EXPAT_CFLAGS) \
- -DPULSEAUDIO_VERSION=@PA_MAJOR@ \
- -I$(top_srcdir)/src/common \
- -I$(top_srcdir)/src/common/include
-
-
-modlibexec_LTLIBRARIES = libdroid-util.la
-includedir = @includedir@/pulsecore/modules/droid
-include_HEADERS = include/droid/version.h \
- include/droid/conversion.h \
- include/droid/droid-config.h \
- include/droid/droid-util.h
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = libdroid-util.pc
-
-libdroid_util_la_SOURCES = droid-util.c \
- droid-config.c \
- conversion.c \
- config-parser-legacy.c \
- config-parser-xml.c \
- droid-util-audio.h \
- droid-util-41qc.h
-libdroid_util_la_LDFLAGS = -avoid-version -Wl,-z,noexecstack -lhybris-common $(SBJ_DEVICE_LDFLAGS)
-libdroid_util_la_LIBADD = $(AM_LIBADD)
-libdroid_util_la_CFLAGS = $(AM_CFLAGS)
|
[-]
[+]
|
Deleted |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/src/common/config-parser-legacy.c
^
|
@@ -1,436 +0,0 @@
-/*
- * Copyright (C) 2018 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdbool.h>
-#include <pulsecore/macro.h>
-#include <pulsecore/core-util.h>
-#include <pulsecore/core-error.h>
-#include <pulsecore/log.h>
-#include <pulse/xmalloc.h>
-
-#include <hardware_legacy/audio_policy_conf.h>
-
-#include "droid/version.h"
-#include "droid/droid-config.h"
-#include "droid/conversion.h"
-#include "droid/sllist.h"
-
-/* Section defining custom global configuration variables. */
-#define GLOBAL_CONFIG_EXT_TAG "custom_properties"
-
-#define GAIN_TAG_PREFIX "gain_"
-
-#define MAX_LINE_LENGTH (1024)
-#define WHITESPACE "\n\r \t"
-
-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);
-}
-
-pa_droid_config_audio *pa_parse_droid_audio_config_legacy(const char *filename) {
- pa_droid_config_audio *config = NULL;
- FILE *f;
- unsigned n = 0;
- bool ret = true;
- char *full_line = NULL;
- uint32_t hw_module_count = 0;
-
- enum config_loc {
- IN_ROOT = 0,
- IN_GLOBAL = 1,
- IN_GLOBAL_EXT = 2,
- IN_HW_MODULES = 3,
- IN_MODULE = 4,
- IN_OUTPUT_INPUT = 5,
- IN_CONFIG = 6,
- IN_MODULE_GLOBAL = 10,
- IN_DEVICES = 20,
- IN_DEVICES_DEVICE = 21,
- IN_GAINS = 22,
- IN_GAIN_N = 23
- } loc = IN_ROOT;
-
- bool in_output = true;
-
- pa_droid_config_hw_module *module = NULL;
- pa_droid_config_device *output = NULL;
- pa_droid_config_device *input = NULL;
-
- pa_assert(filename);
-
- f = fopen(filename, "r");
-
- if (!f) {
- pa_log_info("Failed to open config file (%s): %s", filename, pa_cstrerror(errno));
- ret = false;
- goto finish;
- }
-
- config = pa_xnew0(pa_droid_config_audio, 1);
- config->global_config = pa_xnew0(pa_droid_config_global, 1);
-
- pa_lock_fd(fileno(f), 1);
-
- full_line = pa_xmalloc0(sizeof(char) * MAX_LINE_LENGTH);
-
- while (!feof(f)) {
- char *ln, *d, *v, *value;
-
- if (!fgets(full_line, MAX_LINE_LENGTH, f))
- break;
-
- n++;
-
- pa_strip_nl(full_line);
-
- if (!*full_line)
- continue;
-
- ln = full_line + strspn(full_line, WHITESPACE);
-
- if (ln[0] == '#')
- continue;
-
- v = ln;
- d = v + strcspn(v, WHITESPACE);
-
- value = d + strspn(d, WHITESPACE);
- d[0] = '\0';
- d = value + strcspn(value, WHITESPACE);
- d[0] = '\0';
-
- /* Enter section */
- if (pa_streq(value, "{")) {
-
- if (!*v) {
- pa_log("[%s:%u] failed to parse line - too few words", filename, n);
- goto finish;
- }
-
- switch (loc) {
- case IN_ROOT:
- if (pa_streq(v, GLOBAL_CONFIG_TAG)) {
- loc = IN_GLOBAL;
- }
- else if (pa_streq(v, AUDIO_HW_MODULE_TAG))
- loc = IN_HW_MODULES;
- else {
- log_parse_error(filename, n, "<root>", v);
- ret = false;
- goto finish;
- }
- break;
-
- case IN_GLOBAL:
- if (pa_streq(v, GLOBAL_CONFIG_EXT_TAG))
- loc = IN_GLOBAL_EXT;
- else {
- log_parse_error(filename, n, GLOBAL_CONFIG_TAG, v);
- ret = false;
- goto finish;
- }
- break;
-
- case IN_HW_MODULES:
- pa_assert(!module);
-
- module = pa_droid_config_hw_module_new(config, v);
- SLLIST_APPEND(pa_droid_config_hw_module, config->hw_modules, module);
- hw_module_count++;
- loc = IN_MODULE;
- pa_log_debug("config: New module: %s", module->name);
- break;
-
- case IN_MODULE:
- pa_assert(module);
-
- if (pa_streq(v, OUTPUTS_TAG)) {
- loc = IN_OUTPUT_INPUT;
- in_output = true;
- } else if (pa_streq(v, INPUTS_TAG)) {
- loc = IN_OUTPUT_INPUT;
- in_output = false;
- } else if (pa_streq(v, GLOBAL_CONFIG_TAG)) {
- loc = IN_MODULE_GLOBAL;
- } else if (pa_streq(v, DEVICES_TAG)) {
- loc = IN_DEVICES;
- } else {
- log_parse_error(filename, n, module->name, v);
- ret = false;
- goto finish;
- }
- break;
-
- case IN_OUTPUT_INPUT:
- pa_assert(module);
-
- if (in_output) {
- output = pa_droid_config_device_new(module, PA_DIRECTION_OUTPUT, v);
- SLLIST_APPEND(pa_droid_config_device, module->outputs, output);
- loc = IN_CONFIG;
- pa_log_debug("config: %s: New output: %s", module->name, output->name);
- } else {
- input = pa_droid_config_device_new(module, PA_DIRECTION_INPUT, v);
- SLLIST_APPEND(pa_droid_config_device, module->inputs, input);
- loc = IN_CONFIG;
- pa_log_debug("config: %s: New input: %s", module->name, input->name);
- }
- break;
|
[-]
[+]
|
Deleted |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/src/common/droid-util-41qc.h
^
|
@@ -1,311 +0,0 @@
-/*
- * Copyright (C) 2013 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 _ANDROID_UTIL_V412_H_
-#define _ANDROID_UTIL_V412_H_
-
-#ifdef DROID_DEVICE_SBJ
-#define QCOM_HARDWARE
-#endif
-
-#include <hardware/audio.h>
-#include <hardware_legacy/audio_policy_conf.h>
-
-#include <pulse/channelmap.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) || 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_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),
- 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_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" },
- { 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_ANC_HEADSET),
- STRING_ENTRY(AUDIO_DEVICE_IN_FM_RX),
- STRING_ENTRY(AUDIO_DEVICE_IN_FM_RX_A2DP),
- STRING_ENTRY(AUDIO_DEVICE_IN_PROXY),
- 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_ANC_HEADSET, "input-anc_headset" },
- { AUDIO_DEVICE_IN_FM_RX, "input-fm_rx" },
- { AUDIO_DEVICE_IN_FM_RX_A2DP, "input-fm_rx_a2dp" },
- { AUDIO_DEVICE_IN_PROXY, "input-in_proxy" },
- { 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" },
|
[-]
[+]
|
Deleted |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/src/droid/Makefile.am
^
|
@@ -1,45 +0,0 @@
-AM_LIBADD = \
- $(PULSEAUDIO_LIBS) \
- $(HYBRIS_LIBS)
-
-AM_CFLAGS = \
- $(DROID_DEVICE_CFLAGS) \
- $(PULSEAUDIO_CFLAGS) \
- $(DROIDHEADERS_CFLAGS) \
- $(HYBRIS_CFLAGS) \
- -DPULSEAUDIO_VERSION=@PA_MAJOR@ \
- -I$(top_srcdir)/src/droid \
- -I$(top_srcdir)/src/common/include
-
-
-modlibexec_LTLIBRARIES = \
- libdroid-sink.la \
- libdroid-source.la \
- module-droid-sink.la \
- module-droid-source.la \
- module-droid-card.la
-
-libdroid_sink_la_SOURCES = droid-sink.c droid-sink.h
-libdroid_sink_la_LDFLAGS = -avoid-version -Wl,-z,noexecstack -lhybris-common
-libdroid_sink_la_LIBADD = $(top_builddir)/src/common/libdroid-util.la $(AM_LIBADD)
-libdroid_sink_la_CFLAGS = $(AM_CFLAGS)
-
-libdroid_source_la_SOURCES = droid-source.c droid-source.h
-libdroid_source_la_LDFLAGS = -avoid-version -Wl,-z,noexecstack -lhybris-common
-libdroid_source_la_LIBADD = $(top_builddir)/src/common/libdroid-util.la $(AM_LIBADD)
-libdroid_source_la_CFLAGS = $(AM_CFLAGS)
-
-module_droid_sink_la_SOURCES = module-droid-sink.c
-module_droid_sink_la_LDFLAGS = -module -avoid-version -Wl,-z,noexecstack -lhybris-common
-module_droid_sink_la_LIBADD = -lm libdroid-sink.la $(AM_LIBADD)
-module_droid_sink_la_CFLAGS = $(AM_CFLAGS) -DPA_MODULE_NAME=module_droid_sink
-
-module_droid_source_la_SOURCES = module-droid-source.c
-module_droid_source_la_LDFLAGS = -module -avoid-version -Wl,-z,noexecstack -lhybris-common
-module_droid_source_la_LIBADD = -lm libdroid-source.la $(AM_LIBADD)
-module_droid_source_la_CFLAGS = $(AM_CFLAGS) -DPA_MODULE_NAME=module_droid_source
-
-module_droid_card_la_SOURCES = module-droid-card.c
-module_droid_card_la_LDFLAGS = -module -avoid-version -Wl,-z,noexecstack -lhybris-common
-module_droid_card_la_LIBADD = -lm libdroid-sink.la libdroid-source.la $(top_builddir)/src/common/libdroid-util.la $(AM_LIBADD)
-module_droid_card_la_CFLAGS = $(AM_CFLAGS) -DPA_MODULE_NAME=module_droid_card
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/README.md
^
|
@@ -1,25 +1,23 @@
PulseAudio Droid modules
========================
+For adapdations for Android versions 4 to 10,
+see [pulseaudio-modules-droid-jb2q](https://github.com/mer-hybris/pulseaudio-modules-droid-jb2q)
+
Building of droid modules is split to two packages
* **common** (and **common-devel**) which contains shared library code for use in
PulseAudio modules in this package and for inclusion in other projects
* **droid** with actual PulseAudio modules
+Linking to libdroid is **not encouraged**, usually only HAL functions are needed
+which can be accessed using the pulsecore shared API (see below).
+
Supported Android versions:
-* 4.1.x with Qualcomm extensions (tested with 4.1.2)
-* 4.2.x
-* 4.4.x
-* 5.x
-* 6.0.x
-* 7.x
-* 8.x
-* 9.x
-* 10.x
+* 11.x
Headers for defining devices and strings for different droid versions are in
-src/common/droid-util-audio.h (legacy headers for Jolla 1 in droid-util-41qc.h).
+src/common/droid-util-audio.h.
When new devices with relevant new enums appear, add enum check to configure.ac.
CC_CHECK_DROID_ENUM macro will create macros HAVE_ENUM_FOO, STRING_ENTRY_IF_FOO
@@ -66,28 +64,19 @@
### Audio policy configuration parsing
-To populate our configuration structs there exists two parsers, legacy parser
-for old .conf format present in Android versions 7.0 and older and new xml
-format present from version 7.0 upwards. The legacy format is obsoleted in
-version 7.0 but by default still in use and most 7.0 adaptations probably
-contain the legacy format. But 8.0 adaptations and up start to include only
-the new style xml format configuration files.
+Configuration parser reads audio policy xml files.
### Configuration files
-By default new style xml format is tried first and if it is not found old
-config is read next. If the configuration is in non-default location for
-some reason "config" module argument (available for all modules, card, sink,
-and source) can be used to point to the configuration file location.
+If the configuration is in non-default location for some reason "config"
+module argument can be used to point to the configuration file location.
By default files are tried in following order,
- /odm/etc/audio_policy_configuration.xml (new xml format)
- /vendor/etc/audio/audio_policy_configuration.xml (new xml format)
- /vendor/etc/audio_policy_configuration.xml (new xml format)
- /vendor/etc/audio_policy.conf (legacy format)
- /system/etc/audio_policy_configuration.xml (new xml format)
- /system/etc/audio_policy.conf (legacy format)
+ /odm/etc/audio_policy_configuration.xml
+ /vendor/etc/audio/audio_policy_configuration.xml
+ /vendor/etc/audio_policy_configuration.xml
+ /system/etc/audio_policy_configuration.xml
module-droid-card
-----------------
@@ -99,39 +88,15 @@
default profile
---------------
-When module-droid-card is loaded with default arguments, droid-card will try
-to create a default profile (called surprisingly "default"). The default
-profile will try to merge useful output and input streams to one profile,
+When module-droid-card is loaded with default arguments, droid-card will
+create a default profile (called unsurprisingly "default"). The default
+profile will merge supported output and input streams to one profile,
to allow use of possible low latency or deep buffer outputs.
-For example configuration with
-
- audio_hw_modules {
- primary {
- outputs {
- primary {}
- deep_buffer {}
- }
- inputs {
- primary {}
- voice_rx {}
- }
- }
- other {
- ...
- }
- }
-
-The default profile would contain two sinks, sink.primary and sink.deep_buffer
-and one source, source.droid.
-
-Usually this default profile is everything that is needed in normal use, and
-additional profiles created should be needed only for testing things out etc.
-
virtual profiles
----------------
-In addition to aforementioned card profiles, droid-card creates some additional
+In addition to aforementioned card profile, droid-card creates some additional
virtual profiles. These virtual profiles are used when enabling voicecall
routings etc. When virtual profile is enabled, possible sinks and sources
previously active profile had are not removed.
@@ -139,9 +104,6 @@
As an illustration, following command line sequence enables voicecall mode and
routes audio to internal handsfree (ihf - "handsfree speaker"):
-(Before starting, droid_card.primary is using profile primary-primary and
-sink.primary port output-speaker)
-
pactl set-card-profile droid_card.primary voicecall
pactl set-sink-port sink.primary output-parking
pactl set-sink-port sink.primary output-speaker
@@ -151,11 +113,11 @@
To disable voicecall and return to media audio:
- pactl set-card-profile droid_card.primary primary-primary
+ pactl set-card-profile droid_card.primary default
pactl set-sink-port sink.primary output-parking
pactl set-sink-port sink.primary output-speaker
-With this example sequence sinks and sources are the ones from primary-primary
+With this example sequence sinks and sources are the ones from default
card profile, and they are maintained for the whole duration of the voicecall
and after.
@@ -177,32 +139,9 @@
related optimizations etc. Voicecall-record profile can be enabled when
voicecall profile is active.
-debugging profiles
-------------------
-
-If needed in favour of default profile one can opt to creating combinations
-of all output and input definitions in a module definition. This can be
-done by passing "default=false" to module-droid-card. Module argument
-module_id will then defines which module to load (by default "primary").
-Without default profile all input and output definitions are translated
-to PulseAudio card profiles. For example configuration with
-
- audio_hw_modules {
- primary {
- outputs {
- primary {}
- lpa {}
- }
- inputs {
- primary {}
- }
- }
- other {
- ...
- }
- }
-
-Would map to card profiles ([output]-[input]) primary-primary and lpa-primary.
+If mix port with flag AUDIO_OUTPUT_FLAG_VOIP_RX exists when communication
+virtual profile is enabled additional droid-sink is created with the config
+defined in the mix port. Voip audio should then be played to this new sink.
module-droid-sink and module-droid-source
-----------------------------------------
@@ -211,49 +150,15 @@
hand, but droid-card loads appropriate modules based on the active card
profile.
-Output and input ports for droid-sink and droid-source are generated from the
-audio_policy_configuration.xml (where available) or audio_policy.conf (legacy),
-where each device generates (usually) one port, for example:
-
- audio_hw_modules {
- primary {
- outputs {
- primary {
- devices = AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADPHONE
- }
- lpa {}
- }
- inputs {
- primary {
- devices = AUDIO_DEVICE_IN_BUILTIN_MIC
- }
- }
- }
- }
-
-Would create following ports for sink.primary:
- * output-speaker
|
[-]
[+]
|
Added |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/meson.build
^
|
@@ -0,0 +1,172 @@
+project('pulseaudio-modules-droid', 'c',
+ version : run_command(find_program('git-version-gen'), join_paths(meson.current_source_dir(), '.tarball-version'), check: true).stdout().strip(),
+ meson_version : '>= 0.50.0',
+ default_options : [ 'c_std=gnu11' ]
+ )
+
+cc = meson.get_compiler('c')
+
+configinc = include_directories('.')
+libdir = join_paths(get_option('prefix'), get_option('libdir'))
+
+pa_c_args = ['-DHAVE_CONFIG_H']
+
+droiddevice = get_option('droid-device')
+pa_c_args += ['-DDROID_DEVICE_@0@=1'.format(droiddevice.underscorify().to_upper())]
+pa_c_args += ['-DDROID_DEVICE_STRING="@0@"'.format(droiddevice)]
+
+# dependencies
+droid_headers_dep = dependency('android-headers', required : true)
+expat_dep = dependency('expat', version : '>= 2.1', required : true)
+hybris_dep = dependency('libhardware', version : '>= 0.1.0', required : true)
+hybris_common_dep = cc.find_library('hybris-common', required : true)
+ltdl_dep = cc.find_library('ltdl', required : true)
+pulsecore_dep = dependency('pulsecore', version : '>= 14.2', required : true)
+
+pa_version_str = meson.project_version()
+# For tarballs, the first split will do nothing, but for builds in git, we
+# split out suffixes when there are commits since the last tag
+# (e.g.: v11.99.1-3-gad14bdb24 -> v11.99.1)
+version_split = pa_version_str.split('-')[0].split('.')
+pa_version_major = version_split[0].split('v')[0]
+pa_version_minor = version_split[1]
+pa_version_module = version_split[2].split('+')[0]
+pa_version_major_minor = pa_version_major + '.' + pa_version_minor
+
+modlibexecdir = get_option('modlibexecdir')
+if modlibexecdir == ''
+ modlibexecdir = join_paths(libdir, 'pulse-' + pa_version_major_minor, 'modules')
+endif
+
+privlibdir = join_paths(libdir, 'pulseaudio')
+rpath_dirs = join_paths(privlibdir) + ':' + join_paths(modlibexecdir)
+
+cdata = configuration_data()
+cdata.set_quoted('PACKAGE', meson.project_name())
+cdata.set_quoted('PACKAGE_NAME', meson.project_name())
+cdata.set_quoted('PACKAGE_VERSION', pa_version_str)
+cdata.set_quoted('VERSION', pa_version_str)
+
+# Atomic operations
+
+if get_option('atomic-arm-memory-barrier')
+ cdata.set('ATOMIC_ARM_MEMORY_BARRIER_ENABLED', 1)
+endif
+
+need_libatomic_ops = false
+
+atomictest = '''void func() {
+ volatile int atomic = 2;
+ __sync_bool_compare_and_swap (&atomic, 2, 3);
+}
+'''
+
+if cc.compiles(atomictest)
+ cdata.set('HAVE_ATOMIC_BUILTINS', 1)
+
+ newatomictest = '''void func() {
+ int c = 0;
+ __atomic_store_n(&c, 4, __ATOMIC_SEQ_CST);
+ }
+ '''
+
+ if(cc.compiles(newatomictest))
+ cdata.set('HAVE_ATOMIC_BUILTINS_MEMORY_MODEL', 1)
+ endif
+
+elif host_machine.cpu_family() == 'arm'
+ if host_machine.system() == 'linux' and get_option('atomic-arm-linux-helpers')
+ cdata.set('ATOMIC_ARM_LINUX_HELPERS', 1)
+ else
+ armatomictest = '''int func() {
+ volatile int a=0;
+ int o=0, n=1, r;
+ asm volatile (
+ "ldrex %0, [%1]\n"
+ "subs %0, %0, %2\n"
+ "strexeq %0, %3, [%1]\n"
+ : "=&r" (r)
+ : "r" (&a), "Ir" (o), "r" (n)
+ : "cc");
+ return (a==1 ? 0 : -1);
+ }
+ '''
+
+ if cc.compiles(armatomictest)
+ cdata.set('ATOMIC_ARM_INLINE_ASM', 1)
+ else
+ need_libatomic_ops = true
+ endif
+ endif # arm && !linux
+
+elif not ['freebsd', 'netbsd'].contains(host_machine.system())
+ need_libatomic_ops = true
+endif # !atomic helpers && !arm
+
+if need_libatomic_ops
+ assert(cc.has_header('atomic_ops.h'), 'Need libatomic_ops')
+
+ cdata.set('AO_REQUIRE_CAS', 1)
+
+ if host_machine.system() != 'windows'
+ libatomic_ops_dep = cc.find_library('atomic_ops', required : true)
+ else
+ libatomic_ops_dep = dependency('', required: false)
+ endif
+else
+ libatomic_ops_dep = dependency('', required: false)
+endif
+
+check_enums = [
+ # Input devices
+ 'AUDIO_DEVICE_IN_FM_RX',
+ 'AUDIO_DEVICE_IN_FM_RX_A2DP',
+ # Audio sources
+ 'AUDIO_SOURCE_ECHO_REFERENCE',
+ 'AUDIO_SOURCE_FM_TUNER',
+ 'AUDIO_SOURCE_FM_RX',
+ 'AUDIO_SOURCE_FM_RX_A2DP',
+ # Output flags
+ 'AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH',
+ # Channels
+ 'AUDIO_CHANNEL_IN_VOICE_CALL_MONO',
+ 'AUDIO_CHANNEL_IN_VOICE_UPLINK_MONO',
+ 'AUDIO_CHANNEL_IN_VOICE_DNLINK_MONO',
+ # Formats
+ 'AUDIO_FORMAT_PCM_OFFLOAD',
+ 'AUDIO_FORMAT_FLAC',
+ 'AUDIO_FORMAT_OPUS',
+]
+
+foreach e : check_enums
+ if cc.has_header_symbol('system/audio.h', e, dependencies : droid_headers_dep, prefix : '#include <android-config.h>\n#ifdef QCOM_BSP\n#define QCOM_HARDWARE\n#endif')
+ define = 'HAVE_ENUM_' + e
+ cdata.set(define, 1)
+ define = 'STRING_ENTRY_IF_' + e
+ cdata.set(define, 'STRING_ENTRY(' + e + '),')
+ define = 'FANCY_ENTRY_IF_' + e + '(n)'
+ cdata.set(define, '{' + e + ', n},')
+ else
+ define = 'STRING_ENTRY_IF_' + e
+ cdata.set(define, '')
+ define = 'FANCY_ENTRY_IF_' + e + '(n)'
+ cdata.set(define, '')
+ endif
+endforeach
+
+# Headers
+check_headers = [
+ 'valgrind/memcheck.h',
+]
+
+foreach h : check_headers
+ if cc.has_header(h)
+ define = 'HAVE_' + h.underscorify().to_upper()
+ cdata.set(define, 1)
+ endif
+endforeach
+
+# Now generate config.h from everything above
+configure_file(output : 'config.h', configuration : cdata)
+
+subdir('src')
|
[-]
[+]
|
Added |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/meson_options.txt
^
|
@@ -0,0 +1,15 @@
+option('atomic-arm-linux-helpers',
+ type : 'boolean',
+ value : true,
+ description : 'Use inline asm or libatomic_ops instead')
+option('atomic-arm-memory-barrier',
+ type : 'boolean',
+ value : false,
+ description : 'Enable memory barriers (only really needed in SMP arm systems)')
+option('droid-device',
+ type : 'string',
+ value : 'generic',
+ description : 'Droid device type for possible specific quirks (defaults to generic).')
+option('modlibexecdir',
+ type : 'string',
+ description : 'Specify location where modules will be installed')
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/common/config-parser-xml.c
^
|
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018 Jolla Ltd.
+ * Copyright (C) 2018-2022 Jolla Ltd.
*
* Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
*
@@ -26,15 +26,6 @@
#include "droid/droid-config.h"
-#ifndef HAVE_EXPAT
-#include <unistd.h>
-pa_droid_config_audio *pa_parse_droid_audio_config_xml(const char *filename) {
- if (access(filename, F_OK) == 0)
- pa_log_warn("Could not parse %s, xml configuration parsing support not compiled in", filename);
- return NULL;
-}
-#else
-
#include <stdarg.h>
#include <string.h>
#include <expat.h>
@@ -46,6 +37,9 @@
#include "droid/conversion.h"
#include "droid/sllist.h"
+#include "droid/utils.h"
+#include "droid/droid-config.h"
+#include "config-parser-xml.h"
#ifdef XML_UNICODE_WCHAR_T
# include <wchar.h>
@@ -86,6 +80,9 @@
#define ATTRIBUTE_sources "sources"
#define ATTRIBUTE_type "type"
#define ATTRIBUTE_href "href"
+#define ATTRIBUTE_maxOpenCount "maxOpenCount"
+#define ATTRIBUTE_maxActiveCount "maxActiveCount"
+#define ATTRIBUTE_address "address"
#define PORT_TYPE_sink "sink"
#define PORT_TYPE_source "source"
@@ -282,7 +279,7 @@
char *name;
audio_format_t format;
uint32_t sampling_rates[AUDIO_MAX_SAMPLING_RATES];
- audio_channel_mask_t channel_masks;
+ audio_channel_mask_t channel_masks[AUDIO_MAX_CHANNEL_MASKS];
struct profile *next;
};
@@ -290,6 +287,8 @@
char *name;
char *role;
uint32_t flags;
+ int max_open_count;
+ int max_active_count;
struct profile *profiles;
struct mix_port *next;
};
@@ -298,6 +297,7 @@
char *tag_name;
audio_devices_t type;
char *role;
+ char *address;
struct profile *profiles;
struct device_port *next;
};
@@ -403,6 +403,7 @@
profile_list_free(p->profiles);
pa_xfree(p->tag_name);
pa_xfree(p->role);
+ pa_xfree(p->address);
pa_xfree(p);
}
}
@@ -697,6 +698,8 @@
struct mix_port *p;
bool parsed = false;
char *flags = NULL;
+ char *max_open_count = NULL;
+ char *max_active_count = NULL;
p = pa_xmalloc0(sizeof(*p));
@@ -714,6 +717,14 @@
goto done;
}
+ /* maxOpenCount is not mandatory element attribute */
+ if (get_element_attr(data, attributes, false, ATTRIBUTE_maxOpenCount, &max_open_count))
+ pa_atoi(max_open_count, &p->max_open_count);
+
+ /* maxActiveCount is not mandatory element attribute */
+ if (get_element_attr(data, attributes, false, ATTRIBUTE_maxActiveCount, &max_active_count))
+ pa_atoi(max_open_count, &p->max_active_count);
+
parsed = true;
done:
pa_xfree(flags);
@@ -729,20 +740,9 @@
return parsed;
}
-static void replace_in_place(char **string, const char *a, const char *b) {
- char *tmp;
-
- pa_assert(*string);
- pa_assert(a);
- pa_assert(b);
-
- tmp = pa_replace(*string, a, b);
- pa_xfree(*string);
- *string = tmp;
-}
-
static bool parse_profile(struct parser_data *data, const char *element_name, const XML_Char **attributes) {
struct profile *p;
+ int channel_count = -1;
bool parsed = false, unknown_format = false, output = true;
char *samplingRates = NULL, *channelMasks = NULL, *format = NULL;
@@ -775,24 +775,24 @@
if (output && pa_startswith(channelMasks, "AUDIO_CHANNEL_IN_")) {
pa_log_info("[%s:%u] Output has wrong direction channel mask (%s), reversing.",
data->fn, data->lineno, channelMasks);
- replace_in_place(&channelMasks, "AUDIO_CHANNEL_IN_", "AUDIO_CHANNEL_OUT_");
+ dm_replace_in_place(&channelMasks, "AUDIO_CHANNEL_IN_", "AUDIO_CHANNEL_OUT_");
}
else if (!output && pa_startswith(channelMasks, "AUDIO_CHANNEL_OUT_")) {
pa_log_info("[%s:%u] Input has wrong direction channel mask (%s), reversing.",
data->fn, data->lineno, channelMasks);
- replace_in_place(&channelMasks, "AUDIO_CHANNEL_OUT_", "AUDIO_CHANNEL_IN_");
+ dm_replace_in_place(&channelMasks, "AUDIO_CHANNEL_OUT_", "AUDIO_CHANNEL_IN_");
}
}
- if (!pa_conversion_parse_sampling_rates(data->fn, data->lineno, samplingRates, false, p->sampling_rates))
+ if (!pa_conversion_parse_sampling_rates(data->fn, data->lineno, samplingRates, p->sampling_rates))
goto done;
- if (!pa_conversion_parse_formats(data->fn, data->lineno, format, false, &p->format))
+ if (!pa_conversion_parse_formats(data->fn, data->lineno, format, &p->format))
unknown_format = true;
- if (!unknown_format && channelMasks && !(output ?
- pa_conversion_parse_output_channels(data->fn, data->lineno, channelMasks, false, &p->channel_masks)
- : pa_conversion_parse_input_channels(data->fn, data->lineno, channelMasks, false, &p->channel_masks)))
+ if (!unknown_format && channelMasks && (channel_count = output ?
+ pa_conversion_parse_output_channels(data->fn, data->lineno, channelMasks, p->channel_masks)
+ : pa_conversion_parse_input_channels(data->fn, data->lineno, channelMasks, p->channel_masks)) == -1)
goto done;
parsed = true;
@@ -801,7 +801,10 @@
pa_xfree(channelMasks);
pa_xfree(format);
- if (!parsed) {
+ if (channel_count == 0) {
+ pa_log_info("[%s:%u] Ignore profile with no supported channels.", data->fn, data->lineno);
+ profile_list_free(p);
+ } else if (!parsed) {
pa_log_error("[%s:%u] Failed to parse element <" ELEMENT_profile ">", data->fn, data->lineno);
profile_list_free(p);
} else if (unknown_format) {
@@ -836,10 +839,13 @@
goto done;
if (!(pa_streq(d->role, ATTRIBUTE_sink) ?
- pa_conversion_parse_output_devices(data->fn, data->lineno, type, false, false, &d->type)
- : pa_conversion_parse_input_devices(data->fn, data->lineno, type, false, false, &d->type)))
+ pa_conversion_parse_output_devices(data->fn, data->lineno, type, false, &d->type)
+ : pa_conversion_parse_input_devices(data->fn, data->lineno, type, false, &d->type)))
unknown_device = true;
+ /* address is not mandatory element attribute */
+ get_element_attr(data, attributes, false, ATTRIBUTE_address, &d->address);
+
parsed = true;
done:
pa_xfree(type);
@@ -949,133 +955,184 @@
return ret;
}
-static struct device_port *find_device_port(struct module *module, const char *name) {
- struct device_port *port;
+static void generate_config_profiles(struct profile *profiles, dm_list *list) {
+ struct profile *profile;
- SLLIST_FOREACH(port, module->device_ports) {
- if (pa_streq(port->tag_name, name))
- return port;
+ SLLIST_FOREACH(profile, profiles) {
+ dm_config_profile *c_profile = pa_xnew0(dm_config_profile, 1);
+ c_profile->name = pa_xstrdup(profile->name ? profile->name : "");
+ c_profile->format = profile->format;
+ memcpy(c_profile->sampling_rates,
|
[-]
[+]
|
Added |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/common/config-parser-xml.h
^
|
@@ -0,0 +1,33 @@
+#ifndef foodroidconfigparserxmlfoo
+#define foodroidconfigparserxmlfoo
+
+/*
+ * Copyright (C) 2022 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <droid/droid-config.h>
+
+dm_config_device *pa_parse_droid_audio_config_xml(const char *filename);
+
+#endif
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/common/conversion.c
^
|
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2018 Jolla Ltd.
+ * Copyright (C) 2013-2022 Jolla Ltd.
*
* Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
*
@@ -55,7 +55,7 @@
CONVERT_FUNC(output_channel);
CONVERT_FUNC(input_channel);
-#define value_separator(legacy) (legacy ? "|" : ",")
+#define VALUE_SEPARATOR ","
static bool string_convert_num_to_str(const struct string_conversion *list, const uint32_t value, const char **to_str) {
pa_assert(list);
@@ -88,18 +88,7 @@
char *str = NULL;
char *tmp;
-#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 AUDIO_API_VERSION_MAJ >= 2
- if (list[i].value & AUDIO_DEVICE_BIT_IN) {
- if (popcount(list[i].value & ~AUDIO_DEVICE_BIT_IN) != 1)
- continue;
- } else
-#endif
if (popcount(list[i].value) != 1)
continue;
@@ -189,10 +178,6 @@
return string_convert_str_to_num(string_conversion_table_output_device, str, (uint32_t*) to_value);
}
-char *pa_list_string_output_device(audio_devices_t devices) {
- return list_string(string_conversion_table_output_device, devices);
-}
-
/* Input device */
bool pa_string_convert_input_device_num_to_str(audio_devices_t value, const char **to_str) {
return string_convert_num_to_str(string_conversion_table_input_device, (uint32_t) value, to_str);
@@ -202,10 +187,6 @@
return string_convert_str_to_num(string_conversion_table_input_device, str, (uint32_t*) to_value);
}
-char *pa_list_string_input_device(audio_devices_t devices) {
- return list_string(string_conversion_table_input_device, devices);
-}
-
/* Flags */
bool pa_string_convert_flag_num_to_str(audio_output_flags_t value, const char **to_str) {
return string_convert_num_to_str(string_conversion_table_output_flag, (uint32_t) value, to_str);
@@ -221,13 +202,9 @@
bool pa_input_device_default_audio_source(audio_devices_t input_device, audio_source_t *default_source)
{
-#if AUDIO_API_VERSION_MAJ >= 2
- input_device &= ~AUDIO_DEVICE_BIT_IN;
-#endif
-
/* Note converting HAL values to different HAL values! */
for (unsigned int i = 0; i < sizeof(conversion_table_default_audio_source) / (sizeof(uint32_t) * 2); i++) {
- if (conversion_table_default_audio_source[i][0] & input_device) {
+ if (conversion_table_default_audio_source[i][0] == input_device) {
*default_source = conversion_table_default_audio_source[i][1];
return true;
}
@@ -321,7 +298,7 @@
}
bool pa_conversion_parse_sampling_rates(const char *fn, const unsigned ln,
- const char *str, bool legacy,
+ const char *str,
uint32_t sampling_rates[AUDIO_MAX_SAMPLING_RATES]) {
pa_assert(fn);
pa_assert(str);
@@ -330,16 +307,14 @@
const char *state = NULL;
uint32_t pos = 0;
- while ((entry = pa_split(str, value_separator(legacy), &state))) {
+ while ((entry = pa_split(str, VALUE_SEPARATOR, &state))) {
int32_t val;
-#if AUDIO_API_VERSION_MAJ >= 3
if (pos == 0 && pa_streq(entry, "dynamic")) {
sampling_rates[pos++] = (uint32_t) -1;
pa_xfree(entry);
break;
}
-#endif
if (pos == AUDIO_MAX_SAMPLING_RATES) {
pa_log("[%s:%u] Too many sample rate entries (> %d)", fn, ln, AUDIO_MAX_SAMPLING_RATES);
@@ -389,7 +364,7 @@
}
bool pa_conversion_parse_formats(const char *fn, const unsigned ln,
- const char *str, bool legacy,
+ const char *str,
audio_format_t *formats) {
int count;
char *unknown = NULL;
@@ -398,18 +373,13 @@
pa_assert(str);
pa_assert(formats);
-#if AUDIO_API_VERSION_MAJ >= 3
/* Needs to be probed later */
if (pa_streq(str, "dynamic")) {
*formats = 0;
return true;
}
-#endif
-
- count = pa_conversion_parse_list(CONV_STRING_FORMAT, value_separator(legacy), str, formats, &unknown);
- if (legacy)
- return check_and_log(fn, ln, "formats", count, str, unknown, false);
+ count = pa_conversion_parse_list(CONV_STRING_FORMAT, VALUE_SEPARATOR, str, formats, &unknown);
/* As the new XML configuration lists formats as one per profile, unknown
* formats will cause the parser to quit. As a workaround for non-legacy
@@ -418,44 +388,70 @@
return count > 0;
}
-static bool parse_channels(const char *fn, const unsigned ln,
- const char *str, bool in_output,
- bool legacy, audio_channel_mask_t *channels) {
- int count;
+static int parse_channels(const char *fn, const unsigned ln,
+ const char *str, bool in_output,
+ audio_channel_mask_t channel_masks[AUDIO_MAX_CHANNEL_MASKS]) {
+ bool success;
+ int count = 0;
char *unknown = NULL;
+ char *entry;
+ const char *state = NULL;
pa_assert(fn);
pa_assert(str);
- pa_assert(channels);
/* Needs to be probed later */
if (pa_streq(str, "dynamic")) {
- *channels = 0;
- return true;
+ channel_masks[0] = 0;
+ return 1;
+ }
+
+ while ((entry = pa_split(str, VALUE_SEPARATOR, &state))) {
+ uint32_t val;
+
+ if (count == AUDIO_MAX_CHANNEL_MASKS) {
+ pa_log("[%s:%u] Too many channel mask entries (> %d)", fn, ln, AUDIO_MAX_CHANNEL_MASKS);
+ pa_xfree(entry);
+ return false;
+ }
+
+ if (!string_convert_str_to_num(in_output ? string_conversion_table_output_channels
+ : string_conversion_table_input_channels,
+ entry,
+ &val)) {
+ pa_log_debug("[%s:%u] Ignore unknown channel mask value %s", fn, ln, entry);
+ pa_xfree(entry);
+ continue;
+ }
+
+ channel_masks[count++] = val;
+
+ pa_xfree(entry);
}
- count = pa_conversion_parse_list(in_output ? CONV_STRING_OUTPUT_CHANNELS : CONV_STRING_INPUT_CHANNELS,
- value_separator(legacy), str, channels, &unknown);
+ channel_masks[count] = 0;
- return check_and_log(fn, ln, in_output ? "output channel_masks" : "input channel_masks",
- count, str, unknown, false);
+ /* Avoid aborting parsing when no supported channel is found */
+ success = check_and_log(fn, ln, in_output ? "output channel_masks" : "input channel_masks",
+ count == 0 ? 1 : count, str, unknown, false);
+ return success ? count : -1;
}
-bool pa_conversion_parse_output_channels(const char *fn, const unsigned ln,
- const char *str, bool legacy,
- audio_channel_mask_t *channels) {
- return parse_channels(fn, ln, str, true, legacy, channels);
+int pa_conversion_parse_output_channels(const char *fn, const unsigned ln,
+ const char *str,
+ audio_channel_mask_t channel_masks[AUDIO_MAX_CHANNEL_MASKS]) {
+ return parse_channels(fn, ln, str, true, channel_masks);
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/common/droid-config.c
^
|
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2018 Jolla Ltd.
+ * Copyright (C) 2013-2022 Jolla Ltd.
*
* Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
*
@@ -26,6 +26,7 @@
#include "droid/version.h"
#include "droid/droid-config.h"
#include "droid/sllist.h"
+#include "config-parser-xml.h"
#include <signal.h>
#include <stdio.h>
@@ -36,52 +37,28 @@
#include <valgrind/memcheck.h>
#endif
-#include <pulse/rtclock.h>
-#include <pulse/timeval.h>
-#include <pulse/volume.h>
#include <pulse/xmalloc.h>
-
-#include <pulsecore/core.h>
-#include <pulsecore/core-error.h>
-#include <pulsecore/i18n.h>
-#include <pulsecore/module.h>
-#include <pulsecore/memchunk.h>
-#include <pulsecore/sink.h>
-#include <pulsecore/modargs.h>
-#include <pulsecore/core-rtclock.h>
#include <pulsecore/core-util.h>
-#include <pulsecore/sample-util.h>
#include <pulsecore/log.h>
#include <pulsecore/macro.h>
-#include <pulsecore/thread.h>
-#include <pulsecore/thread-mq.h>
-#include <pulsecore/rtpoll.h>
-#include <pulsecore/time-smoother.h>
-#include <pulsecore/refcnt.h>
-#include <pulsecore/shared.h>
-#include <pulsecore/mutex.h>
-#include <pulsecore/strlist.h>
-#include <pulsecore/atomic.h>
+#include <pulsecore/modargs.h>
#include <hardware/audio.h>
-#include <hardware_legacy/audio_policy_conf.h>
-#define ODM_AUDIO_POLICY_CONFIG_XML_FILE "/odm/etc/audio_policy_configuration.xml"
-#define VENDOR_AUDIO_AUDIO_POLICY_CONFIG_XML_FILE "/vendor/etc/audio/audio_policy_configuration.xml"
-#define VENDOR_AUDIO_POLICY_CONFIG_XML_FILE "/vendor/etc/audio_policy_configuration.xml"
-#define SYSTEM_AUDIO_POLICY_CONFIG_XML_FILE "/system/etc/audio_policy_configuration.xml"
+#define ODM_AUDIO_POLICY_CONFIG_XML_FILE "/odm/etc/audio_policy_configuration.xml"
+#define VENDOR_AUDIO_AUDIO_POLICY_CONFIG_XML_FILE "/vendor/etc/audio/audio_policy_configuration.xml"
+#define VENDOR_AUDIO_POLICY_CONFIG_XML_FILE "/vendor/etc/audio_policy_configuration.xml"
+#define SYSTEM_AUDIO_POLICY_CONFIG_XML_FILE "/system/etc/audio_policy_configuration.xml"
-pa_droid_config_audio *pa_droid_config_load(pa_modargs *ma) {
- pa_droid_config_audio *config = NULL;
+dm_config_device *dm_config_load(pa_modargs *ma) {
+ dm_config_device *config = NULL;
const char *manual_config;
const char *config_location[] = {
ODM_AUDIO_POLICY_CONFIG_XML_FILE,
VENDOR_AUDIO_AUDIO_POLICY_CONFIG_XML_FILE,
VENDOR_AUDIO_POLICY_CONFIG_XML_FILE,
- AUDIO_POLICY_VENDOR_CONFIG_FILE,
SYSTEM_AUDIO_POLICY_CONFIG_XML_FILE,
- AUDIO_POLICY_CONFIG_FILE,
NULL};
pa_assert(ma);
@@ -106,92 +83,210 @@
return config;
}
-pa_droid_config_audio *pa_droid_config_dup(const pa_droid_config_audio *config) {
- pa_droid_config_audio *config_copy;
- pa_droid_config_hw_module *module, *module_copy;
- pa_droid_config_device *device, *device_copy;
+static dm_config_profile *config_profile_dup(const dm_config_profile *profile) {
+ dm_config_profile *copy = pa_xnew0(dm_config_profile, 1);
- pa_assert(config);
+ copy->name = pa_xstrdup(profile->name);
+ copy->format = profile->format;
+ memcpy(copy->sampling_rates,
+ profile->sampling_rates,
+ sizeof(profile->sampling_rates));
+ memcpy(copy->channel_masks,
+ profile->channel_masks,
+ sizeof(profile->channel_masks));
+
+ return copy;
+}
+
+static dm_config_port *config_port_dup(const dm_config_port *port, dm_config_module *module) {
+ dm_config_port *copy = pa_xnew0(dm_config_port, 1);
+ const dm_list_entry *i;
+
+ copy->module = module;
+ copy->port_type = port->port_type;
+ copy->name = pa_xstrdup(port->name);
+ copy->role = port->role;
+ copy->profiles = dm_list_new();
+
+ DM_LIST_FOREACH(i, port->profiles)
+ dm_list_push_back(copy->profiles, config_profile_dup(i->data));
+
+ if (port->port_type == DM_CONFIG_TYPE_DEVICE_PORT) {
+ copy->type = port->type;
+ copy->address = pa_xstrdup(port->address);
+ }
+
+ if (port->port_type == DM_CONFIG_TYPE_MIX_PORT) {
+ copy->flags = port->flags;
+ copy->max_open_count = port->max_open_count;
+ copy->max_active_count = port->max_active_count;
+ }
+
+ return copy;
+}
- config_copy = pa_xnew0(pa_droid_config_audio, 1);
+static dm_config_route *config_route_dup(const dm_config_route *route, dm_list *ports) {
+ dm_config_route *copy = pa_xnew0(dm_config_route, 1);
+ dm_config_port *port_copy, *port;
+ void *state, *state2;
- if (config->global_config)
- config_copy->global_config = pa_xmemdup(config->global_config, sizeof(*config->global_config));
+ copy->type = route->type;
+ copy->sources = dm_list_new();
- SLLIST_FOREACH(module, config->hw_modules) {
- module_copy = pa_droid_config_hw_module_new(config_copy, module->name);
- if (module->global_config)
- module_copy->global_config = pa_xmemdup(module->global_config, sizeof(*module->global_config));
-
- SLLIST_FOREACH(device, module->outputs) {
- device_copy = pa_xmemdup(device, sizeof(*device));
- device_copy->module = module_copy;
- device_copy->name = pa_xstrdup(device->name);
- SLLIST_APPEND(pa_droid_config_device, module_copy->outputs, device_copy);
+ DM_LIST_FOREACH_DATA(port, route->sources, state) {
+ DM_LIST_FOREACH_DATA(port_copy, ports, state2) {
+ if (dm_config_port_equal(port, port_copy)) {
+ dm_list_push_back(copy->sources, port_copy);
+ break;
+ }
}
+ }
- SLLIST_FOREACH(device, module->inputs) {
- device_copy = pa_xmemdup(device, sizeof(*device));
- device_copy->module = module_copy;
- device_copy->name = pa_xstrdup(device->name);
- SLLIST_APPEND(pa_droid_config_device, module_copy->inputs, device_copy);
+ DM_LIST_FOREACH_DATA(port_copy, ports, state) {
+ if (dm_config_port_equal(port_copy, route->sink)) {
+ copy->sink = port_copy;
+ break;
}
+ }
- SLLIST_APPEND(pa_droid_config_hw_module, config_copy->hw_modules, module_copy);
+ return copy;
+}
+
+static dm_config_module *config_module_dup(const dm_config_module *module) {
+ dm_config_module *copy = pa_xnew0(dm_config_module, 1);
+ dm_config_port *device_port, *attached_device, *mix_port;
+ dm_config_route *route;
+ void *state, *state2;
+
+ copy = pa_xnew0(dm_config_module, 1);
+ copy->name = pa_xstrdup(module->name);
+ copy->version_major = module->version_major;
+ copy->version_minor = module->version_minor;
+ copy->attached_devices = dm_list_new();
+ copy->default_output_device = NULL;
+ copy->mix_ports = dm_list_new();
+ copy->device_ports = dm_list_new();
+ copy->ports = dm_list_new();
+ copy->routes = dm_list_new();
+
+ DM_LIST_FOREACH_DATA(device_port, module->device_ports, state) {
+ dm_config_port *device_port_copy = config_port_dup(device_port, copy);
+ dm_list_push_back(copy->device_ports, device_port_copy);
+ dm_list_push_back(copy->ports, device_port_copy);
+ if (module->default_output_device == device_port)
+ copy->default_output_device = device_port_copy;
+ DM_LIST_FOREACH_DATA(attached_device, module->attached_devices, state2) {
+ if (attached_device == device_port) {
+ dm_list_push_back(copy->attached_devices, device_port_copy);
+ break;
+ }
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/common/droid-util-audio.h
^
|
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 Jolla Ltd.
+ * Copyright (C) 2017-2022 Jolla Ltd.
*
* Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
*
@@ -28,7 +28,6 @@
#endif
#include <hardware/audio.h>
-#include <hardware_legacy/audio_policy_conf.h>
#include <pulse/channelmap.h>
@@ -102,18 +101,33 @@
{ 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_TELEPHONY_RX, AUDIO_SOURCE_VOICE_CALL },
{ AUDIO_DEVICE_IN_BACK_MIC, AUDIO_SOURCE_MIC },
{ AUDIO_DEVICE_IN_REMOTE_SUBMIX, AUDIO_SOURCE_REMOTE_SUBMIX },
+ { AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_USB_ACCESSORY, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_USB_DEVICE, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_FM_TUNER, AUDIO_SOURCE_FM_TUNER },
+ { AUDIO_DEVICE_IN_TV_TUNER, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_LINE, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_SPDIF, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_BLUETOOTH_A2DP, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_LOOPBACK, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_IP, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_BUS, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_PROXY, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_USB_HEADSET, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_BLUETOOTH_BLE, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_HDMI_ARC, AUDIO_SOURCE_MIC },
+ { AUDIO_DEVICE_IN_ECHO_REFERENCE, AUDIO_SOURCE_MIC },
+
#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 */
@@ -136,30 +150,30 @@
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 ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_IP ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_BUS ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_PROXY ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_USB_HEADSET ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_HEARING_AID ),
+ STRING_ENTRY( AUDIO_DEVICE_OUT_ECHO_CANCELLER ),
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. */
- STRING_ENTRY_IF_AUDIO_DEVICE_OUT_HDMI
- STRING_ENTRY_IF_AUDIO_DEVICE_OUT_HDMI_ARC
- STRING_ENTRY_IF_AUDIO_DEVICE_OUT_TELEPHONY_TX
- STRING_ENTRY_IF_AUDIO_DEVICE_OUT_LINE
- STRING_ENTRY_IF_AUDIO_DEVICE_OUT_SPDIF
- STRING_ENTRY_IF_AUDIO_DEVICE_OUT_AUX_LINE
- STRING_ENTRY_IF_AUDIO_DEVICE_OUT_SPEAKER_SAFE
- STRING_ENTRY_IF_AUDIO_DEVICE_OUT_FM
- STRING_ENTRY_IF_AUDIO_DEVICE_OUT_FM_TX
- STRING_ENTRY_IF_AUDIO_DEVICE_OUT_ANC_HEADSET
- STRING_ENTRY_IF_AUDIO_DEVICE_OUT_ANC_HEADPHONE
- STRING_ENTRY_IF_AUDIO_DEVICE_OUT_PROXY
- STRING_ENTRY_IF_AUDIO_DEVICE_OUT_IP
-
- /* 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_audio_mode_fancy[] = {
+ { AUDIO_MODE_NORMAL, "normal" },
+ { AUDIO_MODE_RINGTONE, "ringtone" },
+ { AUDIO_MODE_IN_CALL, "in call" },
+ { AUDIO_MODE_IN_COMMUNICATION, "in communication" },
+ { AUDIO_MODE_CALL_SCREEN, "call screen" },
{ 0, NULL }
};
@@ -167,8 +181,6 @@
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" },
@@ -183,23 +195,21 @@
{ 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_tx" },
+ { 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" },
+ { AUDIO_DEVICE_OUT_IP, "output-ip" },
+ { AUDIO_DEVICE_OUT_BUS, "output-bus" },
+ { AUDIO_DEVICE_OUT_PROXY, "output-proxy" },
+ { AUDIO_DEVICE_OUT_USB_HEADSET, "output-usb_headset" },
+ { AUDIO_DEVICE_OUT_HEARING_AID, "output-hearing_aid" },
+ { AUDIO_DEVICE_OUT_ECHO_CANCELLER, "output-echo_canceller" },
{ AUDIO_DEVICE_OUT_DEFAULT, "output-default" },
- /* Devices which may or may not be defined for all devices, */
- FANCY_ENTRY_IF_AUDIO_DEVICE_OUT_HDMI ( "output-hdmi" )
- FANCY_ENTRY_IF_AUDIO_DEVICE_OUT_HDMI_ARC ( "output-hdmi_arc" )
- FANCY_ENTRY_IF_AUDIO_DEVICE_OUT_TELEPHONY_TX ( "output-telephony_tx" )
- FANCY_ENTRY_IF_AUDIO_DEVICE_OUT_LINE ( "output-line" )
- FANCY_ENTRY_IF_AUDIO_DEVICE_OUT_SPDIF ( "output-spdif" )
- FANCY_ENTRY_IF_AUDIO_DEVICE_OUT_AUX_LINE ( "output-aux_line" )
- FANCY_ENTRY_IF_AUDIO_DEVICE_OUT_SPEAKER_SAFE ( "output-speaker_safe" )
- FANCY_ENTRY_IF_AUDIO_DEVICE_OUT_FM ( "output-fm" )
- FANCY_ENTRY_IF_AUDIO_DEVICE_OUT_FM_TX ( "output-fm_tx" )
- FANCY_ENTRY_IF_AUDIO_DEVICE_OUT_ANC_HEADSET ( "output-and_headset" )
- FANCY_ENTRY_IF_AUDIO_DEVICE_OUT_ANC_HEADPHONE ( "output-anc_headphone" )
- FANCY_ENTRY_IF_AUDIO_DEVICE_OUT_PROXY ( "output-proxy" )
- FANCY_ENTRY_IF_AUDIO_DEVICE_OUT_IP ( "output-ip" )
-
{ 0, NULL }
};
@@ -213,39 +223,33 @@
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_HDMI ), /* Same as AUDIO_DEVICE_IN_AUX_DIGITAL */
STRING_ENTRY( AUDIO_DEVICE_IN_VOICE_CALL ),
+ STRING_ENTRY( AUDIO_DEVICE_IN_TELEPHONY_RX ), /* Same as 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_FM_TUNER ),
+ STRING_ENTRY( AUDIO_DEVICE_IN_TV_TUNER ),
+ STRING_ENTRY( AUDIO_DEVICE_IN_LINE ),
+ STRING_ENTRY( AUDIO_DEVICE_IN_SPDIF ),
+ STRING_ENTRY( AUDIO_DEVICE_IN_BLUETOOTH_A2DP ),
+ STRING_ENTRY( AUDIO_DEVICE_IN_LOOPBACK ),
+ STRING_ENTRY( AUDIO_DEVICE_IN_IP ),
+ STRING_ENTRY( AUDIO_DEVICE_IN_BUS ),
+ STRING_ENTRY( AUDIO_DEVICE_IN_PROXY ),
+ STRING_ENTRY( AUDIO_DEVICE_IN_USB_HEADSET ),
+ STRING_ENTRY( AUDIO_DEVICE_IN_BLUETOOTH_BLE ),
+ STRING_ENTRY( AUDIO_DEVICE_IN_HDMI_ARC ),
+ STRING_ENTRY( AUDIO_DEVICE_IN_ECHO_REFERENCE ),
STRING_ENTRY( AUDIO_DEVICE_IN_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. */
- STRING_ENTRY_IF_AUDIO_DEVICE_IN_HDMI
- STRING_ENTRY_IF_AUDIO_DEVICE_IN_TELEPHONY_RX
- STRING_ENTRY_IF_AUDIO_DEVICE_IN_FM_TUNER
- STRING_ENTRY_IF_AUDIO_DEVICE_IN_TV_TUNER
- STRING_ENTRY_IF_AUDIO_DEVICE_IN_LINE
- STRING_ENTRY_IF_AUDIO_DEVICE_IN_SPDIF
- STRING_ENTRY_IF_AUDIO_DEVICE_IN_BLUETOOTH_A2DP
- STRING_ENTRY_IF_AUDIO_DEVICE_IN_LOOPBACK
- STRING_ENTRY_IF_AUDIO_DEVICE_IN_PROXY
+ /* Devices which may or may not be defined for all devices. */
STRING_ENTRY_IF_AUDIO_DEVICE_IN_FM_RX
STRING_ENTRY_IF_AUDIO_DEVICE_IN_FM_RX_A2DP
- STRING_ENTRY_IF_AUDIO_DEVICE_IN_IP
-
-#ifdef DROID_AUDIO_HAL_SECONDARY_MIC
- STRING_ENTRY( AUDIO_DEVICE_IN_SECONDARY_MIC ),
-#endif
-
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/common/droid-util.c
^
|
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2018 Jolla Ltd.
+ * Copyright (C) 2013-2022 Jolla Ltd.
*
* Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
*
@@ -31,6 +31,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <grp.h>
+#include <stdarg.h>
#ifdef HAVE_VALGRIND_MEMCHECK_H
#include <valgrind/memcheck.h>
@@ -70,36 +71,43 @@
#include "droid/droid-config.h"
#include "droid/conversion.h"
#include "droid/sllist.h"
+#include "droid/utils.h"
-struct droid_quirk {
+struct droid_option {
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 },
- { "unload_no_close", QUIRK_UNLOAD_NO_CLOSE },
- { "no_hw_volume", QUIRK_NO_HW_VOLUME },
- { "output_make_writable", QUIRK_OUTPUT_MAKE_WRITABLE },
- { "realcall", QUIRK_REALCALL },
- { "unload_call_exit", QUIRK_UNLOAD_CALL_EXIT },
- { "output_fast", QUIRK_OUTPUT_FAST },
- { "output_deep_buffer", QUIRK_OUTPUT_DEEP_BUFFER },
- { "audio_cal_wait", QUIRK_AUDIO_CAL_WAIT },
- { "standby_set_route", QUIRK_STANDBY_SET_ROUTE },
- { "speaker_before_voice", QUIRK_SPEAKER_BEFORE_VOICE },
+struct droid_option valid_options[] = {
+ { "input_atoi", DM_OPTION_INPUT_ATOI },
+ { "close_input", DM_OPTION_CLOSE_INPUT },
+ { "unload_no_close", DM_OPTION_UNLOAD_NO_CLOSE },
+ { "hw_volume", DM_OPTION_HW_VOLUME },
+ { "realcall", DM_OPTION_REALCALL },
+ { "unload_call_exit", DM_OPTION_UNLOAD_CALL_EXIT },
+ { "output_fast", DM_OPTION_OUTPUT_FAST },
+ { "output_deep_buffer", DM_OPTION_OUTPUT_DEEP_BUFFER },
+ { "audio_cal_wait", DM_OPTION_AUDIO_CAL_WAIT },
+ { "speaker_before_voice", DM_OPTION_SPEAKER_BEFORE_VOICE },
+ { "output_voip_rx", DM_OPTION_OUTPUT_VOIP_RX },
+ { "record_voice_16k", DM_OPTION_RECORD_VOICE_16K },
};
-#define QUIRK_AUDIO_CAL_WAIT_S (10)
-#define QUIRK_AUDIO_CAL_FILE "/data/vendor/audio/cirrus_sony.cal"
-#define QUIRK_AUDIO_CAL_GROUP "audio"
-#define QUIRK_AUDIO_CAL_MODE (0664)
-
-#define DEFAULT_PRIORITY (100)
-#define DEFAULT_AUDIO_FORMAT (AUDIO_FORMAT_PCM_16_BIT)
+struct user_options {
+ struct user_option {
+ bool enable;
+ bool set;
+ } options[DM_OPTION_COUNT];
+};
+#define DM_OPTION_AUDIO_CAL_WAIT_S (10)
+#define DM_OPTION_AUDIO_CAL_FILE "/data/vendor/audio/cirrus_sony.cal"
+#define DM_OPTION_AUDIO_CAL_GROUP "audio"
+#define DM_OPTION_AUDIO_CAL_MODE (0664)
+
+#define DEFAULT_PRIORITY (100)
+#define DEFAULT_AUDIO_FORMAT (AUDIO_FORMAT_PCM_16_BIT)
+#define DROID_VOIP_RX_SAMPLE_RATE (16000)
#ifndef AUDIO_PARAMETER_VALUE_ON
#define AUDIO_PARAMETER_VALUE_ON "on"
@@ -112,14 +120,21 @@
#define AUDIO_PARAMETER_BT_SCO_ON "BT_SCO=" AUDIO_PARAMETER_VALUE_ON
#define AUDIO_PARAMETER_BT_SCO_OFF "BT_SCO=" AUDIO_PARAMETER_VALUE_OFF
+#define DROID_HW_HANDLE_V1 "droid.handle.v1"
+#define DROID_SET_PARAMETERS_V1 "droid.set_parameters.v1"
+#define DROID_GET_PARAMETERS_V1 "droid.get_parameters.v1"
+
static void droid_port_free(pa_droid_port *p);
-static int input_stream_set_route(pa_droid_hw_module *hw_module, pa_droid_stream *s);
+static int input_stream_set_route(pa_droid_stream *stream, const dm_config_port *device_port);
static int droid_set_parameters(pa_droid_hw_module *hw, const char *parameters);
-static bool droid_set_audio_source(pa_droid_hw_module *hw_module, audio_source_t audio_source);
+static bool droid_set_audio_source(pa_droid_stream *stream, audio_source_t audio_source);
+static void add_output_ports(pa_droid_mapping *droid_mapping, dm_config_port *device_port);
+static void add_input_ports(pa_droid_mapping *droid_mapping, dm_config_port *device_port);
+static void audio_patch_release(pa_droid_stream *stream);
static pa_droid_profile *profile_new(pa_droid_profile_set *ps,
- const pa_droid_config_hw_module *module,
+ dm_config_module *module,
const char *name,
const char *description) {
pa_droid_profile *p;
@@ -137,82 +152,14 @@
p->priority = DEFAULT_PRIORITY;
p->output_mappings = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+ p->input_mappings = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
pa_hashmap_put(ps->profiles, p->name, p);
return p;
}
-static pa_droid_profile *droid_profile_new(pa_droid_profile_set *ps,
- const pa_droid_config_device *primary_output,
- const pa_droid_config_device *output,
- const pa_droid_config_device *inputs) {
- pa_droid_profile *p;
- char *name;
- char *description;
-
- pa_assert(ps);
- pa_assert(output);
- pa_assert(!primary_output || primary_output->direction == PA_DIRECTION_OUTPUT);
- pa_assert(!inputs || inputs->direction == PA_DIRECTION_INPUT);
-
- name = pa_sprintf_malloc("%s%s%s", output->name, inputs ? "-" : "", inputs ? inputs->name : "");
- description = pa_sprintf_malloc("%s output%s%s%s", output->name,
- inputs ? " and " : "",
- inputs ? inputs->name : "",
- inputs ? " inputs." : "");
-
- p = profile_new(ps, output->module, name, description);
- pa_xfree(name);
- pa_xfree(description);
-
- if (pa_streq(output->name, "primary")) {
- p->priority += DEFAULT_PRIORITY;
-
- if (inputs && pa_streq(inputs->name, "primary"))
- p->priority += DEFAULT_PRIORITY;
- }
-
- if (primary_output && primary_output != output)
- pa_idxset_put(p->output_mappings, pa_droid_mapping_get(ps, primary_output), NULL);
- if (output)
- pa_idxset_put(p->output_mappings, pa_droid_mapping_get(ps, output), NULL);
- if (inputs)
- p->input_mapping = pa_droid_mapping_get(ps, inputs);
-
- return p;
-}
-
-void pa_droid_profile_add_mapping(pa_droid_profile *p, pa_droid_mapping *am) {
- pa_assert(p);
- pa_assert(am);
-
- if (am->direction == PA_DIRECTION_OUTPUT)
- pa_idxset_put(p->output_mappings, am, NULL);
- else
- p->input_mapping = am;
-}
-
-static pa_droid_profile *add_profile(pa_droid_profile_set *ps,
- const pa_droid_config_device *primary_output,
- const pa_droid_config_device *output,
- const pa_droid_config_device *input) {
- pa_droid_profile *ap;
-
- pa_assert(!primary_output || primary_output->direction == PA_DIRECTION_OUTPUT);
- pa_assert(output && output->direction == PA_DIRECTION_OUTPUT);
- pa_assert(!input || input->direction == PA_DIRECTION_INPUT);
-
- pa_log_debug("New profile: %s-%s", output->name, input ? input->name : "no input");
-
- ap = droid_profile_new(ps, primary_output, output, input);
-
- pa_hashmap_put(ps->profiles, ap->name, ap);
-
- return ap;
-}
-
-static pa_droid_profile_set *profile_set_new(const pa_droid_config_hw_module *module) {
+static pa_droid_profile_set *profile_set_new(dm_config_module *module) {
pa_droid_profile_set *ps;
pa_assert(module);
@@ -231,118 +178,160 @@
return ps;
}
-static void add_all_profiles(pa_droid_profile_set *ps,
- const pa_droid_config_hw_module *module) {
- const pa_droid_config_device *primary_output = NULL;
- const pa_droid_config_device *output;
- const pa_droid_config_device *input;
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/common/include/droid/conversion.h
^
|
@@ -2,7 +2,7 @@
#define foodroidconversionfoo
/*
- * Copyright (C) 2018 Jolla Ltd.
+ * Copyright (C) 2018-2022 Jolla Ltd.
*
* Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
*
@@ -71,8 +71,6 @@
bool pa_string_convert_flag_num_to_str(audio_output_flags_t value, const char **to_str);
bool pa_string_convert_flag_str_to_num(const char *str, audio_output_flags_t *to_value);
-char *pa_list_string_output_device(audio_devices_t devices);
-char *pa_list_string_input_device(audio_devices_t devices);
char *pa_list_string_flags(audio_output_flags_t flags);
/* Get default audio source associated with input device.
@@ -87,22 +85,22 @@
const char *str, uint32_t *dst, char **unknown_entries);
bool pa_conversion_parse_sampling_rates(const char *fn, const unsigned ln,
- const char *str, bool legacy,
+ const char *str,
uint32_t sampling_rates[AUDIO_MAX_SAMPLING_RATES]);
bool pa_conversion_parse_formats(const char *fn, const unsigned ln,
- const char *str, bool legacy,
+ const char *str,
audio_format_t *formats);
-bool pa_conversion_parse_output_channels(const char *fn, const unsigned ln,
- const char *str, bool legacy,
- audio_channel_mask_t *channels);
-bool pa_conversion_parse_input_channels(const char *fn, const unsigned ln,
- const char *str, bool legacy,
- audio_channel_mask_t *channels);
+int pa_conversion_parse_output_channels(const char *fn, const unsigned ln,
+ const char *str,
+ audio_channel_mask_t channel_masks[AUDIO_MAX_CHANNEL_MASKS]);
+int pa_conversion_parse_input_channels(const char *fn, const unsigned ln,
+ const char *str,
+ audio_channel_mask_t channel_masks[AUDIO_MAX_CHANNEL_MASKS]);
bool pa_conversion_parse_output_devices(const char *fn, const unsigned ln,
- char *str, bool legacy, bool must_recognize_all,
+ char *str, bool must_recognize_all,
audio_devices_t *devices);
bool pa_conversion_parse_input_devices(const char *fn, const unsigned ln,
- char *str, bool legacy, bool must_recognize_all,
+ char *str, bool must_recognize_all,
audio_devices_t *devices);
bool pa_conversion_parse_output_flags(const char *fn, const unsigned ln,
const char *str, audio_output_flags_t *flags);
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/common/include/droid/droid-config.h
^
|
@@ -2,7 +2,7 @@
#define foodroidconfigfoo
/*
- * Copyright (C) 2018 Jolla Ltd.
+ * Copyright (C) 2018-2022 Jolla Ltd.
*
* Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
*
@@ -30,75 +30,106 @@
#include <android-config.h>
#include <hardware/audio.h>
+#include <droid/sllist.h>
#include <droid/version.h>
-typedef struct pa_droid_config_audio pa_droid_config_audio;
-typedef struct pa_droid_config_hw_module pa_droid_config_hw_module;
+#define AUDIO_MAX_SAMPLING_RATES (32)
+#define AUDIO_MAX_CHANNEL_MASKS (32)
-#define AUDIO_MAX_SAMPLING_RATES (32)
+typedef struct dm_config_global dm_config_global;
+typedef struct dm_config_port dm_config_port;
+typedef struct dm_config_route dm_config_route;
+typedef struct dm_config_module dm_config_module;
+typedef struct dm_config_device dm_config_device;
+typedef struct dm_config_profile dm_config_profile;
+
+struct dm_config_global {
+ char *key;
+ char *value;
+};
+
+struct dm_config_profile {
+ char *name;
+ audio_format_t format; /* 0 -> dynamic TODO check that this is still true */
+ uint32_t sampling_rates[AUDIO_MAX_SAMPLING_RATES]; /* sampling_rates[0] == 0 -> dynamic, otherwise 0 terminates list */
+ audio_channel_mask_t channel_masks[AUDIO_MAX_CHANNEL_MASKS]; /* channel_masks[0] == 0 -> dynamic */
+};
-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;
-} pa_droid_config_global;
+typedef enum dm_config_role {
+ DM_CONFIG_ROLE_SINK,
+ DM_CONFIG_ROLE_SOURCE,
+} dm_config_role_t;
+
+typedef enum dm_config_type {
+ DM_CONFIG_TYPE_MIX,
+ DM_CONFIG_TYPE_DEVICE_PORT,
+ DM_CONFIG_TYPE_MIX_PORT,
+} dm_config_type_t;
-typedef struct pa_droid_config_device {
- const pa_droid_config_hw_module *module;
+struct dm_config_port {
+ dm_config_module *module;
+ /* common values */
+
+ dm_config_type_t port_type; /* either mixPort or devicePort */
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;
- /* Instead of using audio_output_flags_t and audio_input_flags_t
- * unify the flags as uint32_t so that we can have single struct for both
- * output and input configurations.
- * audio_input_flags_t was introduced in APIs 2 & 3, depending on adaptation,
- * so having input flags as uint32_t is simpler from input implementation
- * point of view as well. */
- uint32_t flags;
- pa_direction_t direction;
+ dm_config_role_t role;
+ dm_list *profiles; /* dm_config_profile* */
+
+ /* devicePort specific values */
+
+ audio_devices_t type;
+ char *address;
- struct pa_droid_config_device *next;
-} pa_droid_config_device;
+ /* mixPort specific values */
-struct pa_droid_config_hw_module {
- const pa_droid_config_audio *config;
+ uint32_t flags; /* audio_output_flag_t or audio_input_flag_t */
+ int max_open_count; /* 0 == not defined */
+ int max_active_count; /* 0 == not defined */
+};
+
+struct dm_config_route {
+ dm_config_type_t type;
+ dm_config_port *sink;
+ dm_list *sources; /* dm_config_port* */
+};
+
+struct dm_config_module {
+ dm_config_device *config;
char *name;
- /* If global config is not defined for module, use root global config. */
- pa_droid_config_global *global_config;
- pa_droid_config_device *outputs;
- pa_droid_config_device *inputs;
+ int version_major;
+ int version_minor;
- struct pa_droid_config_hw_module *next;
+ dm_list *attached_devices; /* dm_config_port* owned by device_ports list below */
+ dm_config_port *default_output_device; /* owned by device_ports list below */
+ dm_list *ports; /* dm_config_port* - for convenience port types are filtered to two lists below: */
+ dm_list *mix_ports; /* dm_config_port* */
+ dm_list *device_ports; /* dm_config_port* */
+ dm_list *routes; /* dm_config_route* */
};
-struct pa_droid_config_audio {
- pa_droid_config_global *global_config;
- pa_droid_config_hw_module *hw_modules;
+struct dm_config_device {
+ dm_list *global_config; /* dm_config_global* */
+ dm_list *modules; /* dm_config_module* */
};
+
/* Config parser */
-pa_droid_config_audio *pa_droid_config_load(pa_modargs *ma);
-pa_droid_config_audio *pa_droid_config_dup(const pa_droid_config_audio *config);
-void pa_droid_config_free(pa_droid_config_audio *config);
-pa_droid_config_audio *pa_parse_droid_audio_config_legacy(const char *filename);
-pa_droid_config_audio *pa_parse_droid_audio_config_xml(const char *filename);
+dm_config_device *dm_config_load(pa_modargs *ma);
+dm_config_device *dm_config_dup(const dm_config_device *config);
+void dm_config_free(dm_config_device *config);
/* autodetect config type from filename and parse */
-pa_droid_config_audio *pa_parse_droid_audio_config(const char *filename);
+dm_config_device *pa_parse_droid_audio_config(const char *filename);
+
+dm_config_module *dm_config_find_module(dm_config_device *config, const char* module_id);
+dm_config_port *dm_config_find_port(dm_config_module *module, const char* name);
+dm_config_port *dm_config_default_output_device(dm_config_module *module);
+dm_config_port *dm_config_find_device_port(dm_config_port *port, audio_devices_t device);
+char *dm_config_escape_string(const char *string);
+
+bool dm_config_port_equal(const dm_config_port *a, const dm_config_port *b);
-const pa_droid_config_hw_module *pa_droid_config_find_module(const pa_droid_config_audio *config, const char* module_id);
-const pa_droid_config_device *pa_droid_config_find_output(const pa_droid_config_hw_module *module, const char* output_name);
-const pa_droid_config_device *pa_droid_config_find_input(const pa_droid_config_hw_module *module, const char* input_name);
-
-pa_droid_config_hw_module *pa_droid_config_hw_module_new(const pa_droid_config_audio *config, const char *name);
-void pa_droid_config_hw_module_free(pa_droid_config_hw_module *hw_module);
-pa_droid_config_device *pa_droid_config_device_new(const pa_droid_config_hw_module *module,
- pa_direction_t direction,
- const char *name);
-void pa_droid_config_device_free(pa_droid_config_device *device);
+dm_config_port *dm_config_find_mix_port(dm_config_module *module, const char *name);
#endif
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/common/include/droid/droid-util.h
^
|
@@ -2,7 +2,7 @@
#define foodroidutilfoo
/*
- * Copyright (C) 2013-2018 Jolla Ltd.
+ * Copyright (C) 2013-2022 Jolla Ltd.
*
* Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
*
@@ -35,10 +35,6 @@
#include <droid/version.h>
#include <droid/droid-config.h>
-#if defined(QCOM_BSP) && (AUDIO_API_VERSION_MAJ >= 3)
-#define DROID_AUDIO_HAL_USE_VSID
-#endif
-
#define PROP_DROID_DEVICES "droid.devices"
#define PROP_DROID_FLAGS "droid.flags"
#define PROP_DROID_HW_MODULE "droid.hw_module"
@@ -48,8 +44,10 @@
#define PROP_DROID_OUTPUT_LOW_LATENCY "droid.output.low_latency"
#define PROP_DROID_OUTPUT_MEDIA_LATENCY "droid.output.media_latency"
#define PROP_DROID_OUTPUT_OFFLOAD "droid.output.offload"
+#define PROP_DROID_OUTPUT_VOIP "droid.output.voip"
#define PROP_DROID_INPUT_BUILTIN "droid.input.builtin"
#define PROP_DROID_INPUT_EXTERNAL "droid.input.external"
+#define PROP_DROID_INPUT_VOIP "droid.input.voip"
#define EXT_PROP_AUDIO_SOURCE "audio.source"
@@ -60,35 +58,27 @@
typedef struct pa_droid_output_stream pa_droid_output_stream;
typedef struct pa_droid_input_stream pa_droid_input_stream;
typedef struct pa_droid_card_data pa_droid_card_data;
-typedef int (*common_set_parameters_cb_t)(pa_droid_card_data *card_data, const char *str);
-typedef struct pa_droid_quirks pa_droid_quirks;
+typedef struct pa_droid_options pa_droid_options;
-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;
-
-enum pa_droid_quirk_type {
- QUIRK_INPUT_ATOI,
- QUIRK_SET_PARAMETERS,
- QUIRK_CLOSE_INPUT,
- QUIRK_UNLOAD_NO_CLOSE,
- QUIRK_NO_HW_VOLUME,
- QUIRK_OUTPUT_MAKE_WRITABLE,
- QUIRK_REALCALL,
- QUIRK_UNLOAD_CALL_EXIT,
- QUIRK_OUTPUT_FAST,
- QUIRK_OUTPUT_DEEP_BUFFER,
- QUIRK_AUDIO_CAL_WAIT,
- QUIRK_STANDBY_SET_ROUTE,
- QUIRK_SPEAKER_BEFORE_VOICE,
- QUIRK_COUNT
+enum pa_droid_option_type {
+ DM_OPTION_INPUT_ATOI,
+ DM_OPTION_CLOSE_INPUT,
+ DM_OPTION_UNLOAD_NO_CLOSE,
+ DM_OPTION_HW_VOLUME,
+ DM_OPTION_REALCALL,
+ DM_OPTION_UNLOAD_CALL_EXIT,
+ DM_OPTION_OUTPUT_FAST,
+ DM_OPTION_OUTPUT_DEEP_BUFFER,
+ DM_OPTION_AUDIO_CAL_WAIT,
+ DM_OPTION_SPEAKER_BEFORE_VOICE,
+ DM_OPTION_OUTPUT_VOIP_RX,
+ DM_OPTION_RECORD_VOICE_16K,
+ DM_OPTION_COUNT
};
-struct pa_droid_quirks {
- bool enabled[QUIRK_COUNT];
+struct pa_droid_options {
+ bool enabled[DM_OPTION_COUNT];
};
struct pa_droid_hw_module {
@@ -97,8 +87,8 @@
pa_core *core;
char *shared_name;
- pa_droid_config_audio *config;
- const pa_droid_config_hw_module *enabled_module;
+ dm_config_device *config;
+ dm_config_module *enabled_module;
pa_mutex *hw_mutex;
pa_mutex *output_mutex;
pa_mutex *input_mutex;
@@ -108,8 +98,8 @@
const char *module_id;
- uint32_t stream_out_id;
- uint32_t stream_in_id;
+ uint32_t stream_id;
+ bool bt_sco_enabled;
pa_idxset *outputs;
pa_idxset *inputs;
@@ -118,14 +108,11 @@
pa_atomic_t active_outputs;
- pa_droid_quirks quirks;
+ pa_droid_options options;
/* Mode and input control */
struct _state {
audio_mode_t mode;
- audio_devices_t input_device;
- audio_source_t audio_source;
- pa_droid_stream *active_input;
} state;
};
@@ -133,8 +120,6 @@
struct audio_stream_out *stream;
pa_sample_spec sample_spec;
pa_channel_map channel_map;
- uint32_t flags;
- uint32_t device;
};
struct pa_droid_input_stream {
@@ -145,6 +130,12 @@
pa_channel_map channel_map;
pa_sample_spec req_sample_spec;
pa_channel_map req_channel_map;
+
+ audio_source_t audio_source;
+ dm_config_port *default_mix_port;
+ dm_config_port *input_port;
+ pa_droid_stream *active_input;
+
uint32_t flags;
uint32_t device;
bool first;
@@ -154,19 +145,21 @@
PA_REFCNT_DECLARE;
pa_droid_hw_module *module;
- const pa_droid_config_device *device_def;
+ dm_config_port *mix_port;
size_t buffer_size;
void *data;
+ audio_io_handle_t io_handle;
+ audio_patch_handle_t audio_patch;
+ const dm_config_port *active_device_port;
+
pa_droid_output_stream *output;
pa_droid_input_stream *input;
};
struct pa_droid_card_data {
void *userdata;
- /* General functions */
char *module_id;
- common_set_parameters_cb_t set_parameters;
};
@@ -176,13 +169,13 @@
typedef struct pa_droid_mapping pa_droid_mapping;
typedef struct pa_droid_port_data {
- audio_devices_t device;
+ dm_config_port *device_port;
} pa_droid_port_data;
typedef struct pa_droid_port {
pa_droid_mapping *mapping;
- audio_devices_t device;
+ dm_config_port *device_port;
char *name;
char *description;
unsigned priority;
@@ -191,9 +184,9 @@
struct pa_droid_mapping {
pa_droid_profile_set *profile_set;
- const pa_droid_config_device *output;
- /* Use all devices in one input */
- const pa_droid_config_device *inputs;
+ dm_config_module *module;
+ dm_config_port *mix_port;
+ dm_list *device_ports;
char *name;
char *description;
@@ -212,7 +205,7 @@
typedef struct pa_droid_profile {
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/common/include/droid/sllist.h
^
|
@@ -2,7 +2,7 @@
#define foosllistfoo
/*
- * Copyright (C) 2018 Jolla Ltd.
+ * Copyright (C) 2018-2022 Jolla Ltd.
*
* Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
*
@@ -22,6 +22,12 @@
* USA.
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdbool.h>
+#include <pulse/def.h>
+
#define SLLIST_APPEND(t, head, item) \
do { \
item->next = NULL; \
@@ -46,4 +52,43 @@
i = NULL; \
} while (0)
+typedef struct dm_list_entry dm_list_entry;
+typedef struct dm_list dm_list;
+
+struct dm_list_entry {
+ struct dm_list_entry *next;
+ struct dm_list_entry *prev;
+ void *data;
+};
+
+struct dm_list {
+ struct dm_list_entry *head;
+ struct dm_list_entry *tail;
+ ssize_t size;
+};
+
+dm_list *dm_list_new(void);
+void dm_list_free(dm_list *list, pa_free_cb_t free_cb);
+bool dm_list_remove(dm_list *list, dm_list_entry *entry);
+void dm_list_prepend(dm_list *list, void *data);
+void dm_list_push_back(dm_list *list, void *data);
+dm_list_entry *dm_list_last(dm_list *list);
+void *dm_list_steal_first(dm_list *list);
+ssize_t dm_list_size(dm_list *list);
+void *dm_list_first_data(dm_list *list, void **state);
+void *dm_list_next_data(dm_list *list, void **state);
+/* For example
+ * dm_list *list;
+ * void *state;
+ * my_data *data;
+ * DM_LIST_FOREACH_DATA(data, list, state) {
+ * do_something_with_my(data);
+ * }
+ */
+#define DM_LIST_FOREACH_DATA(i, list, state) \
+ for (i = dm_list_first_data(list, &(state)); state; i = dm_list_next_data(list, &(state)))
+/* Access i->data */
+#define DM_LIST_FOREACH(i, list) \
+ for (i = list->head; i; i = i->next)
+
#endif
|
[-]
[+]
|
Added |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/common/include/droid/utils.h
^
|
@@ -0,0 +1,32 @@
+#ifndef foodroidcommonutilsfoo
+#define foodroidcommonutilsfoo
+
+/*
+ * Copyright (C) 2022 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+void dm_replace_in_place(char **string, const char *a, const char *b);
+bool dm_strcasestr(const char *haystack, const char *needle);
+
+#endif
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/common/include/droid/version.h
^
|
@@ -2,7 +2,7 @@
#define foodroidversionfoo
/*
- * Copyright (C) 2018 Jolla Ltd.
+ * Copyright (C) 2018-2022 Jolla Ltd.
*
* Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
*
@@ -24,7 +24,7 @@
#include <android-config.h>
-#if defined(QCOM_BSP) || defined(DROID_DEVICE_SBJ)
+#if defined(QCOM_BSP)
#define QCOM_HARDWARE
#endif
@@ -34,8 +34,8 @@
#error "ANDROID_VERSION_* not defined. Did you get your headers via extract-headers.sh?"
#endif
-/* We currently support API version up-to 3.0 */
-#define DROID_API_VERSION_SUPPORT HARDWARE_DEVICE_API_VERSION(3, 0)
+/* We currently support API version up to 3.1 */
+#define DROID_API_VERSION_SUPPORT HARDWARE_DEVICE_API_VERSION(3, 1)
#if AUDIO_DEVICE_API_VERSION_CURRENT > DROID_API_VERSION_SUPPORT
#warning Compiling against higher audio device API version than currently supported!
@@ -48,4 +48,8 @@
#define AUDIO_API_VERSION_GET_MAJ(x) ((x >> 8) & 0xff)
#define AUDIO_API_VERSION_GET_MIN(x) (x & 0xff)
+#if AUDIO_API_VERSION_MAJ < 3
+#error This module only supports audio API version 3 and upwards.
+#endif
+
#endif
|
[-]
[+]
|
Added |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/common/meson.build
^
|
@@ -0,0 +1,64 @@
+libdroid_util_sources = [
+ 'config-parser-xml.c',
+ 'config-parser-xml.h',
+ 'conversion.c',
+ 'droid-util.c',
+ 'droid-util-audio.h',
+ 'droid-config.c',
+ 'sllist.c',
+ 'utils.c',
+]
+
+libdroid_util_headers = [
+ 'include/droid/conversion.h',
+ 'include/droid/droid-config.h',
+ 'include/droid/droid-util.h',
+ 'include/droid/sllist.h',
+ 'include/droid/utils.h',
+ 'include/droid/version.h',
+]
+
+libdroid_util_deps = [
+ droid_headers_dep,
+ expat_dep,
+ hybris_dep,
+ hybris_common_dep,
+ ltdl_dep,
+ pulsecore_dep,
+]
+
+install_headers(libdroid_util_headers, subdir : 'pulsecore/modules/droid')
+
+libdroid_util = library('droid-util',
+ libdroid_util_sources,
+ c_args : [pa_c_args, '-DPULSEAUDIO_VERSION=@0@'.format(pa_version_major)],
+ dependencies : libdroid_util_deps,
+ pic : true,
+ include_directories : [configinc, include_directories('include')],
+ install : true,
+ install_dir : modlibexecdir,
+ install_rpath : rpath_dirs,
+)
+
+libdroid_util_dep = declare_dependency(
+ link_with : libdroid_util,
+ compile_args : pa_c_args + ['-DPULSEAUDIO_VERSION=@0@'.format(pa_version_major)],
+ dependencies : libdroid_util_deps,
+ include_directories : [configinc, include_directories('include')],
+)
+
+# pkgconfig
+pc_cdata = configuration_data()
+
+pc_cdata.set('prefix', get_option('prefix'))
+pc_cdata.set('libdir', libdir)
+pc_cdata.set('libexecdir', get_option('libexecdir'))
+pc_cdata.set('PA_MAJORMINOR', pa_version_major_minor)
+pc_cdata.set('PA_MODULE_VERSION', pa_version_module)
+
+configure_file(
+ input : 'libdroid-util.pc.in',
+ output : 'libdroid-util.pc',
+ configuration : pc_cdata,
+ install_dir : join_paths(libdir, 'pkgconfig')
+)
|
[-]
[+]
|
Added |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/common/sllist.c
^
|
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2022 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <pulse/xmalloc.h>
+#include <pulsecore/macro.h>
+
+#include "droid/sllist.h"
+
+dm_list *dm_list_new(void) {
+ return pa_xnew0(dm_list, 1);
+}
+
+void dm_list_free(dm_list *list, pa_free_cb_t free_cb) {
+ pa_assert(list);
+
+ while (list->head) {
+ void *data = dm_list_steal_first(list);
+
+ if (free_cb)
+ free_cb(data);
+ }
+
+ pa_xfree(list);
+}
+
+bool dm_list_remove(dm_list *list, dm_list_entry *entry) {
+ dm_list_entry *i;
+ bool removed = false;
+
+ for (i = list->head; i; i = i->next) {
+ if (i == entry) {
+ removed = true;
+ if (list->head == entry)
+ list->head = entry->next;
+ if (list->tail == entry)
+ list->tail = entry->prev;
+ if (entry->next)
+ entry->next->prev = entry->prev;
+ if (entry->prev)
+ entry->prev->next = entry->next;
+ pa_xfree(entry);
+ break;
+ }
+ }
+
+ return removed;
+}
+
+void dm_list_prepend(dm_list *list, void *data) {
+ dm_list_entry *entry;
+
+ pa_assert(list);
+
+ entry = pa_xnew0(dm_list_entry, 1);
+ entry->data = data;
+
+ if (!list->tail)
+ list->tail = entry;
+
+ if (list->head) {
+ entry->next = list->head;
+ list->head->prev = entry;
+ }
+
+ list->head = entry;
+ list->size++;
+}
+
+void dm_list_push_back(dm_list *list, void *data) {
+ dm_list_entry *entry;
+
+ pa_assert(list);
+
+ entry = pa_xnew0(dm_list_entry, 1);
+ entry->data = data;
+
+ if (!list->head)
+ list->head = entry;
+
+ if (list->tail) {
+ list->tail->next = entry;
+ entry->prev = list->tail;
+ }
+
+ list->tail = entry;
+ list->size++;
+}
+
+dm_list_entry *dm_list_last(dm_list *list) {
+ pa_assert(list);
+
+ return list->tail;
+}
+
+void *dm_list_steal_first(dm_list *list) {
+ dm_list_entry *entry;
+ void *data = NULL;
+
+ pa_assert(list);
+
+ if (list->head) {
+ data = list->head->data;
+ entry = list->head;
+ if (list->head == list->tail) {
+ list->head = NULL;
+ list->tail = NULL;
+ } else {
+ list->head->next->prev = NULL;
+ list->head = list->head->next;
+ }
+ pa_xfree(entry);
+ list->size--;
+ }
+
+ return data;
+}
+
+ssize_t dm_list_size(dm_list *list) {
+ pa_assert(list);
+
+ return list->size;
+}
+
+/* For iteration */
+
+void *dm_list_first_data(dm_list *list, void **state) {
+ pa_assert(list);
+ pa_assert(state);
+
+ *state = list->head;
+
+ if (list->head)
+ return list->head->data;
+ else
+ return NULL;
+}
+
+void *dm_list_next_data(dm_list *list, void **state) {
+ dm_list_entry *entry;
+
+ pa_assert(list);
+ pa_assert(state);
+
+ entry = *state;
+ *state = entry->next;
+
+ if (entry->next)
+ return entry->next->data;
+ else
+ return NULL;
+}
|
[-]
[+]
|
Added |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/common/utils.c
^
|
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2022 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <strings.h>
+
+#include <pulsecore/core-util.h>
+#include <pulse/xmalloc.h>
+#include "droid/utils.h"
+
+void dm_replace_in_place(char **string, const char *a, const char *b) {
+ char *tmp;
+
+ pa_assert(*string);
+ pa_assert(a);
+ pa_assert(b);
+
+ tmp = pa_replace(*string, a, b);
+ pa_xfree(*string);
+ *string = tmp;
+}
+
+/* Simple strcasestr replacement. */
+bool dm_strcasestr(const char *haystack, const char *needle) {
+ size_t len_haystack, len_needle;
+
+ len_haystack = strlen(haystack);
+ len_needle = strlen(needle);
+
+ if (len_needle > len_haystack)
+ return false;
+
+ for (size_t i = 0; i < len_haystack; i++) {
+ if (len_needle > len_haystack - i)
+ return false;
+
+ if (strncasecmp(haystack + i, needle, len_needle) == 0)
+ return true;
+ }
+
+ return false;
+}
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/droid/droid-sink.c
^
|
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2018 Jolla Ltd.
+ * Copyright (C) 2013-2022 Jolla Ltd.
*
* Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
*
@@ -60,6 +60,7 @@
#include "droid-sink.h"
#include <droid/droid-util.h>
#include <droid/conversion.h>
+#include <droid/sllist.h>
struct userdata {
pa_core *core;
@@ -79,18 +80,10 @@
pa_usec_t buffer_time;
pa_usec_t write_time;
pa_usec_t write_threshold;
- audio_devices_t prewrite_devices;
- bool prewrite_always;
- uint32_t prewrite_silence;
- pa_hook_slot *sink_put_hook_slot;
- pa_hook_slot *sink_unlink_hook_slot;
- pa_hook_slot *sink_port_changed_hook_slot;
- pa_sink *primary_stream_sink;
-
- audio_devices_t primary_devices;
- audio_devices_t extra_devices;
- pa_hashmap *extra_devices_map;
- bool mix_route;
+
+ dm_config_port *active_device_port;
+ dm_config_port *override_device_port;
+ dm_list *extra_devices_stack;
bool use_hw_volume;
bool use_voice_volume;
@@ -133,87 +126,84 @@
static void apply_volume(pa_sink *s);
static pa_sink_input *find_volume_control_sink_input(struct userdata *u);
-static void set_primary_devices(struct userdata *u, audio_devices_t devices) {
- pa_assert(u);
- pa_assert(devices);
+static bool add_extra_devices(struct userdata *u, audio_devices_t device) {
+ dm_list_entry *prev;
+ dm_config_port *device_port;
- u->primary_devices = devices;
-}
+ pa_assert(u);
+ pa_assert(u->extra_devices_stack);
-static bool add_extra_devices(struct userdata *u, audio_devices_t devices) {
- void *value;
- uint32_t count;
- bool need_update = false;
+ if (!(device_port = dm_config_find_device_port(u->active_device_port, device))) {
+ pa_log("Unknown device port %u", device);
+ return false;
+ }
- pa_assert(u);
- pa_assert(u->extra_devices_map);
- pa_assert(devices);
+ prev = dm_list_last(u->extra_devices_stack);
- if ((value = pa_hashmap_get(u->extra_devices_map, PA_UINT_TO_PTR(devices)))) {
- count = PA_PTR_TO_UINT(value);
- count++;
- pa_hashmap_remove(u->extra_devices_map, PA_UINT_TO_PTR(devices));
- pa_hashmap_put(u->extra_devices_map, PA_UINT_TO_PTR(devices), PA_UINT_TO_PTR(count));
+ dm_list_push_back(u->extra_devices_stack, device_port);
- /* added extra device already exists in hashmap, so no need to update route. */
- need_update = false;
- } else {
- pa_hashmap_put(u->extra_devices_map, PA_UINT_TO_PTR(devices), PA_UINT_TO_PTR(1));
- u->extra_devices |= devices;
- need_update = true;
+ if (prev) {
+ dm_config_port *last_port = prev->data;
+ if (dm_config_port_equal(last_port, device_port))
+ return false;
}
- return need_update;
+ u->override_device_port = device_port;
+
+ return true;
}
-static bool remove_extra_devices(struct userdata *u, audio_devices_t devices) {
- void *value;
- uint32_t count;
+static bool remove_extra_devices(struct userdata *u, audio_devices_t device) {
+ dm_config_port *device_port;
+ dm_list_entry *remove = NULL, *i = NULL;
bool need_update = false;
pa_assert(u);
- pa_assert(u->extra_devices_map);
- pa_assert(devices);
+ pa_assert(u->extra_devices_stack);
- if ((value = pa_hashmap_get(u->extra_devices_map, PA_UINT_TO_PTR(devices)))) {
- pa_hashmap_remove(u->extra_devices_map, PA_UINT_TO_PTR(devices));
- count = PA_PTR_TO_UINT(value);
- count--;
- if (count == 0) {
- u->extra_devices &= ~devices;
- need_update = true;
- } else {
- /* added extra devices still exists in hashmap, so no need to update route. */
- pa_hashmap_put(u->extra_devices_map, PA_UINT_TO_PTR(devices), PA_UINT_TO_PTR(count));
- need_update = false;
+ if (!(device_port = dm_config_find_device_port(u->active_device_port, device))) {
+ pa_log("Unknown device port %u", device);
+ return false;
+ }
+
+ DM_LIST_FOREACH(i, u->extra_devices_stack) {
+ if (dm_config_port_equal(i->data, device_port)) {
+ remove = i;
+ break;
}
}
+ if (remove && dm_list_last(u->extra_devices_stack) == remove)
+ need_update = true;
+
+ if (remove)
+ dm_list_remove(u->extra_devices_stack, remove);
+
return need_update;
}
static void clear_extra_devices(struct userdata *u) {
pa_assert(u);
- pa_assert(u->extra_devices_map);
+ pa_assert(u->extra_devices_stack);
- pa_hashmap_remove_all(u->extra_devices_map);
- u->extra_devices = 0;
+ while (dm_list_steal_first(u->extra_devices_stack));
+ u->override_device_port = NULL;
}
/* Called from main context during voice calls, and from IO context during media operation. */
static void do_routing(struct userdata *u) {
- audio_devices_t routing;
+ dm_config_port *routing = NULL;
pa_assert(u);
pa_assert(u->stream);
- if (u->use_voice_volume && u->extra_devices)
+ if (u->use_voice_volume && u->override_device_port)
clear_extra_devices(u);
- if (!u->mix_route && u->extra_devices)
- routing = u->extra_devices;
+ if (u->override_device_port)
+ routing = u->override_device_port;
else
- routing = u->primary_devices | u->extra_devices;
+ routing = u->active_device_port;
pa_droid_stream_set_route(u->stream, routing);
}
@@ -244,30 +234,6 @@
return true;
}
-static int thread_write_silence(struct userdata *u) {
- const void *p;
- ssize_t wrote;
-
- /* Drop our rendered audio and write silence to HAL. */
- pa_memblockq_drop(u->memblockq, u->buffer_size);
- u->write_time = pa_rtclock_now();
-
- /* We should be able to write everything in one go as long as memblock size
- * is multiples of buffer_size. Even if we don't write whole buffer size
- * here it's okay, as long as mute time isn't configured too strictly. */
-
- p = pa_memblock_acquire_chunk(&u->silence);
- wrote = pa_droid_stream_write(u->stream, p, u->silence.length);
- pa_memblock_release(u->silence.memblock);
-
- u->write_time = pa_rtclock_now() - u->write_time;
-
- if (wrote < 0)
- return -1;
-
- return 0;
-}
-
static int thread_write(struct userdata *u) {
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/droid/droid-source.c
^
|
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2018 Jolla Ltd.
+ * Copyright (C) 2013-2022 Jolla Ltd.
*
* Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
*
@@ -69,7 +69,6 @@
pa_rtpoll *rtpoll;
pa_memchunk memchunk;
- audio_devices_t primary_devices;
size_t source_buffer_size;
size_t buffer_size;
@@ -95,60 +94,13 @@
const pa_sample_spec *reconfigure_sample_spec,
const pa_channel_map *reconfigure_channel_map,
const pa_proplist *proplist,
- audio_devices_t update_device);
+ dm_config_port *update_device_port);
/* Our droid source may be left in a state of not having an input stream
* if reconfiguration fails and fallback to previously active values fails
* as well. In this case just avoid using the stream but don't die. */
#define assert_stream(x, action) if (!x) do { pa_log_warn("Assert " #x " failed."); action; } while(0)
-static int do_routing(struct userdata *u, audio_devices_t devices) {
- int ret;
- audio_devices_t old_device;
-
- pa_assert(u);
- assert_stream(u->stream, 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_route(u->stream, devices);
-
- if (ret < 0)
- u->primary_devices = old_device;
-
- return ret;
-}
-
-static bool parse_device_list(const char *str, audio_devices_t *dst) {
- pa_assert(str);
- pa_assert(dst);
-
- char *dev;
- const char *state = NULL;
-
- *dst = 0;
-
- while ((dev = pa_split(str, "|", &state))) {
- audio_devices_t d;
-
- if (!pa_string_convert_input_device_str_to_num(dev, &d)) {
- pa_log_warn("Unknown device %s", dev);
- pa_xfree(dev);
- return false;
- }
-
- *dst |= d;
-
- pa_xfree(dev);
- }
-
- return true;
-}
-
static int thread_read(struct userdata *u) {
void *p;
ssize_t readd;
@@ -335,7 +287,7 @@
data = PA_DEVICE_PORT_DATA(p);
- if (!data->device) {
+ if (!data->device_port) {
/* If there is no device defined, just return 0 to say everything is ok.
* Then next port change can be whatever source port, even the one enabled
* before parking. */
@@ -343,12 +295,12 @@
return 0;
}
- pa_log_debug("Source set port %#010x", data->device);
+ pa_log_debug("Source set port %#010x (%s)", data->device_port->type, data->device_port->name);
if (!PA_SOURCE_IS_OPENED(u->source->state))
- do_routing(u, data->device);
+ pa_droid_stream_set_route(u->stream, data->device_port);
else
- source_reconfigure(u, NULL, NULL, NULL, data->device);
+ source_reconfigure(u, NULL, NULL, NULL, data->device_port);
return 0;
}
@@ -431,7 +383,7 @@
const pa_sample_spec *reconfigure_sample_spec,
const pa_channel_map *reconfigure_channel_map,
const pa_proplist *proplist,
- audio_devices_t update_device) {
+ dm_config_port *update_device_port) {
pa_channel_map old_channel_map;
pa_sample_spec old_sample_spec;
pa_channel_map new_channel_map;
@@ -452,8 +404,8 @@
new_channel_map = reconfigure_channel_map ? *reconfigure_channel_map : old_channel_map;
new_sample_spec = reconfigure_sample_spec ? *reconfigure_sample_spec : old_sample_spec;
- if (update_device)
- do_routing(u, update_device);
+ if (update_device_port)
+ pa_droid_stream_set_route(u->stream, update_device_port);
if (pa_droid_stream_reconfigure_input(u->stream, &new_sample_spec, &new_channel_map, proplist))
pa_log_info("Source reconfigured.");
@@ -505,10 +457,10 @@
pa_droid_stream_sample_spec(primary_output),
pa_droid_stream_channel_map(primary_output),
new_data->proplist,
- 0);
+ NULL);
} else
- source_reconfigure(u, &new_data->sample_spec, &new_data->channel_map, new_data->proplist, 0);
+ source_reconfigure(u, &new_data->sample_spec, &new_data->channel_map, new_data->proplist, NULL);
return PA_HOOK_OK;
}
@@ -533,7 +485,7 @@
&so->channel_map,
so->proplist)) {
pa_log_info("Source-output disconnected and our source needs to be reconfigured.");
- source_reconfigure(u, &so->sample_spec, &so->channel_map, so->proplist, 0);
+ source_reconfigure(u, &so->sample_spec, &so->channel_map, so->proplist, NULL);
}
}
@@ -547,7 +499,6 @@
pa_source *pa_droid_source_new(pa_module *m,
pa_modargs *ma,
const char *driver,
- audio_devices_t device,
pa_droid_card_data *card_data,
pa_droid_mapping *am,
pa_card *card) {
@@ -556,9 +507,7 @@
char *thread_name = NULL;
pa_source_new_data data;
const char *module_id = NULL;
- const char *tmp;
uint32_t alternate_sample_rate;
- audio_devices_t dev_in;
pa_sample_spec sample_spec;
pa_channel_map channel_map;
const char *format;
@@ -573,7 +522,7 @@
/* When running under card use hw module name for source by default. */
if (am)
- module_id = am->inputs->module->name;
+ module_id = am->mix_port->name;
else
module_id = pa_modargs_get_value(ma, "module_id", DEFAULT_MODULE_ID);
@@ -644,28 +593,7 @@
goto fail;
}
- /* Default routing */
- if (device)
- dev_in = device;
- else {
- /* FIXME So while setting routing through stream with HALv2 API fails, creation of stream
- * requires HALv2 style device to work properly. So until that oddity is resolved we always
- * set AUDIO_DEVICE_IN_BUILTIN_MIC as initial device here. */
- pa_log_info("FIXME: Setting AUDIO_DEVICE_IN_BUILTIN_MIC as initial device.");
- pa_assert_se(pa_string_convert_input_device_str_to_num("AUDIO_DEVICE_IN_BUILTIN_MIC", &dev_in));
-
- if ((tmp = pa_modargs_get_value(ma, "input_devices", NULL))) {
- audio_devices_t tmp_dev;
-
- if (parse_device_list(tmp, &tmp_dev) && tmp_dev)
- dev_in = tmp_dev;
-
- pa_log_debug("Set initial devices %s", tmp);
- }
- }
-
- pa_droid_hw_set_input_device(u->hw_module, dev_in);
- u->stream = pa_droid_open_input_stream(u->hw_module, &sample_spec, &channel_map);
+ u->stream = pa_droid_open_input_stream(u->hw_module, &sample_spec, &channel_map, am->mix_port->name);
if (!u->stream) {
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/droid/droid-source.h
^
|
@@ -2,7 +2,7 @@
#define foodroidsourcefoo
/*
- * Copyright (C) 2013-2018 Jolla Ltd.
+ * Copyright (C) 2013-2022 Jolla Ltd.
*
* Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
*
@@ -43,11 +43,9 @@
#include <droid/droid-util.h>
-/* If device is non-zero, it will override whatever is set in modargs for input device. */
pa_source *pa_droid_source_new(pa_module *m,
pa_modargs *ma,
const char *driver,
- audio_devices_t device,
pa_droid_card_data *card_data,
pa_droid_mapping *am,
pa_card *card);
|
[-]
[+]
|
Added |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/droid/meson.build
^
|
@@ -0,0 +1,62 @@
+droid_sink = library('droid-sink',
+ ['droid-sink.c', 'droid-sink.h'],
+ dependencies : libdroid_util_dep,
+ pic : true,
+ include_directories : configinc,
+ install : true,
+ install_dir : modlibexecdir,
+ install_rpath : rpath_dirs,
+)
+
+droid_sink_dep = declare_dependency(
+ link_with : droid_sink,
+ compile_args : pa_c_args + ['-DPULSEAUDIO_VERSION=@0@'.format(pa_version_major)],
+ dependencies : libdroid_util_dep,
+ include_directories : [configinc],
+)
+
+droid_source = library('droid-source',
+ ['droid-source.c', 'droid-source.h'],
+ dependencies : libdroid_util_dep,
+ pic : true,
+ install : true,
+ install_dir : modlibexecdir,
+ install_rpath : rpath_dirs,
+)
+
+droid_source_dep = declare_dependency(
+ link_with : droid_source,
+ compile_args : pa_c_args + ['-DPULSEAUDIO_VERSION=@0@'.format(pa_version_major)],
+ dependencies : libdroid_util_dep,
+ include_directories : [configinc],
+)
+
+module_sink = shared_module('module-droid-sink',
+ 'module-droid-sink.c',
+ name_prefix : '',
+ c_args : '-DPA_MODULE_NAME=module_droid_sink',
+ dependencies : [droid_sink_dep, libdroid_util_dep],
+ install : true,
+ install_dir : modlibexecdir,
+ install_rpath : rpath_dirs,
+)
+
+module_sink = shared_module('module-droid-source',
+ 'module-droid-source.c',
+ name_prefix : '',
+ c_args : '-DPA_MODULE_NAME=module_droid_source',
+ dependencies : [droid_source_dep, libdroid_util_dep],
+ install : true,
+ install_dir : modlibexecdir,
+ install_rpath : rpath_dirs,
+)
+
+module_sink = shared_module('module-droid-card',
+ 'module-droid-card.c',
+ name_prefix : '',
+ c_args : '-DPA_MODULE_NAME=module_droid_card',
+ dependencies : [droid_sink_dep, droid_source_dep, libdroid_util_dep],
+ install : true,
+ install_dir : modlibexecdir,
+ install_rpath : rpath_dirs,
+)
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/droid/module-droid-card.c
^
|
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2018 Jolla Ltd.
+ * Copyright (C) 2013-2022 Jolla Ltd.
*
* Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
*
@@ -61,6 +61,7 @@
#include <droid/droid-util.h>
#include <droid/sllist.h>
+#include <droid/utils.h>
#include "droid-sink.h"
#include "droid-source.h"
@@ -73,16 +74,13 @@
"source_name=<name for the source> "
"namereg_fail=<when false attempt to synthesise new names if they are already taken> "
"rate=<sample rate> "
- "output_flags=<flags for sink> "
"module_id=<which droid hw module to load, default primary> "
"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> "
- "default_profile=<boolean. create default profile for primary module or not. defaults to true> "
- "merge_inputs=<unused, always true> "
- "quirks=<comma separated list of quirks to enable/disable>"
+ "options=<comma separated list of options to enable/disable>"
);
static const char* const valid_modargs[] = {
@@ -97,26 +95,18 @@
"sink_rate",
"sink_format",
"sink_channel_map",
- "sink_mix_route",
"source_rate",
"source_format",
"source_channel_map",
- "output_flags",
"module_id",
"voice_source_routing",
"sink_buffer",
"source_buffer",
"deferred_volume",
- "mute_routing_before",
- "mute_routing_after",
- "prewrite_on_resume",
"config",
"voice_property_key",
"voice_property_value",
- "default_profile",
- "combine",
- "merge_inputs",
- "quirks",
+ /* DM_OPTIONS */
NULL,
};
@@ -171,7 +161,7 @@
struct virtual_profile virtual;
};
-#ifdef DROID_AUDIO_HAL_USE_VSID
+#ifdef DROID_AUDIO_HAL_DEBUG_VSID
/* From hal/voice_extn/voice_extn.c */
#define AUDIO_PARAMETER_KEY_VSID "vsid"
@@ -215,7 +205,7 @@
static bool voicecall_voicemmode1_vsid_profile_event_cb(struct userdata *u, pa_droid_profile *p, bool enabling);
static bool voicecall_voicemmode2_vsid_profile_event_cb(struct userdata *u, pa_droid_profile *p, bool enabling);
-#endif /* DROID_AUDIO_HAL_USE_VSID */
+#endif /* DROID_AUDIO_HAL_DEBUG_VSID */
static void add_disabled_profile(pa_hashmap *profiles) {
pa_card_profile *cp;
@@ -268,16 +258,6 @@
return cp;
}
-static int set_parameters_cb(pa_droid_card_data *card_data, const char *str) {
- struct userdata *u;
-
- pa_assert(card_data);
- pa_assert_se((u = card_data->userdata));
- pa_assert(str);
-
- return pa_droid_set_parameters(u->hw_module, str);
-}
-
static void set_card_name(pa_modargs *ma, pa_card_new_data *data, const char *module_id) {
const char *tmp;
char *name;
@@ -299,16 +279,57 @@
}
static bool output_enabled(struct userdata *u, pa_droid_mapping *am) {
+ bool enabled = false;
+
pa_assert(u);
pa_assert(am);
- if (!pa_droid_quirk(u->hw_module, QUIRK_OUTPUT_FAST) && am->output->flags & AUDIO_OUTPUT_FLAG_FAST)
- return false;
- if (!pa_droid_quirk(u->hw_module, QUIRK_OUTPUT_DEEP_BUFFER) && am->output->flags & AUDIO_OUTPUT_FLAG_DEEP_BUFFER)
- return false;
+ if (am->mix_port->flags & AUDIO_OUTPUT_FLAG_PRIMARY)
+ enabled = true;
- return true;
+ else if (am->mix_port->flags & AUDIO_OUTPUT_FLAG_RAW)
+ enabled = false;
+
+ else if (pa_droid_option(u->hw_module, DM_OPTION_OUTPUT_FAST) && am->mix_port->flags & AUDIO_OUTPUT_FLAG_FAST)
+ enabled = true;
+
+ else if (pa_droid_option(u->hw_module, DM_OPTION_OUTPUT_DEEP_BUFFER) && am->mix_port->flags & AUDIO_OUTPUT_FLAG_DEEP_BUFFER)
+ enabled = true;
+
+ pa_log_debug("Output mix port \"%s\" %s", am->name, enabled ? "enabled" : "disabled");
+
+ return enabled;
+}
+
+static bool input_enabled(struct userdata *u, pa_droid_mapping *am) {
+ bool enabled = false;
+
+ pa_assert(u);
+ pa_assert(am);
+
+ /* Look for primary mix port as the one used for creating droid-source. */
+ if (dm_strcasestr(am->name, "primary"))
+ enabled = true;
+
+ pa_log_debug("Input mix port \"%s\" %s", am->name, enabled ? "enabled" : "disabled");
+
+ return enabled;
+}
+
+static uint32_t max_channels_for_mix_port(dm_config_port *mix_port, uint32_t previous_max_channels) {
+ uint32_t max_channels = 0;
+ dm_config_profile *profile;
+ void *state;
+
+ DM_LIST_FOREACH_DATA(profile, mix_port->profiles, state) {
+ for (int i = 0; profile->channel_masks[i]; i++) {
+ max_channels = audio_channel_count_from_out_mask(profile->channel_masks[i]) > max_channels
+ ? audio_channel_count_from_out_mask(profile->channel_masks[i]) : max_channels;
+ }
+ }
+
+ return max_channels > previous_max_channels ? max_channels : previous_max_channels;
}
static void add_profile(struct userdata *u, pa_hashmap *h, pa_hashmap *ports, pa_droid_profile *ap) {
@@ -329,26 +350,23 @@
cp->available = PA_AVAILABLE_YES;
cp->priority = ap->priority;
+ /* Output mappings */
+
max_channels = 0;
PA_IDXSET_FOREACH(am, ap->output_mappings, idx) {
- if (!output_enabled(u, am))
- continue;
-
cp->n_sinks++;
pa_droid_add_card_ports(cp, ports, am, u->core);
- max_channels = popcount(am->output->channel_masks) > max_channels
- ? popcount(am->output->channel_masks) : max_channels;
+ max_channels = max_channels_for_mix_port(am->mix_port, max_channels);
}
cp->max_sink_channels = max_channels;
+ /* Input mappings */
+
max_channels = 0;
- if ((am = ap->input_mapping)) {
- const pa_droid_config_device *input;
+ PA_IDXSET_FOREACH(am, ap->input_mappings, idx) {
cp->n_sources++;
pa_droid_add_card_ports(cp, ports, am, u->core);
- SLLIST_FOREACH(input, am->inputs)
- max_channels = popcount(input->channel_masks) > max_channels
- ? popcount(input->channel_masks) : max_channels;
+ max_channels = max_channels_for_mix_port(am->mix_port, max_channels);
}
cp->max_source_channels = max_channels;
@@ -394,8 +412,13 @@
}
}
- if (d->droid_profile && (am = d->droid_profile->input_mapping)) {
- am->source = pa_droid_source_new(u->module, u->modargs, __FILE__, (audio_devices_t) 0, &u->card_data, am, u->card);
+ if (d->droid_profile && pa_idxset_size(d->droid_profile->input_mappings) > 0) {
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/droid/module-droid-source.c
^
|
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2018 Jolla Ltd.
+ * Copyright (C) 2013-2022 Jolla Ltd.
*
* Contact: Juho Hämäläinen <juho.hamalainen@jolla.com>
*
@@ -83,7 +83,7 @@
goto fail;
}
- if (!(m->userdata = pa_droid_source_new(m, ma, __FILE__, (audio_devices_t) 0, NULL, NULL, NULL)))
+ if (!(m->userdata = pa_droid_source_new(m, ma, __FILE__, NULL, NULL, NULL)))
goto fail;
pa_modargs_free(ma);
|
[-]
[+]
|
Added |
_service:tar_git:pulseaudio-modules-droid-14.2.98.tar.bz2/src/meson.build
^
|
@@ -0,0 +1,2 @@
+subdir('common')
+subdir('droid')
|