-
Notifications
You must be signed in to change notification settings - Fork 0
/
alsa-lib_file_plugin.patch
71 lines (65 loc) · 2.26 KB
/
alsa-lib_file_plugin.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
--- alsa-lib-1.2.4/src/pcm/pcm_file.c 2020-10-19 09:45:13.000000000 +0000
+++ alsa-lib-1.2.4_new/src/pcm/pcm_file.c 2022-02-04 11:20:50.078415675 +0000
@@ -29,6 +29,7 @@
#include "bswap.h"
#include <ctype.h>
#include <string.h>
+#include <sys/ioctl.h>
#include "pcm_local.h"
#include "pcm_plugin.h"
@@ -646,12 +647,12 @@
snd_pcm_channel_area_t areas[pcm->channels];
snd_pcm_sframes_t frames;
- frames = _snd_pcm_readi(file->gen.slave, buffer, size);
- if (frames <= 0)
- return frames;
+// frames = _snd_pcm_readi(file->gen.slave, buffer, size);
+// if (frames <= 0)
+// return frames;
snd_pcm_areas_from_buf(pcm, areas, buffer);
- snd_pcm_file_areas_read_infile(pcm, areas, 0, frames);
+ frames = snd_pcm_bytes_to_frames(pcm, snd_pcm_file_areas_read_infile(pcm, areas, 0, size));
__snd_pcm_lock(pcm);
if (snd_pcm_file_add_frames(pcm, areas, 0, frames) < 0) {
__snd_pcm_unlock(pcm);
@@ -670,12 +671,12 @@
snd_pcm_channel_area_t areas[pcm->channels];
snd_pcm_sframes_t frames;
- frames = _snd_pcm_readn(file->gen.slave, bufs, size);
- if (frames <= 0)
- return frames;
+// frames = _snd_pcm_readn(file->gen.slave, bufs, size);
+// if (frames <= 0)
+// return frames;
snd_pcm_areas_from_bufs(pcm, areas, bufs);
- snd_pcm_file_areas_read_infile(pcm, areas, 0, frames);
+ frames = snd_pcm_bytes_to_frames(pcm, snd_pcm_file_areas_read_infile(pcm, areas, 0, size));
__snd_pcm_lock(pcm);
if (snd_pcm_file_add_frames(pcm, areas, 0, frames) < 0) {
__snd_pcm_unlock(pcm);
@@ -724,6 +725,12 @@
if (pcm->stream != SND_PCM_STREAM_CAPTURE)
return result;
+ int sz = 0;
+ ioctl(file->ifd, FIONREAD, &sz);
+ snd_pcm_uframes_t rframes = snd_pcm_bytes_to_frames(pcm, sz);
+ if (rframes <= *frames) *frames = rframes;
+ if (*frames == 0) return result;
+
/* user may run mmap_begin without mmap_commit multiple times in row */
if (file->ifmmap_overwritten)
return result;
--- alsa-lib-1.2.4/src/pcm/pcm_null.c 2020-10-19 09:45:13.000000000 +0000
+++ alsa-lib-1.2.4_new/src/pcm/pcm_null.c 2022-01-31 16:25:23.745773918 +0000
@@ -388,9 +388,9 @@
return -errno;
}
} else {
- fd = open("/dev/full", O_RDONLY);
+ fd = open("/dev/zero", O_RDONLY);
if (fd < 0) {
- SYSERR("Cannot open /dev/full");
+ SYSERR("Cannot open /dev/zero");
return -errno;
}
}