This commit is contained in:
parent
392016444c
commit
2c4b3c8683
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:bc691463af8506c1c84db0edab727ee8f8ee4ecd1777b0e264db2525d4500833
|
|
||||||
size 788551
|
|
3
alsa-lib-1.0.17a.tar.bz2
Normal file
3
alsa-lib-1.0.17a.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:ace3d9c57eae65c7f292704b49c3806a1f90ce2cdeb4aca1e5abf021127ad3ed
|
||||||
|
size 789428
|
@ -1,337 +0,0 @@
|
|||||||
diff --git a/include/asoundef.h b/include/asoundef.h
|
|
||||||
index e780c65..c6c4eec 100644
|
|
||||||
--- a/include/asoundef.h
|
|
||||||
+++ b/include/asoundef.h
|
|
||||||
@@ -69,35 +69,56 @@ extern "C" {
|
|
||||||
#define IEC958_AES1_PRO_USERBITS_UDEF (12<<4) /**< user defined application */
|
|
||||||
#define IEC958_AES1_CON_CATEGORY 0x7f /**< consumer category */
|
|
||||||
#define IEC958_AES1_CON_GENERAL 0x00 /**< general category */
|
|
||||||
-#define IEC958_AES1_CON_EXPERIMENTAL 0x40 /**< experimental category */
|
|
||||||
-#define IEC958_AES1_CON_SOLIDMEM_MASK 0x0f /**< ??? */
|
|
||||||
-#define IEC958_AES1_CON_SOLIDMEM_ID 0x08 /**< ??? */
|
|
||||||
-#define IEC958_AES1_CON_BROADCAST1_MASK 0x07 /**< ??? */
|
|
||||||
-#define IEC958_AES1_CON_BROADCAST1_ID 0x04 /**< ??? */
|
|
||||||
-#define IEC958_AES1_CON_DIGDIGCONV_MASK 0x07 /**< digital<->digital converter mask */
|
|
||||||
-#define IEC958_AES1_CON_DIGDIGCONV_ID 0x02 /**< digital<->digital converter id */
|
|
||||||
-#define IEC958_AES1_CON_ADC_COPYRIGHT_MASK 0x1f /**< ADC Copyright mask */
|
|
||||||
-#define IEC958_AES1_CON_ADC_COPYRIGHT_ID 0x06 /**< ADC Copyright ID */
|
|
||||||
-#define IEC958_AES1_CON_ADC_MASK 0x1f /**< ADC Mask */
|
|
||||||
-#define IEC958_AES1_CON_ADC_ID 0x16 /**< ADC ID */
|
|
||||||
-#define IEC958_AES1_CON_BROADCAST2_MASK 0x0f /**< Broadcast mask */
|
|
||||||
-#define IEC958_AES1_CON_BROADCAST2_ID 0x0e /**< Broadcast ID */
|
|
||||||
#define IEC958_AES1_CON_LASEROPT_MASK 0x07 /**< Laser-optical mask */
|
|
||||||
#define IEC958_AES1_CON_LASEROPT_ID 0x01 /**< Laser-optical ID */
|
|
||||||
-#define IEC958_AES1_CON_MUSICAL_MASK 0x07 /**< Musical device mask */
|
|
||||||
-#define IEC958_AES1_CON_MUSICAL_ID 0x05 /**< Musical device ID */
|
|
||||||
-#define IEC958_AES1_CON_MAGNETIC_MASK 0x07 /**< Magnetic device mask */
|
|
||||||
-#define IEC958_AES1_CON_MAGNETIC_ID 0x03 /**< Magnetic device ID */
|
|
||||||
#define IEC958_AES1_CON_IEC908_CD (IEC958_AES1_CON_LASEROPT_ID|0x00) /**< IEC958 CD compatible device */
|
|
||||||
#define IEC958_AES1_CON_NON_IEC908_CD (IEC958_AES1_CON_LASEROPT_ID|0x08) /**< non-IEC958 CD compatible device */
|
|
||||||
+#define IEC958_AES1_CON_MINI_DISC (IEC958_AES1_CON_LASEROPT_ID|0x48) /**< Mini-Disc device */
|
|
||||||
+#define IEC958_AES1_CON_DVD (IEC958_AES1_CON_LASEROPT_ID|0x18) /**< DVD device */
|
|
||||||
+#define IEC958_AES1_CON_LASTEROPT_OTHER (IEC958_AES1_CON_LASEROPT_ID|0x78) /**< Other laser-optical product */
|
|
||||||
+#define IEC958_AES1_CON_DIGDIGCONV_MASK 0x07 /**< digital<->digital converter mask */
|
|
||||||
+#define IEC958_AES1_CON_DIGDIGCONV_ID 0x02 /**< digital<->digital converter id */
|
|
||||||
#define IEC958_AES1_CON_PCM_CODER (IEC958_AES1_CON_DIGDIGCONV_ID|0x00) /**< PCM coder */
|
|
||||||
-#define IEC958_AES1_CON_SAMPLER (IEC958_AES1_CON_DIGDIGCONV_ID|0x20) /**< PCM sampler */
|
|
||||||
-#define IEC958_AES1_CON_MIXER (IEC958_AES1_CON_DIGDIGCONV_ID|0x10) /**< Mixer */
|
|
||||||
+#define IEC958_AES1_CON_MIXER (IEC958_AES1_CON_DIGDIGCONV_ID|0x10) /**< Digital signal mixer */
|
|
||||||
#define IEC958_AES1_CON_RATE_CONVERTER (IEC958_AES1_CON_DIGDIGCONV_ID|0x18) /**< Rate converter */
|
|
||||||
-#define IEC958_AES1_CON_SYNTHESIZER (IEC958_AES1_CON_MUSICAL_ID|0x00) /**< Synthesizer */
|
|
||||||
-#define IEC958_AES1_CON_MICROPHONE (IEC958_AES1_CON_MUSICAL_ID|0x08) /**< Microphone */
|
|
||||||
+#define IEC958_AES1_CON_SAMPLER (IEC958_AES1_CON_DIGDIGCONV_ID|0x20) /**< PCM sampler */
|
|
||||||
+#define IEC958_AES1_CON_DSP (IEC958_AES1_CON_DIGDIGCONV_ID|0x28) /**< Digital sound processor */
|
|
||||||
+#define IEC958_AES1_CON_DIGDIGCONV_OTHER (IEC958_AES1_CON_DIGDIGCONV_ID|0x78) /**< Other digital<->digital product */
|
|
||||||
+#define IEC958_AES1_CON_MAGNETIC_MASK 0x07 /**< Magnetic device mask */
|
|
||||||
+#define IEC958_AES1_CON_MAGNETIC_ID 0x03 /**< Magnetic device ID */
|
|
||||||
#define IEC958_AES1_CON_DAT (IEC958_AES1_CON_MAGNETIC_ID|0x00) /**< Digital Audio Tape */
|
|
||||||
#define IEC958_AES1_CON_VCR (IEC958_AES1_CON_MAGNETIC_ID|0x08) /**< Video recorder */
|
|
||||||
+#define IEC958_AES1_CON_DCC (IEC958_AES1_CON_MAGNETIC_ID|0x40) /**< Digital compact cassette */
|
|
||||||
+#define IEC958_AES1_CON_MAGNETIC_DISC (IEC958_AES1_CON_MAGNETIC_ID|0x18) /**< Magnetic disc digital audio device */
|
|
||||||
+#define IEC958_AES1_CON_MAGNETIC_OTHER (IEC958_AES1_CON_MAGNETIC_ID|0x78) /**< Other magnetic device */
|
|
||||||
+#define IEC958_AES1_CON_BROADCAST1_MASK 0x07 /**< Broadcast mask */
|
|
||||||
+#define IEC958_AES1_CON_BROADCAST1_ID 0x04 /**< Broadcast ID */
|
|
||||||
+#define IEC958_AES1_CON_DAB_JAPAN (IEC958_AES1_CON_BROADCAST1_ID|0x00) /**< Digital audio broadcast (Japan) */
|
|
||||||
+#define IEC958_AES1_CON_DAB_EUROPE (IEC958_AES1_CON_BROADCAST1_ID|0x08) /**< Digital audio broadcast (Europe) */
|
|
||||||
+#define IEC958_AES1_CON_DAB_USA (IEC958_AES1_CON_BROADCAST1_ID|0x60) /**< Digital audio broadcast (USA) */
|
|
||||||
+#define IEC958_AES1_CON_SOFTWARE (IEC958_AES1_CON_BROADCAST1_ID|0x40) /**< Electronic software delivery */
|
|
||||||
+#define IEC958_AES1_CON_IEC62105 (IEC958_AES1_CON_BROADCAST1_ID|0x20) /**< Used by another standard (IEC 62105) */
|
|
||||||
+#define IEC958_AES1_CON_BROADCAST1_OTHER (IEC958_AES1_CON_BROADCAST1_ID|0x78) /**< Other broadcast product */
|
|
||||||
+#define IEC958_AES1_CON_BROADCAST2_MASK 0x0f /**< Broadcast alternative mask */
|
|
||||||
+#define IEC958_AES1_CON_BROADCAST2_ID 0x0e /**< Broadcast alternative ID */
|
|
||||||
+#define IEC958_AES1_CON_MUSICAL_MASK 0x07 /**< Musical device mask */
|
|
||||||
+#define IEC958_AES1_CON_MUSICAL_ID 0x05 /**< Musical device ID */
|
|
||||||
+#define IEC958_AES1_CON_SYNTHESIZER (IEC958_AES1_CON_MUSICAL_ID|0x00) /**< Synthesizer */
|
|
||||||
+#define IEC958_AES1_CON_MICROPHONE (IEC958_AES1_CON_MUSICAL_ID|0x08) /**< Microphone */
|
|
||||||
+#define IEC958_AES1_CON_MUSICAL_OTHER (IEC958_AES1_CON_MUSICAL_ID|0x78) /**< Other musical device */
|
|
||||||
+#define IEC958_AES1_CON_ADC_MASK 0x1f /**< ADC Mask */
|
|
||||||
+#define IEC958_AES1_CON_ADC_ID 0x06 /**< ADC ID */
|
|
||||||
+#define IEC958_AES1_CON_ADC (IEC958_AES1_CON_ADC_ID|0x00) /**< ADC without copyright information */
|
|
||||||
+#define IEC958_AES1_CON_ADC_OTHER (IEC958_AES1_CON_ADC_ID|0x60) /**< Other ADC product (with no copyright information) */
|
|
||||||
+#define IEC958_AES1_CON_ADC_COPYRIGHT_MASK 0x1f /**< ADC Copyright mask */
|
|
||||||
+#define IEC958_AES1_CON_ADC_COPYRIGHT_ID 0x16 /**< ADC Copyright ID */
|
|
||||||
+#define IEC958_AES1_CON_ADC_COPYRIGHT (IEC958_AES1_CON_ADC_COPYRIGHT_ID|0x00) /**< ADC with copyright information */
|
|
||||||
+#define IEC958_AES1_CON_ADC_COPYRIGHT_OTHER (IEC958_AES1_CON_ADC_COPYRIGHT_ID|0x60) /**< Other ADC with copyright information product */
|
|
||||||
+#define IEC958_AES1_CON_SOLIDMEM_MASK 0x0f /**< Solid memory based products mask */
|
|
||||||
+#define IEC958_AES1_CON_SOLIDMEM_ID 0x08 /**< Solid memory based products ID */
|
|
||||||
+#define IEC958_AES1_CON_SOLIDMEM_DIGITAL_RECORDER_PLAYER (IEC958_AES1_CON_SOLIDMEM_ID|0x00) /**< Digital audio recorder and player using solid state memory */
|
|
||||||
+#define IEC958_AES1_CON_SOLIDMEM_OTHER (IEC958_AES1_CON_SOLIDMEM_ID|0x70) /**< Other solid state memory based product */
|
|
||||||
+#define IEC958_AES1_CON_EXPERIMENTAL 0x40 /**< experimental category */
|
|
||||||
#define IEC958_AES1_CON_ORIGINAL (1<<7) /**< this bits depends on the category code */
|
|
||||||
#define IEC958_AES2_PRO_SBITS (7<<0) /**< mask - sample bits */
|
|
||||||
#define IEC958_AES2_PRO_SBITS_20 (2<<0) /**< 20-bit - coordination */
|
|
||||||
@@ -115,8 +136,16 @@ extern "C" {
|
|
||||||
#define IEC958_AES2_CON_CHANNEL_UNSPEC (0<<4) /**< channel number unspecified */
|
|
||||||
#define IEC958_AES3_CON_FS (15<<0) /**< mask - sample frequency */
|
|
||||||
#define IEC958_AES3_CON_FS_44100 (0<<0) /**< 44.1kHz */
|
|
||||||
+#define IEC958_AES3_CON_FS_NOTID (1<<0) /**< sample frequency non indicated */
|
|
||||||
#define IEC958_AES3_CON_FS_48000 (2<<0) /**< 48kHz */
|
|
||||||
#define IEC958_AES3_CON_FS_32000 (3<<0) /**< 32kHz */
|
|
||||||
+#define IEC958_AES3_CON_FS_22050 (4<<0) /**< 22.05kHz */
|
|
||||||
+#define IEC958_AES3_CON_FS_24000 (6<<0) /**< 24kHz */
|
|
||||||
+#define IEC958_AES3_CON_FS_88200 (8<<0) /**< 88.2kHz */
|
|
||||||
+#define IEC958_AES3_CON_FS_768000 (9<<0) /**< 768kHz */
|
|
||||||
+#define IEC958_AES3_CON_FS_96000 (10<<0) /**< 96kHz */
|
|
||||||
+#define IEC958_AES3_CON_FS_176400 (12<<0) /**< 176.4kHz */
|
|
||||||
+#define IEC958_AES3_CON_FS_192000 (14<<0) /**< 192kHz */
|
|
||||||
#define IEC958_AES3_CON_CLOCK (3<<4) /**< mask - clock accuracy */
|
|
||||||
#define IEC958_AES3_CON_CLOCK_1000PPM (0<<4) /**< 1000 ppm */
|
|
||||||
#define IEC958_AES3_CON_CLOCK_50PPM (1<<4) /**< 50 ppm */
|
|
||||||
@@ -129,6 +158,26 @@ extern "C" {
|
|
||||||
#define IEC958_AES4_CON_WORDLEN_23_19 (4<<1) /**< 23-bit or 19-bit */
|
|
||||||
#define IEC958_AES4_CON_WORDLEN_24_20 (5<<1) /**< 24-bit or 20-bit */
|
|
||||||
#define IEC958_AES4_CON_WORDLEN_21_17 (6<<1) /**< 21-bit or 17-bit */
|
|
||||||
+#define IEC958_AES4_CON_ORIGFS (15<<4) /**< mask - original sample frequency */
|
|
||||||
+#define IEC958_AES4_CON_ORIGFS_NOTID (0<<4) /**< original sample frequency not indicated */
|
|
||||||
+#define IEC958_AES4_CON_ORIGFS_192000 (1<<4) /**< 192kHz */
|
|
||||||
+#define IEC958_AES4_CON_ORIGFS_12000 (2<<4) /**< 12kHz */
|
|
||||||
+#define IEC958_AES4_CON_ORIGFS_176400 (3<<4) /**< 176.4kHz */
|
|
||||||
+#define IEC958_AES4_CON_ORIGFS_96000 (5<<4) /**< 96kHz */
|
|
||||||
+#define IEC958_AES4_CON_ORIGFS_8000 (6<<4) /**< 8kHz */
|
|
||||||
+#define IEC958_AES4_CON_ORIGFS_88200 (7<<4) /**< 88.2kHz */
|
|
||||||
+#define IEC958_AES4_CON_ORIGFS_16000 (8<<4) /**< 16kHz */
|
|
||||||
+#define IEC958_AES4_CON_ORIGFS_24000 (9<<4) /**< 24kHz */
|
|
||||||
+#define IEC958_AES4_CON_ORIGFS_11025 (10<<4) /**< 11.025kHz */
|
|
||||||
+#define IEC958_AES4_CON_ORIGFS_22050 (11<<4) /**< 22.05kHz */
|
|
||||||
+#define IEC958_AES4_CON_ORIGFS_32000 (12<<4) /**< 32kHz */
|
|
||||||
+#define IEC958_AES4_CON_ORIGFS_48000 (13<<4) /**< 48kHz */
|
|
||||||
+#define IEC958_AES4_CON_ORIGFS_44100 (15<<4) /**< 44.1kHz */
|
|
||||||
+#define IEC958_AES5_CON_CGMSA (3<<0) /**< mask - CGMS-A */
|
|
||||||
+#define IEC958_AES5_CON_CGMSA_COPYFREELY (0<<0) /**< copying is permitted without restriction */
|
|
||||||
+#define IEC958_AES5_CON_CGMSA_COPYONCE (1<<0) /**< one generation of copies may be made */
|
|
||||||
+#define IEC958_AES5_CON_CGMSA_COPYNOMORE (2<<0) /**< condition not be used */
|
|
||||||
+#define IEC958_AES5_CON_CGMSA_COPYNEVER (3<<0) /**< no copying is permitted */
|
|
||||||
|
|
||||||
/** \} */
|
|
||||||
|
|
||||||
diff --git a/src/pcm/pcm_direct.c b/src/pcm/pcm_direct.c
|
|
||||||
index a884b12..1170963 100644
|
|
||||||
--- a/src/pcm/pcm_direct.c
|
|
||||||
+++ b/src/pcm/pcm_direct.c
|
|
||||||
@@ -1107,7 +1107,7 @@ int snd_pcm_direct_initialize_poll_fd(snd_pcm_direct_t *dmix)
|
|
||||||
snd_pcm_info_get_subdevice(info) * 2 + capture);
|
|
||||||
ret = snd_timer_open(&dmix->timer, name, SND_TIMER_OPEN_NONBLOCK | SND_TIMER_OPEN_TREAD);
|
|
||||||
if (ret < 0) {
|
|
||||||
- dmix->tread = 1;
|
|
||||||
+ dmix->tread = 0;
|
|
||||||
ret = snd_timer_open(&dmix->timer, name, SND_TIMER_OPEN_NONBLOCK);
|
|
||||||
if (ret < 0) {
|
|
||||||
SNDERR("unable to open timer '%s'", name);
|
|
||||||
@@ -1293,7 +1293,7 @@ int snd_pcm_direct_check_interleave(snd_pcm_direct_t *dmix, snd_pcm_t *pcm)
|
|
||||||
const snd_pcm_channel_area_t *dst_areas;
|
|
||||||
const snd_pcm_channel_area_t *src_areas;
|
|
||||||
|
|
||||||
- bits = snd_pcm_format_physical_width(dmix->type);
|
|
||||||
+ bits = snd_pcm_format_physical_width(pcm->format);
|
|
||||||
if ((bits % 8) != 0)
|
|
||||||
interleaved = 0;
|
|
||||||
channels = dmix->channels;
|
|
||||||
diff --git a/src/pcm/pcm_plugin.c b/src/pcm/pcm_plugin.c
|
|
||||||
index c73a02b..c4f5b4a 100644
|
|
||||||
--- a/src/pcm/pcm_plugin.c
|
|
||||||
+++ b/src/pcm/pcm_plugin.c
|
|
||||||
@@ -203,7 +203,7 @@ static snd_pcm_sframes_t snd_pcm_plugin_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t
|
|
||||||
snd_pcm_sframes_t n = snd_pcm_mmap_hw_avail(pcm);
|
|
||||||
snd_pcm_sframes_t sframes;
|
|
||||||
|
|
||||||
- if ((snd_pcm_uframes_t)n > frames)
|
|
||||||
+ if ((snd_pcm_uframes_t)n < frames)
|
|
||||||
frames = n;
|
|
||||||
if (frames == 0)
|
|
||||||
return 0;
|
|
||||||
@@ -222,7 +222,7 @@ static snd_pcm_sframes_t snd_pcm_plugin_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t
|
|
||||||
frames = plugin->client_frames(pcm, sframes);
|
|
||||||
snd_pcm_mmap_appl_backward(pcm, (snd_pcm_uframes_t) frames);
|
|
||||||
snd_atomic_write_end(&plugin->watom);
|
|
||||||
- return n;
|
|
||||||
+ return (snd_pcm_sframes_t) frames;
|
|
||||||
}
|
|
||||||
|
|
||||||
static snd_pcm_sframes_t snd_pcm_plugin_forwardable(snd_pcm_t *pcm)
|
|
||||||
@@ -234,9 +234,9 @@ static snd_pcm_sframes_t snd_pcm_plugin_forward(snd_pcm_t *pcm, snd_pcm_uframes_
|
|
||||||
{
|
|
||||||
snd_pcm_plugin_t *plugin = pcm->private_data;
|
|
||||||
snd_pcm_sframes_t n = snd_pcm_mmap_avail(pcm);
|
|
||||||
- snd_pcm_uframes_t sframes;
|
|
||||||
+ snd_pcm_sframes_t sframes;
|
|
||||||
|
|
||||||
- if ((snd_pcm_uframes_t)n > frames)
|
|
||||||
+ if ((snd_pcm_uframes_t)n < frames)
|
|
||||||
frames = n;
|
|
||||||
if (frames == 0)
|
|
||||||
return 0;
|
|
||||||
@@ -246,8 +246,8 @@ static snd_pcm_sframes_t snd_pcm_plugin_forward(snd_pcm_t *pcm, snd_pcm_uframes_
|
|
||||||
else
|
|
||||||
sframes = frames;
|
|
||||||
snd_atomic_write_begin(&plugin->watom);
|
|
||||||
- sframes = INTERNAL(snd_pcm_forward)(plugin->gen.slave, (snd_pcm_uframes_t) sframes);
|
|
||||||
- if ((snd_pcm_sframes_t) sframes < 0) {
|
|
||||||
+ sframes = INTERNAL(snd_pcm_forward)(plugin->gen.slave, sframes);
|
|
||||||
+ if (sframes < 0) {
|
|
||||||
snd_atomic_write_end(&plugin->watom);
|
|
||||||
return sframes;
|
|
||||||
}
|
|
||||||
@@ -255,7 +255,7 @@ static snd_pcm_sframes_t snd_pcm_plugin_forward(snd_pcm_t *pcm, snd_pcm_uframes_
|
|
||||||
frames = plugin->client_frames(pcm, sframes);
|
|
||||||
snd_pcm_mmap_appl_forward(pcm, (snd_pcm_uframes_t) frames);
|
|
||||||
snd_atomic_write_end(&plugin->watom);
|
|
||||||
- return n;
|
|
||||||
+ return (snd_pcm_sframes_t) frames;
|
|
||||||
}
|
|
||||||
|
|
||||||
static snd_pcm_sframes_t snd_pcm_plugin_write_areas(snd_pcm_t *pcm,
|
|
||||||
diff --git a/src/pcm/pcm_softvol.c b/src/pcm/pcm_softvol.c
|
|
||||||
index 7af7f40..eee6424 100644
|
|
||||||
--- a/src/pcm/pcm_softvol.c
|
|
||||||
+++ b/src/pcm/pcm_softvol.c
|
|
||||||
@@ -275,9 +275,15 @@ static void softvol_convert_stereo_vol(snd_pcm_softvol_t *svol,
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
- vol[0] = svol->dB_value[svol->cur_vol[0]];
|
|
||||||
- vol[1] = svol->dB_value[svol->cur_vol[1]];
|
|
||||||
- vol_c = svol->dB_value[(svol->cur_vol[0] + svol->cur_vol[1]) / 2];
|
|
||||||
+ if (svol->max_val == 1) {
|
|
||||||
+ vol[0] = svol->cur_vol[0] ? 0xffff : 0;
|
|
||||||
+ vol[1] = svol->cur_vol[1] ? 0xffff : 0;
|
|
||||||
+ vol_c = vol[0] | vol[1];
|
|
||||||
+ } else {
|
|
||||||
+ vol[0] = svol->dB_value[svol->cur_vol[0]];
|
|
||||||
+ vol[1] = svol->dB_value[svol->cur_vol[1]];
|
|
||||||
+ vol_c = svol->dB_value[(svol->cur_vol[0] + svol->cur_vol[1]) / 2];
|
|
||||||
+ }
|
|
||||||
switch (svol->sformat) {
|
|
||||||
case SND_PCM_FORMAT_S16_LE:
|
|
||||||
case SND_PCM_FORMAT_S16_BE:
|
|
||||||
@@ -325,7 +331,10 @@ static void softvol_convert_mono_vol(snd_pcm_softvol_t *svol,
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
- vol_scale = svol->dB_value[svol->cur_vol[0]];
|
|
||||||
+ if (svol->max_val == 1)
|
|
||||||
+ vol_scale = svol->cur_vol[0] ? 0xffff : 0;
|
|
||||||
+ else
|
|
||||||
+ vol_scale = svol->dB_value[svol->cur_vol[0]];
|
|
||||||
switch (svol->sformat) {
|
|
||||||
case SND_PCM_FORMAT_S16_LE:
|
|
||||||
case SND_PCM_FORMAT_S16_BE:
|
|
||||||
@@ -569,9 +578,13 @@ static void snd_pcm_softvol_dump(snd_pcm_t *pcm, snd_output_t *out)
|
|
||||||
snd_pcm_softvol_t *svol = pcm->private_data;
|
|
||||||
snd_output_printf(out, "Soft volume PCM\n");
|
|
||||||
snd_output_printf(out, "Control: %s\n", svol->elem.id.name);
|
|
||||||
- snd_output_printf(out, "min_dB: %g\n", svol->min_dB);
|
|
||||||
- snd_output_printf(out, "max_dB: %g\n", svol->max_dB);
|
|
||||||
- snd_output_printf(out, "resolution: %d\n", svol->max_val + 1);
|
|
||||||
+ if (svol->max_val == 1)
|
|
||||||
+ snd_output_printf(out, "boolean\n");
|
|
||||||
+ else {
|
|
||||||
+ snd_output_printf(out, "min_dB: %g\n", svol->min_dB);
|
|
||||||
+ snd_output_printf(out, "max_dB: %g\n", svol->max_dB);
|
|
||||||
+ snd_output_printf(out, "resolution: %d\n", svol->max_val + 1);
|
|
||||||
+ }
|
|
||||||
if (pcm->setup) {
|
|
||||||
snd_output_printf(out, "Its setup is:\n");
|
|
||||||
snd_pcm_dump_setup(pcm, out);
|
|
||||||
@@ -596,13 +609,21 @@ static int add_user_ctl(snd_pcm_softvol_t *svol, snd_ctl_elem_info_t *cinfo, int
|
|
||||||
int i;
|
|
||||||
unsigned int def_val;
|
|
||||||
|
|
||||||
- err = snd_ctl_elem_add_integer(svol->ctl, &cinfo->id, count, 0, svol->max_val, 0);
|
|
||||||
+ if (svol->max_val == 1)
|
|
||||||
+ err = snd_ctl_elem_add_boolean(svol->ctl, &cinfo->id, count);
|
|
||||||
+ else
|
|
||||||
+ err = snd_ctl_elem_add_integer(svol->ctl, &cinfo->id, count,
|
|
||||||
+ 0, svol->max_val, 0);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
- add_tlv_info(svol, cinfo);
|
|
||||||
- /* set zero dB value as default, or max_val if
|
|
||||||
- there is no 0 dB setting */
|
|
||||||
- def_val = svol->zero_dB_val ? svol->zero_dB_val : svol->max_val;
|
|
||||||
+ if (svol->max_val == 1)
|
|
||||||
+ def_val = 1;
|
|
||||||
+ else {
|
|
||||||
+ add_tlv_info(svol, cinfo);
|
|
||||||
+ /* set zero dB value as default, or max_val if
|
|
||||||
+ there is no 0 dB setting */
|
|
||||||
+ def_val = svol->zero_dB_val ? svol->zero_dB_val : svol->max_val;
|
|
||||||
+ }
|
|
||||||
for (i = 0; i < count; i++)
|
|
||||||
svol->elem.value.integer.value[i] = def_val;
|
|
||||||
return snd_ctl_elem_write(svol->ctl, &svol->elem);
|
|
||||||
@@ -647,7 +668,7 @@ static int softvol_load_control(snd_pcm_t *pcm, snd_pcm_softvol_t *svol,
|
|
||||||
svol->max_val = resolution - 1;
|
|
||||||
svol->min_dB = min_dB;
|
|
||||||
svol->max_dB = max_dB;
|
|
||||||
- if (svol->max_dB == ZERO_DB)
|
|
||||||
+ if (svol->max_val == 1 || svol->max_dB == ZERO_DB)
|
|
||||||
svol->zero_dB_val = svol->max_val;
|
|
||||||
else if (svol->max_dB < 0)
|
|
||||||
svol->zero_dB_val = 0; /* there is no 0 dB setting */
|
|
||||||
@@ -671,7 +692,8 @@ static int softvol_load_control(snd_pcm_t *pcm, snd_pcm_softvol_t *svol,
|
|
||||||
/* hardware control exists */
|
|
||||||
return 1; /* notify */
|
|
||||||
|
|
||||||
- } else if (cinfo->type != SND_CTL_ELEM_TYPE_INTEGER ||
|
|
||||||
+ } else if ((cinfo->type != SND_CTL_ELEM_TYPE_INTEGER &&
|
|
||||||
+ cinfo->type != SND_CTL_ELEM_TYPE_BOOLEAN) ||
|
|
||||||
cinfo->count != (unsigned int)cchannels ||
|
|
||||||
cinfo->value.integer.min != 0 ||
|
|
||||||
cinfo->value.integer.max != resolution - 1) {
|
|
||||||
@@ -684,7 +706,7 @@ static int softvol_load_control(snd_pcm_t *pcm, snd_pcm_softvol_t *svol,
|
|
||||||
SNDERR("Cannot add a control");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
- } else {
|
|
||||||
+ } else if (svol->max_val > 1) {
|
|
||||||
/* check TLV availability */
|
|
||||||
unsigned int tlv[4];
|
|
||||||
err = snd_ctl_elem_tlv_read(svol->ctl, &cinfo->id, tlv, sizeof(tlv));
|
|
||||||
@@ -693,6 +715,10 @@ static int softvol_load_control(snd_pcm_t *pcm, snd_pcm_softvol_t *svol,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (svol->max_val == 1)
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ /* set up dB table */
|
|
||||||
if (min_dB == PRESET_MIN_DB && max_dB == ZERO_DB && resolution == PRESET_RESOLUTION)
|
|
||||||
svol->dB_value = preset_dB_value;
|
|
||||||
else {
|
|
||||||
@@ -863,6 +889,7 @@ pcm.name {
|
|
||||||
[min_dB REAL] # minimal dB value (default: -51.0)
|
|
||||||
[max_dB REAL] # maximal dB value (default: 0.0)
|
|
||||||
[resolution INT] # resolution (default: 256)
|
|
||||||
+ # resolution = 2 means a mute switch
|
|
||||||
}
|
|
||||||
\endcode
|
|
||||||
|
|
||||||
@@ -965,7 +992,7 @@ int _snd_pcm_softvol_open(snd_pcm_t **pcmp, const char *name,
|
|
||||||
MAX_DB_UPPER_LIMIT);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
- if (resolution < 0 || resolution > 1024) {
|
|
||||||
+ if (resolution <= 1 || resolution > 1024) {
|
|
||||||
SNDERR("Invalid resolution value %d", resolution);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
13
alsa.changes
13
alsa.changes
@ -1,3 +1,16 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Aug 18 18:04:56 CEST 2008 - mrueckert@suse.de
|
||||||
|
|
||||||
|
- remove outdated options in the fillup_and_insserv call
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Aug 18 16:35:04 CEST 2008 - tiwai@suse.de
|
||||||
|
|
||||||
|
- fixed required-stop of joystick init script
|
||||||
|
- remove obsolete joystick control parameters from sysconfig and
|
||||||
|
init script
|
||||||
|
- updated to alsa-lib 1.0.17a -- just including previous fixes
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Aug 6 15:32:54 CEST 2008 - tiwai@suse.de
|
Wed Aug 6 15:32:54 CEST 2008 - tiwai@suse.de
|
||||||
|
|
||||||
|
21
alsa.spec
21
alsa.spec
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# spec file for package alsa (Version 1.0.17)
|
# spec file for package alsa (Version 1.0.17a)
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
Name: alsa
|
Name: alsa
|
||||||
BuildRequires: doxygen
|
BuildRequires: doxygen
|
||||||
%define package_version 1.0.17
|
%define package_version 1.0.17a
|
||||||
License: GPL v2 or later
|
License: GPL v2 or later
|
||||||
Group: System/Libraries
|
Group: System/Libraries
|
||||||
Requires: alsa-utils
|
Requires: alsa-utils
|
||||||
@ -28,8 +28,8 @@ Recommends: alsa-plugins alsa-oss
|
|||||||
PreReq: %insserv_prereq %fillup_prereq
|
PreReq: %insserv_prereq %fillup_prereq
|
||||||
AutoReqProv: on
|
AutoReqProv: on
|
||||||
Summary: Advanced Linux Sound Architecture
|
Summary: Advanced Linux Sound Architecture
|
||||||
Version: 1.0.17
|
Version: 1.0.17a
|
||||||
Release: 10
|
Release: 1
|
||||||
Source: ftp://ftp.alsa-project.org/pub/lib/alsa-lib-%{package_version}.tar.bz2
|
Source: ftp://ftp.alsa-project.org/pub/lib/alsa-lib-%{package_version}.tar.bz2
|
||||||
Source8: 40-alsa.rules
|
Source8: 40-alsa.rules
|
||||||
Source11: alsasound
|
Source11: alsasound
|
||||||
@ -45,7 +45,7 @@ Source31: all_notes_off.bin
|
|||||||
Source32: all_notes_off.mid
|
Source32: all_notes_off.mid
|
||||||
Source33: alsa-info.sh
|
Source33: alsa-info.sh
|
||||||
Source34: alsa-init.sh
|
Source34: alsa-init.sh
|
||||||
Patch: alsa-lib-git-fixes.diff
|
# Patch: alsa-lib-git-fixes.diff
|
||||||
Url: http://www.alsa-project.org/
|
Url: http://www.alsa-project.org/
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ Authors:
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n alsa-lib-%{package_version}
|
%setup -q -n alsa-lib-%{package_version}
|
||||||
%patch -p1
|
# %patch -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# build alsa-lib
|
# build alsa-lib
|
||||||
@ -196,7 +196,7 @@ if [ -f /etc/sysconfig/sound ]; then
|
|||||||
sed -i -e s/LOAD_ALSA_SEQ/LOAD_SEQUENCER/g /etc/sysconfig/sound
|
sed -i -e s/LOAD_ALSA_SEQ/LOAD_SEQUENCER/g /etc/sysconfig/sound
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
%{fillup_and_insserv -nsy sound alsasound START_ALSA}
|
%{fillup_and_insserv -ny sound alsasound}
|
||||||
%{fillup_and_insserv -n joystick joystick}
|
%{fillup_and_insserv -n joystick joystick}
|
||||||
if [ -f /bin/rpm.bin -a -f /bin/rpm.sh -a -f /bin/uname.sh -a -f /bin/uname.bin ]; then
|
if [ -f /bin/rpm.bin -a -f /bin/rpm.sh -a -f /bin/uname.sh -a -f /bin/uname.bin ]; then
|
||||||
# do nothing in autobuild environment
|
# do nothing in autobuild environment
|
||||||
@ -259,6 +259,13 @@ exit 0
|
|||||||
%{_datadir}/alsa
|
%{_datadir}/alsa
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Aug 18 2008 mrueckert@suse.de
|
||||||
|
- remove outdated options in the fillup_and_insserv call
|
||||||
|
* Mon Aug 18 2008 tiwai@suse.de
|
||||||
|
- fixed required-stop of joystick init script
|
||||||
|
- remove obsolete joystick control parameters from sysconfig and
|
||||||
|
init script
|
||||||
|
- updated to alsa-lib 1.0.17a -- just including previous fixes
|
||||||
* Wed Aug 06 2008 tiwai@suse.de
|
* Wed Aug 06 2008 tiwai@suse.de
|
||||||
- fix the detection of non-interleaved format in dmix code
|
- fix the detection of non-interleaved format in dmix code
|
||||||
- fix the detection of old timer tread support in dmix
|
- fix the detection of old timer tread support in dmix
|
||||||
|
23
joystick
23
joystick
@ -8,7 +8,7 @@
|
|||||||
### BEGIN INIT INFO
|
### BEGIN INIT INFO
|
||||||
# Provides: joystick
|
# Provides: joystick
|
||||||
# Required-Start: alsasound
|
# Required-Start: alsasound
|
||||||
# Required-Stop:
|
# Required-Stop: alsasound
|
||||||
# Default-Start: 2 3 5
|
# Default-Start: 2 3 5
|
||||||
# Default-Stop:
|
# Default-Stop:
|
||||||
# Short-Description: Set up analog josysticks
|
# Short-Description: Set up analog josysticks
|
||||||
@ -35,19 +35,6 @@ function start () {
|
|||||||
|
|
||||||
/sbin/modprobe joydev
|
/sbin/modprobe joydev
|
||||||
for js in 0 1 2 3; do
|
for js in 0 1 2 3; do
|
||||||
# configure joystick port (if necessary)
|
|
||||||
eval jsport=\$JOYSTICK_CONTROL_PORT_$js
|
|
||||||
if [ -n "$jsport" ]; then
|
|
||||||
$alsactl set $js card:"Joystick Address" "port $jsport"
|
|
||||||
fi
|
|
||||||
# activate joystick (if necessary)
|
|
||||||
eval jsctrl=\$JOYSTICK_CONTROL_$js
|
|
||||||
if [ -n "$jsctrl" -a "$jsctrl" != no ]; then
|
|
||||||
if [ "$jsctrl" = yes ]; then
|
|
||||||
jsctrl="Joystick"
|
|
||||||
fi
|
|
||||||
$alsactl set $js card:"$jsctrl" true
|
|
||||||
fi
|
|
||||||
# load gameport module
|
# load gameport module
|
||||||
eval jsmod=\$GAMEPORT_MODULE_$js
|
eval jsmod=\$GAMEPORT_MODULE_$js
|
||||||
if [ -n "$jsmod" -a "$jsmod" != off ]; then
|
if [ -n "$jsmod" -a "$jsmod" != off ]; then
|
||||||
@ -64,14 +51,6 @@ function start () {
|
|||||||
|
|
||||||
function stop () {
|
function stop () {
|
||||||
for js in 0 1 2 3; do
|
for js in 0 1 2 3; do
|
||||||
# deactivate joystick (if necessary)
|
|
||||||
eval jsctrl=\$JOYSTICK_CONTROL_$js
|
|
||||||
if [ -n "$jsctrl" -a "$jsctrl" != no ]; then
|
|
||||||
if [ "$jsctrl" = yes ]; then
|
|
||||||
jsctrl="Joystick"
|
|
||||||
fi
|
|
||||||
$alsactl set $js card:"$jsctrl" false
|
|
||||||
fi
|
|
||||||
# remove gameport module
|
# remove gameport module
|
||||||
eval jsmod=\$GAMEPORT_MODULE_$js
|
eval jsmod=\$GAMEPORT_MODULE_$js
|
||||||
if [ -n "$jsmod" -a "$jsmod" != off ]; then
|
if [ -n "$jsmod" -a "$jsmod" != off ]; then
|
||||||
|
@ -33,25 +33,3 @@ JOYSTICK_MODULE_OPTION_0=""
|
|||||||
JOYSTICK_MODULE_OPTION_1=""
|
JOYSTICK_MODULE_OPTION_1=""
|
||||||
JOYSTICK_MODULE_OPTION_2=""
|
JOYSTICK_MODULE_OPTION_2=""
|
||||||
JOYSTICK_MODULE_OPTION_3=""
|
JOYSTICK_MODULE_OPTION_3=""
|
||||||
|
|
||||||
## Type: string
|
|
||||||
## Default: ""
|
|
||||||
#
|
|
||||||
# Control name of sound driver to activate (via alsactl)
|
|
||||||
# e.g. "yes" (alias "Joystick") or "Joystick Enable"
|
|
||||||
#
|
|
||||||
JOYSTICK_CONTROL_0=""
|
|
||||||
JOYSTICK_CONTROL_1=""
|
|
||||||
JOYSTICK_CONTROL_2=""
|
|
||||||
JOYSTICK_CONTROL_3=""
|
|
||||||
|
|
||||||
## Type: string
|
|
||||||
## Default: ""
|
|
||||||
#
|
|
||||||
# Port to be used (via alsactl)
|
|
||||||
# Some soundcard like ens1371 needs the port address (typically 0x200)
|
|
||||||
#
|
|
||||||
JOYSTICK_CONTROL_PORT_0=""
|
|
||||||
JOYSTICK_CONTROL_PORT_1=""
|
|
||||||
JOYSTICK_CONTROL_PORT_2=""
|
|
||||||
JOYSTICK_CONTROL_PORT_3=""
|
|
||||||
|
Loading…
Reference in New Issue
Block a user