libraries/bluez-alsa: Added (Bluetooth Audio ALSA Backend).

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
khronosschoty 2018-04-27 20:47:27 +07:00 committed by Willy Sudiarto Raharjo
parent f85962deae
commit cead7b7f71
5 changed files with 345 additions and 0 deletions

View File

@ -0,0 +1,11 @@
bluez-alsa (Bluetooth Audio ALSA Backend)
This project is a rebirth of a direct integration between Bluez and ALSA.
Since Bluez >= 5, the build-in integration has been removed in favor of 3rd
party audio applications. From now on, Bluez acts as a middleware between an
audio application, which implements Bluetooth audio profile, and a Bluetooth
audio device.
Note: you might want to "start" "/usr/bin/bluealsa" via rc.local -- in example
add the following line to rc.local:
/usr/bin/bluealsa &

View File

@ -0,0 +1,106 @@
#!/bin/sh
# Slackware build script for bluez-alsa
# Copyright 2018 Vasily Sora USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=bluez-alsa
VERSION=${VERSION:-1.2.0}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
chown -R root:root .
find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
-o -perm 511 \) -exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
patch -p2 < $CWD/ortp.patch
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
autoreconf --install
mkdir build && cd build
../configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
--localstatedir=/var \
--mandir=/usr/man \
--docdir=/usr/doc/$PRGNAM-$VERSION \
--disable-payloadcheck \
--build=$ARCH-slackware-linux
make
make install DESTDIR=$PKG
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
cd ..
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a \
README.md \
$PKG/usr/share/alsa/alsa.conf.d/20-bluealsa.conf \
$PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

View File

@ -0,0 +1,10 @@
PRGNAM="bluez-alsa"
VERSION="1.2.0"
HOMEPAGE="https://github.com/Arkq/bluez-alsa"
DOWNLOAD="https://github.com/Arkq/bluez-alsa/archive/v1.2.0/bluez-alsa-1.2.0.tar.gz"
MD5SUM="7a6710f4c6d693417fc09db61b1b2cdb"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
MAINTAINER="khronosschoty"
EMAIL="khronosschoty@posteo.org"

View File

