mirror of
https://gitdl.cn/https://github.com/chakralinux/core.git
synced 2025-02-05 09:07:14 +08:00
53 lines
2.1 KiB
Diff
53 lines
2.1 KiB
Diff
--- a/src/sox.c 2012-02-19 20:51:31.000000000 -0500
|
|
+++ b/src/sox.c 2012-05-19 13:49:32.465109560 -0400
|
|
@@ -2537,21 +2537,39 @@
|
|
|
|
return name? from_env? from_env : name : NULL;
|
|
}
|
|
+
|
|
+static char const * try_device(char const * name)
|
|
+{
|
|
+ sox_format_handler_t const * handler = sox_find_format(name, sox_false);
|
|
+ if (handler) {
|
|
+ sox_format_t format, * ft = &format;
|
|
+ memset(ft, 0, sizeof(*ft));
|
|
+ ft->filename = (char *)device_name(name);
|
|
+ ft->priv = lsx_calloc(1, handler->priv_size);
|
|
+ if (handler->startwrite(ft) == SOX_SUCCESS) {
|
|
+ handler->stopwrite(ft);
|
|
+ free(ft->priv);
|
|
+ return name;
|
|
+ }
|
|
+ free(ft->priv);
|
|
+ }
|
|
+ return NULL;
|
|
+}
|
|
|
|
static char const * set_default_device(file_t * f)
|
|
{
|
|
/* Default audio driver type in order of preference: */
|
|
if (!f->filetype) f->filetype = getenv("AUDIODRIVER");
|
|
- if (!f->filetype && sox_find_format("coreaudio", sox_false)) f->filetype = "coreaudio";
|
|
- if (!f->filetype && sox_find_format("pulseaudio" , sox_false)) f->filetype = "pulseaudio";
|
|
- if (!f->filetype && sox_find_format("alsa", sox_false)) f->filetype = "alsa";
|
|
- if (!f->filetype && sox_find_format("waveaudio" , sox_false)) f->filetype = "waveaudio";
|
|
- if (!f->filetype && sox_find_format("sndio", sox_false)) f->filetype = "sndio";
|
|
- if (!f->filetype && sox_find_format("oss" , sox_false)) f->filetype = "oss";
|
|
- if (!f->filetype && sox_find_format("sunau",sox_false)) f->filetype = "sunau";
|
|
- if (!f->filetype && sox_find_format("ao" , sox_false) && file_count) /*!rec*/
|
|
- f->filetype = "ao";
|
|
-
|
|
+ if (!f->filetype) f->filetype = try_device("coreaudio");
|
|
+ if (!f->filetype) f->filetype = try_device("pulseaudio");
|
|
+ if (!f->filetype) f->filetype = try_device("alsa");
|
|
+ if (!f->filetype) f->filetype = try_device("waveaudio");
|
|
+ if (!f->filetype) f->filetype = try_device("sndio");
|
|
+ if (!f->filetype) f->filetype = try_device("oss");
|
|
+ if (!f->filetype) f->filetype = try_device("sunau");
|
|
+ if (!f->filetype && file_count) /*!rec*/
|
|
+ f->filetype = try_device("ao");
|
|
+
|
|
if (!f->filetype) {
|
|
lsx_fail("Sorry, there is no default audio device configured");
|
|
exit(1);
|