mirror of
https://github.com/opnsense/src.git
synced 2026-07-15 04:01:09 -04:00
This patch diverges quite a bit from the current upstream [1] in a few ways: 1. virtual_oss(8), virtual_bt_speaker(8) and virtual_oss_cmd(8) are actually separate programs. 2. Backends (lib/virtual_oss) are built as separate shared libraries and we dlopen() them in virtual_oss(8) and virtual_bt_speaker(8) on demand. 3. virtual_equalizer(8) and the sndio and bluetooth backends are built as ports, because they depend on third-party libraries. 4. Use newer libav API in bluetooth backend (see HAVE_LIBAV ifdefs) to address compiler errors. [1] https://github.com/freebsd/virtual_oss Sponsored by: The FreeBSD Foundation MFC after: 1 week Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D52308 (cherry picked from commit 9cab9fde5edad9b409dd2317a2aec7815e6d6bed) (cherry picked from commit 86a7787e324b1524abfc434982bae9bf87ad7390) (cherry picked from commit 69ede18b950e32317d7741410cde7543fa0fce3c) (cherry picked from commit 0532cd2d771372d3266b97aebf4043d5b31b64bd) (cherry picked from commit 25d551b5fb1d28ed485d56d9d637993eb2d223b1) (cherry picked from commit 8af6aee96ed609456900c6dd92dafabac5e89c0a) (cherry picked from commit f040ee6e407832fc9f08d85cd792d1cfb8104976) (cherry picked from commit bce8cdaf4cb184db577a5633e82bdabe24239af1)
102 lines
2.7 KiB
C
102 lines
2.7 KiB
C
/*-
|
|
* Copyright (c) 2015-2022 Hans Petter Selasky
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
|
|
*/
|
|
|
|
#include <sys/queue.h>
|
|
#include <sys/filio.h>
|
|
#include <sys/soundcard.h>
|
|
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
#include <err.h>
|
|
#include <time.h>
|
|
|
|
#include "backend.h"
|
|
#include "int.h"
|
|
|
|
static void
|
|
null_close(struct voss_backend *pbe __unused)
|
|
{
|
|
}
|
|
|
|
static int
|
|
null_open(struct voss_backend *pbe __unused, const char *devname __unused,
|
|
int samplerate __unused, int bufsize __unused, int *pchannels __unused,
|
|
int *pformat)
|
|
{
|
|
int value[3];
|
|
int i;
|
|
|
|
value[0] = *pformat & VPREFERRED_SNE_AFMT;
|
|
value[1] = *pformat & VPREFERRED_SLE_AFMT;
|
|
value[2] = *pformat & VPREFERRED_SBE_AFMT;
|
|
|
|
for (i = 0; i != 3; i++) {
|
|
if (value[i] == 0)
|
|
continue;
|
|
*pformat = value[i];
|
|
return (0);
|
|
}
|
|
return (-1);
|
|
}
|
|
|
|
static int
|
|
null_rec_transfer(struct voss_backend *pbe __unused, void *ptr, int len)
|
|
{
|
|
|
|
if (voss_has_synchronization == 0)
|
|
virtual_oss_wait();
|
|
memset(ptr, 0, len);
|
|
return (len);
|
|
}
|
|
|
|
static int
|
|
null_play_transfer(struct voss_backend *pbe __unused, void *ptr __unused,
|
|
int len)
|
|
{
|
|
return (len);
|
|
}
|
|
|
|
static void
|
|
null_delay(struct voss_backend *pbe __unused, int *pdelay)
|
|
{
|
|
*pdelay = -1;
|
|
}
|
|
|
|
struct voss_backend voss_backend_null_rec = {
|
|
.open = null_open,
|
|
.close = null_close,
|
|
.transfer = null_rec_transfer,
|
|
.delay = null_delay,
|
|
};
|
|
|
|
struct voss_backend voss_backend_null_play = {
|
|
.open = null_open,
|
|
.close = null_close,
|
|
.transfer = null_play_transfer,
|
|
.delay = null_delay,
|
|
};
|