@ -0,0 +1,199 @@
*** a/bluez-alsa-1.2.0/README.md 2017-04-13 13:50:39.000000000 -0700
--- b/bluez-alsa-1.2.0/README.md 2018-04-26 13:33:35.943544513 -0700
***************
*** 23,28 ****
--- 23,36 ----
$ autoreconf --install
$ mkdir build && cd build
$ ../configure --enable-aac --enable-debug
+
+ or if you intend to stream audio from a Linux distribution using PulseAudio (see [this
+ issue](https://github.com/Arkq/bluez-alsa/issues/13))
+
+ $ ../configure --enable-aac --enable-debug --disable-payloadcheck
+
+ then
+
$ make && make install
Dependencies:
***************
*** 31,44 ****
- [bluez](http://www.bluez.org/) >= 5.0
- [glib](https://wiki.gnome.org/Projects/GLib) with GIO support
- [sbc](https://git.kernel.org/cgit/bluetooth/sbc.git)
- - [ortp](http://www.linphone.org/technical-corner/ortp.html) (required for compilation only)
- [fdk-aac](https://github.com/mstorsjo/fdk-aac) (when AAC support is enabled with `--enable-aac`)
! Dependencies for `hcitop` (unless `--disable-hcitop` is specified during configuration):
- [libbsd](https://libbsd.freedesktop.org/)
- [ncurses](https://www.gnu.org/software/ncurses/)
Configuration & Usage
---------------------
--- 39,54 ----
- [bluez](http://www.bluez.org/) >= 5.0
- [glib](https://wiki.gnome.org/Projects/GLib) with GIO support
- [sbc](https://git.kernel.org/cgit/bluetooth/sbc.git)
- [fdk-aac](https://github.com/mstorsjo/fdk-aac) (when AAC support is enabled with `--enable-aac`)
! Dependencies for `hcitop` (when `--enable-hcitop` is specified during configuration):
- [libbsd](https://libbsd.freedesktop.org/)
- [ncurses](https://www.gnu.org/software/ncurses/)
+ If you are using Debian-based distribution, take a look at the [.travis.yml](.travis.yml) file,
+ it might give you a hint about required packages.
+
Configuration & Usage
---------------------
***************
*** 100,107 ****
alongside, but Bluetooth support has to be disabled in the PulseAudio. Any Bluetooth related
module has to be unloaded - e.g. `bluetooth-discover`, `bluez5-discover`.
- See also [this](https://github.com/Arkq/bluez-alsa/issues/13) PulseAudio related issue.
-
2. ALSA thread-safe API (alsa-lib >= 1.1.2).
Starting from ALSA library 1.1.2, it is possible to enable thread-safe API functions. It is a
--- 110,115 ----
*** a/bluez-alsa-1.2.0/configure.ac 2017-04-13 13:50:39.000000000 -0700
--- b/bluez-alsa-1.2.0/configure.ac 2018-04-26 13:30:55.692862106 -0700
***************
*** 34,41 ****
AC_CHECK_LIB([pthread], [pthread_create],
[], [AC_MSG_ERROR([pthread library not found])])
- AC_CHECK_HEADERS([ortp/rtp.h],
- [], [AC_MSG_ERROR([ortp/rtp.h header not found])])
AC_SEARCH_LIBS([clock_gettime], [rt],
[], [AC_MSG_ERROR([unable to find clock_gettime() function])])
AC_SEARCH_LIBS([pow], [m],
--- 34,39 ----
***************
*** 57,74 ****
AC_DEFINE([ENABLE_AAC], [1], [Define to 1 if AAC is enabled.])
])
AC_ARG_ENABLE([aplay],
! [AS_HELP_STRING([--disable-aplay], [disable building of aplay tool])])
AM_CONDITIONAL([ENABLE_APLAY], [test "x$enable_aplay" != "xno"])
AC_ARG_ENABLE([hcitop],
! [AS_HELP_STRING([--disable-hcitop], [disable building of hcitop tool])])
! AM_CONDITIONAL([ENABLE_HCITOP], [test "x$enable_hcitop" != "xno"])
AM_COND_IF([ENABLE_HCITOP], [
PKG_CHECK_MODULES([LIBBSD], [libbsd])
PKG_CHECK_MODULES([NCURSES], [ncurses])
])
AC_ARG_WITH([alsaplugindir],
AS_HELP_STRING([--with-alsaplugindir=dir], [path where ALSA plugin files are stored]),
[alsaplugindir="$withval"], [alsaplugindir="$libdir/alsa-lib"])
--- 55,85 ----
AC_DEFINE([ENABLE_AAC], [1], [Define to 1 if AAC is enabled.])
])
+ AC_ARG_ENABLE([payloadcheck],
+ [AS_HELP_STRING([--disable-payloadcheck], [disable RTP payload type check (workaround for a PulseAudio bug)])])
+ AM_CONDITIONAL([ENABLE_PAYLOADCHECK], [test "x$enable_payloadcheck" != "xno"])
+ AM_COND_IF([ENABLE_PAYLOADCHECK], [
+ AC_DEFINE([ENABLE_PAYLOADCHECK], [1], [Define to 1 if PAYLOADCHECK is enabled.])
+ ])
+
AC_ARG_ENABLE([aplay],
! [AS_HELP_STRING([--disable-aplay], [disable building of bluealsa-aplay tool])])
AM_CONDITIONAL([ENABLE_APLAY], [test "x$enable_aplay" != "xno"])
AC_ARG_ENABLE([hcitop],
! [AS_HELP_STRING([--enable-hcitop], [enable building of hcitop tool])])
! AM_CONDITIONAL([ENABLE_HCITOP], [test "x$enable_hcitop" = "xyes"])
AM_COND_IF([ENABLE_HCITOP], [
PKG_CHECK_MODULES([LIBBSD], [libbsd])
PKG_CHECK_MODULES([NCURSES], [ncurses])
])
+ # Since it is not possible to specify custom ALSA plugin directory, BlueALSA
+ # PCM plugin has to be installed prior to this test.
+ AC_ARG_ENABLE([pcm-test],
+ [AS_HELP_STRING([--enable-pcm-test], [enable PCM plugin test])])
+ AM_CONDITIONAL([ENABLE_PCM_TEST], [test "x$enable_pcm_test" = "xyes"])
+
AC_ARG_WITH([alsaplugindir],
AS_HELP_STRING([--with-alsaplugindir=dir], [path where ALSA plugin files are stored]),
[alsaplugindir="$withval"], [alsaplugindir="$libdir/alsa-lib"])
*** a/bluez-alsa-1.2.0/src/a2dp-rtp.h 2017-04-13 13:50:39.000000000 -0700
--- b/bluez-alsa-1.2.0/src/a2dp-rtp.h 2018-04-26 13:31:29.385585082 -0700
***************
*** 1,6 ****
/*
* BlueALSA - a2dp-rtp.h
! * Copyright (c) 2016 Arkadiusz Bokowy
*
* This file is a part of bluez-alsa.
*
--- 1,6 ----
/*
* BlueALSA - a2dp-rtp.h
! * Copyright (c) 2016-2017 Arkadiusz Bokowy
*
* This file is a part of bluez-alsa.
*
***************
*** 12,18 ****
#define BLUEALSA_A2DPRTP_H_
#include <stdint.h>
! #include <ortp/rtp.h>
/**
* Media payload header for SBC. */
--- 12,39 ----
#define BLUEALSA_A2DPRTP_H_
#include <stdint.h>
!
! typedef struct rtp_header {
! #if __BYTE_ORDER == __LITTLE_ENDIAN
! uint16_t cc:4;
! uint16_t extbit:1;
! uint16_t padbit:1;
! uint16_t version:2;
! uint16_t paytype:7;
! uint16_t markbit:1;
! #else
! uint16_t version:2;
! uint16_t padbit:1;
! uint16_t extbit:1;
! uint16_t cc:4;
! uint16_t markbit:1;
! uint16_t paytype:7;
! #endif
! uint16_t seq_number;
! uint32_t timestamp;
! uint32_t ssrc;
! uint32_t csrc[16];
! } __attribute__ ((packed)) rtp_header_t;
/**
* Media payload header for SBC. */
*** a/bluez-alsa-1.2.0/test/inc/a2dp.inc 2017-04-13 13:50:39.000000000 -0700
--- b/bluez-alsa-1.2.0/test/inc/a2dp.inc 2018-04-26 13:34:28.586111682 -0700
***************
*** 10,16 ****
--- 10,20 ----
*
*/
+ #include <errno.h>
#include <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
+ #include <arpa/inet.h>
#include <sbc/sbc.h>
#include "../src/a2dp-codecs.h"
#include "../src/a2dp-rtp.h"

View File

@ -0,0 +1,19 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.
# Line up the first '|' above the ':' following the base package name, and
# the '|' on the right side marks the last column you can put a character in.
# You must make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
bluez-alsa: bluez-alsa (Bluetooth Audio ALSA Backend)
bluez-alsa:
bluez-alsa: Bluetooth audio alsa backend, which removesPulseAudio as a
bluez-alsa: dependency in Bluez >=5. BlueALSA registers all known Bluetooth
bluez-alsa: audio profiles in Bluez, so in theory every Bluetooth device (with
bluez-alsa: audio capabilities) can be connected. In order to access the audio
bluez-alsa: stream, one has to connect to the ALSA PCM device called bluealsa.
bluez-alsa:
bluez-alsa:
bluez-alsa: https://github.com/Arkq/bluez-alsa
bluez-alsa: