baresip/baresip-1.1.0-module-oss.patch
Robert Scheck 9e2a2300d0 - Upgrade to 1.1.0 (#1953196)
- Added upstream feature patch for GTK+ call history
2021-04-24 18:59:30 +02:00

493 lines
11 KiB
Diff

From 0a1dc2492856a22a4551b02dc5a866322a7d514d Mon Sep 17 00:00:00 2001
From: "Alfred E. Heggestad" <alfred.heggestad@gmail.com>
Date: Sat, 24 Apr 2021 13:23:12 +0200
Subject: [PATCH] oss: remove deprecated module
FreeBSD now supports ALSA and Portaudio which can be used instead.
---
README.md | 2 -
mk/modules.mk | 7 -
modules/oss/module.mk | 18 --
modules/oss/oss.c | 372 ------------------------------------------
src/config.c | 4 +-
5 files changed, 2 insertions(+), 401 deletions(-)
delete mode 100644 modules/oss/module.mk
delete mode 100644 modules/oss/oss.c
diff --git a/README.md b/README.md
index d87a76564..f4afe0a8d 100644
--- a/README.md
+++ b/README.md
@@ -88,7 +88,6 @@ Distributed under BSD license
- Gstreamer playbin input audio-driver
- JACK Audio Connection Kit audio-driver
- MacOSX/iOS coreaudio/audiounit audio-driver
- - Open Sound System (OSS) audio-driver
- Portaudio audio-driver
- Windows winwave audio-driver
@@ -265,7 +264,6 @@ natpmp NAT Port Mapping Protocol (NAT-PMP) module
omx OpenMAX IL video display module
opensles OpenSLES audio driver
opus OPUS Interactive audio codec
-oss Open Sound System (OSS) audio driver
pcp Port Control Protocol (PCP) module
plc Packet Loss Concealment (PLC) using spandsp
portaudio Portaudio driver
diff --git a/mk/modules.mk b/mk/modules.mk
index d4e53a337..6143edd90 100644
--- a/mk/modules.mk
+++ b/mk/modules.mk
@@ -38,7 +38,6 @@
# USE_OMX_BELLAGIO libomxil-bellagio xvideosink driver
# USE_OPUS Opus audio codec
# USE_OPUS_MS Opus multistream audio codec
-# USE_OSS OSS audio driver
# USE_PLC Packet Loss Concealment
# USE_PORTAUDIO Portaudio audio driver
# USE_PULSE Pulseaudio audio driver
@@ -144,9 +143,6 @@ USE_OPUS := $(shell [ -f $(SYSROOT)/include/opus/opus.h ] || \
USE_OPUS_MS := $(shell [ -f $(SYSROOT)/include/opus/opus_multistream.h ] || \
[ -f $(SYSROOT_ALT)/include/opus/opus_multistream.h ] || \
[ -f $(SYSROOT)/local/include/opus/opus_multistream.h ] && echo "yes")
-USE_OSS := $(shell [ -f $(SYSROOT)/include/soundcard.h ] || \
- [ -f $(SYSROOT)/include/linux/soundcard.h ] || \
- [ -f $(SYSROOT)/include/sys/soundcard.h ] && echo "yes")
USE_PLC := $(shell [ -f $(SYSROOT)/include/spandsp/plc.h ] || \
[ -f $(SYSROOT_ALT)/include/spandsp/plc.h ] || \
[ -f $(SYSROOT_LOCAL)/include/spandsp/plc.h ] && echo "yes")
@@ -408,9 +404,6 @@ endif
ifneq ($(USE_OPUS),)
MODULES += opus
endif
-ifneq ($(USE_OSS),)
-MODULES += oss
-endif
ifneq ($(USE_PLC),)
MODULES += plc
endif
diff --git a/modules/oss/module.mk b/modules/oss/module.mk
deleted file mode 100644
index 109d34d63..000000000
--- a/modules/oss/module.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# module.mk
-#
-# Copyright (C) 2010 Alfred E. Heggestad
-#
-
-MOD := oss
-$(MOD)_SRCS += oss.c
-$(MOD)_LFLAGS +=
-
-ifeq ($(OS), openbsd)
-$(MOD)_LFLAGS += -lossaudio
-endif
-ifeq ($(OS), netbsd)
-$(MOD)_LFLAGS += -lossaudio
-endif
-
-include mk/mod.mk
diff --git a/modules/oss/oss.c b/modules/oss/oss.c
deleted file mode 100644
index 507b8af98..000000000
--- a/modules/oss/oss.c
+++ /dev/null
@@ -1,372 +0,0 @@
-/**
- * @file oss.c Open Sound System (OSS) driver
- *
- * Copyright (C) 2010 Alfred E. Heggestad
- */
-#include <re.h>
-#include <rem.h>
-#include <baresip.h>
-#include <string.h>
-#include <unistd.h>
-#include <pthread.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#if defined(NETBSD) || defined(OPENBSD)
-#include <soundcard.h>
-#elif defined (LINUX)
-#include <linux/soundcard.h>
-#else
-#include <sys/soundcard.h>
-#endif
-#ifdef SOLARIS
-#include <sys/filio.h>
-#endif
-
-
-/**
- * @defgroup oss oss
- *
- * Open Sound System (OSS) audio driver module
- *
- *
- * References:
- *
- * http://www.4front-tech.com/linux.html
- */
-
-
-struct ausrc_st {
- pthread_t thread;
- bool run;
- int fd;
- struct ausrc_prm prm;
- int16_t *sampv;
- size_t sampc;
- ausrc_read_h *rh;
- ausrc_error_h *errh;
- void *arg;
-};
-
-struct auplay_st {
- pthread_t thread;
- bool run;
- int fd;
- int16_t *sampv;
- size_t sampc;
- auplay_write_h *wh;
- void *arg;
-};
-
-
-static struct ausrc *ausrc;
-static struct auplay *auplay;
-static char oss_dev[64] = "/dev/dsp";
-
-
-/*
- * Automatically calculate the fragment size depending on sampling rate
- * and number of channels. More entries can be added to the table below.
- *
- * NOTE. Powermac 8200 and linux 2.4.18 gives:
- * SNDCTL_DSP_SETFRAGMENT: Invalid argument
- */
-static int set_fragment(int fd, uint32_t sampc)
-{
- static const struct {
- uint16_t max;
- uint16_t size;
- } fragv[] = {
- {10, 7}, /* 10 x 2^7 = 1280 = 4 x 320 */
- {15, 7}, /* 15 x 2^7 = 1920 = 6 x 320 */
- {20, 7}, /* 20 x 2^7 = 2560 = 8 x 320 */
- {25, 7}, /* 25 x 2^7 = 3200 = 10 x 320 */
- {15, 8}, /* 15 x 2^8 = 3840 = 12 x 320 */
- {20, 8}, /* 20 x 2^8 = 5120 = 16 x 320 */
- {25, 8} /* 25 x 2^8 = 6400 = 20 x 320 */
- };
- size_t i;
- const uint32_t buf_size = 2 * sampc;
-
- for (i=0; i<ARRAY_SIZE(fragv); i++) {
- const uint16_t frag_max = fragv[i].max;
- const uint16_t frag_size = fragv[i].size;
- const uint32_t fragment_size = frag_max * (1<<frag_size);
-
- if (0 == (fragment_size%buf_size)) {
- int fragment = (frag_max<<16) | frag_size;
-
- if (0 == ioctl(fd, SNDCTL_DSP_SETFRAGMENT,
- &fragment)) {
- return 0;
- }
- }
- }
-
- return ENODEV;
-}
-
-
-static int oss_reset(int fd, uint32_t srate, uint8_t ch, int sampc,
- int nonblock)
-{
- int format = AFMT_S16_NE; /* native endian */
- int speed = srate;
- int channels = ch;
- int blocksize = 0;
- int err;
-
- err = set_fragment(fd, sampc);
- if (err)
- return err;
-
- if (0 != ioctl(fd, FIONBIO, &nonblock))
- return errno;
- if (0 != ioctl(fd, SNDCTL_DSP_SETFMT, &format))
- return errno;
- if (0 != ioctl(fd, SNDCTL_DSP_CHANNELS, &channels))
- return errno;
- if (2 == channels) {
- int stereo = 1;
- if (0 != ioctl(fd, SNDCTL_DSP_STEREO, &stereo))
- return errno;
- }
- if (0 != ioctl(fd, SNDCTL_DSP_SPEED, &speed))
- return errno;
-
- (void)ioctl(fd, SNDCTL_DSP_GETBLKSIZE, &blocksize);
-
- info("oss: init: %d Hz %d ch, blocksize=%d\n",
- speed, channels, blocksize);
-
- return 0;
-}
-
-
-static void auplay_destructor(void *arg)
-{
- struct auplay_st *st = arg;
-
- if (st->run) {
- st->run = false;
- pthread_join(st->thread, NULL);
- }
-
- if (-1 != st->fd) {
- (void)close(st->fd);
- }
-
- mem_deref(st->sampv);
-}
-
-
-static void ausrc_destructor(void *arg)
-{
- struct ausrc_st *st = arg;
-
- if (st->run) {
- st->run = false;
- pthread_join(st->thread, NULL);
- }
-
- if (-1 != st->fd) {
- (void)close(st->fd);
- }
-
- mem_deref(st->sampv);
-}
-
-
-static void *record_thread(void *arg)
-{
- struct ausrc_st *st = arg;
- struct auframe af;
- uint64_t sampc = 0;
- int n;
-
- while (st->run) {
-
- n = (int)read(st->fd, st->sampv, st->sampc*2);
- if (n <= 0)
- continue;
-
- af.fmt = AUFMT_S16LE;
- af.sampv = st->sampv;
- af.sampc = n/2;
- af.timestamp = sampc * AUDIO_TIMEBASE / st->prm.srate;
-
- sampc += n/2;
-
- st->rh(&af, st->arg);
- }
-
- return NULL;
-}
-
-
-static void *play_thread(void *arg)
-{
- struct auplay_st *st = arg;
- struct auframe af;
- int n;
-
- auframe_init(&af, AUFMT_S16LE, st->sampv, st->sampc);
-
- while (st->run) {
-
- st->wh(&af, st->arg);
-
- n = (int)write(st->fd, st->sampv, st->sampc*2);
- if (n < 0) {
- warning("oss: write: %m\n", errno);
- break;
- }
- }
-
- return NULL;
-}
-
-
-static int src_alloc(struct ausrc_st **stp, const struct ausrc *as,
- struct media_ctx **ctx,
- struct ausrc_prm *prm, const char *device,
- ausrc_read_h *rh, ausrc_error_h *errh, void *arg)
-{
- struct ausrc_st *st;
- int err;
-
- (void)ctx;
- (void)errh;
-
- if (!stp || !as || !prm || prm->fmt != AUFMT_S16LE || !rh)
- return EINVAL;
-
- st = mem_zalloc(sizeof(*st), ausrc_destructor);
- if (!st)
- return ENOMEM;
-
- st->fd = -1;
- st->rh = rh;
- st->errh = errh;
- st->arg = arg;
-
- if (!device)
- device = oss_dev;
-
- st->prm = *prm;
- st->sampc = prm->srate * prm->ch * prm->ptime / 1000;
-
- st->sampv = mem_alloc(2 * st->sampc, NULL);
- if (!st->sampv) {
- err = ENOMEM;
- goto out;
- }
-
- st->fd = open(device, O_RDONLY);
- if (st->fd < 0) {
- err = errno;
- goto out;
- }
-
- err = oss_reset(st->fd, prm->srate, prm->ch, (int)st->sampc, 0);
- if (err)
- goto out;
-
- st->run = true;
- err = pthread_create(&st->thread, NULL, record_thread, st);
- if (err) {
- st->run = false;
- goto out;
- }
-
- out:
- if (err)
- mem_deref(st);
- else
- *stp = st;
-
- return err;
-}
-
-
-static int play_alloc(struct auplay_st **stp, const struct auplay *ap,
- struct auplay_prm *prm, const char *device,
- auplay_write_h *wh, void *arg)
-{
- struct auplay_st *st;
- int err;
-
- if (!stp || !ap || !prm || prm->fmt != AUFMT_S16LE || !wh)
- return EINVAL;
-
- st = mem_zalloc(sizeof(*st), auplay_destructor);
- if (!st)
- return ENOMEM;
-
- st->fd = -1;
- st->wh = wh;
- st->arg = arg;
-
- if (!device)
- device = oss_dev;
-
- st->sampc = prm->srate * prm->ch * prm->ptime / 1000;
-
- st->sampv = mem_alloc(st->sampc * 2, NULL);
- if (!st->sampv) {
- err = ENOMEM;
- goto out;
- }
-
- st->fd = open(device, O_WRONLY);
- if (st->fd < 0) {
- err = errno;
- goto out;
- }
-
- err = oss_reset(st->fd, prm->srate, prm->ch, (int)st->sampc, 0);
- if (err)
- goto out;
-
- st->run = true;
- err = pthread_create(&st->thread, NULL, play_thread, st);
- if (err) {
- st->run = false;
- goto out;
- }
-
- out:
- if (err)
- mem_deref(st);
- else
- *stp = st;
-
- return err;
-}
-
-
-static int module_init(void)
-{
- int err;
-
- err = ausrc_register(&ausrc, baresip_ausrcl(), "oss", src_alloc);
- err |= auplay_register(&auplay, baresip_auplayl(), "oss", play_alloc);
-
- return err;
-}
-
-
-static int module_close(void)
-{
- ausrc = mem_deref(ausrc);
- auplay = mem_deref(auplay);
-
- return 0;
-}
-
-
-EXPORT_SYM const struct mod_export DECL_EXPORTS(oss) = {
- "oss",
- "audio",
- module_init,
- module_close,
-};
diff --git a/src/config.c b/src/config.c
index 6a2e53c06..bf1d99db6 100644
--- a/src/config.c
+++ b/src/config.c
@@ -542,7 +542,7 @@ static const char *default_audio_device(void)
return "coreaudio,default";
#endif
#elif defined (FREEBSD)
- return "oss,/dev/dsp";
+ return "alsa,default";
#elif defined (OPENBSD)
return "sndio,default";
#elif defined (WIN32)
@@ -865,7 +865,7 @@ int config_write_template(const char *file, const struct config *cfg)
(void)re_fprintf(f, "#module\t\t\t" "audiounit" MOD_EXT "\n");
#endif
#elif defined (FREEBSD)
- (void)re_fprintf(f, "module\t\t\t" "oss" MOD_EXT "\n");
+ (void)re_fprintf(f, "module\t\t\t" "alsa" MOD_EXT "\n");
#elif defined (OPENBSD)
(void)re_fprintf(f, "module\t\t\t" "sndio" MOD_EXT "\n");
#elif defined (WIN32)