summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Sorg <jay.sorg@gmail.com>2014-11-02 20:45:14 -0800
committerJay Sorg <jay.sorg@gmail.com>2014-11-02 20:45:14 -0800
commit290bafe173133eaf9e1ded32b3fe70f24db632ba (patch)
tree81ca5537dadd896355658833216aabf9f29da9d3
parentdd00c8691c11a1b98e18a2220fc93782a40c6f7b (diff)
downloadxrdp-proprietary-290bafe173133eaf9e1ded32b3fe70f24db632ba.tar.gz
xrdp-proprietary-290bafe173133eaf9e1ded32b3fe70f24db632ba.zip
pulse: fix for recording delay
-rw-r--r--sesman/chansrv/pulse/module-xrdp-source.c38
1 files changed, 32 insertions, 6 deletions
diff --git a/sesman/chansrv/pulse/module-xrdp-source.c b/sesman/chansrv/pulse/module-xrdp-source.c
index 1c03b069..3d73fd03 100644
--- a/sesman/chansrv/pulse/module-xrdp-source.c
+++ b/sesman/chansrv/pulse/module-xrdp-source.c
@@ -71,7 +71,7 @@ PA_MODULE_USAGE(
#define DEFAULT_SOURCE_NAME "xrdp-source"
#define DEFAULT_LATENCY_TIME 10
-#define MAX_LATENCY_USEC (PA_USEC_PER_SEC * 2)
+#define MAX_LATENCY_USEC 1000
#define CHANSRV_PORT_STR "/tmp/.xrdp/xrdp_chansrv_audio_in_socket_%d"
struct userdata {
@@ -144,6 +144,32 @@ static void source_update_requested_latency_cb(pa_source *s) {
u->block_usec = pa_source_get_requested_latency_within_thread(s);
}
+static int lsend(int fd, char *data, int bytes) {
+ int sent = 0;
+ int error;
+ while (sent < bytes) {
+ error = send(fd, data + sent, bytes - sent, 0);
+ if (error < 1) {
+ return error;
+ }
+ sent += error;
+ }
+ return sent;
+}
+
+static int lrecv(int fd, char *data, int bytes) {
+ int recved = 0;
+ int error;
+ while (recved < bytes) {
+ error = recv(fd, data + recved, bytes - recved, 0);
+ if (error < 1) {
+ return error;
+ }
+ recved += error;
+ }
+ return recved;
+}
+
static int data_get(struct userdata *u, pa_memchunk *chunk) {
int fd;
@@ -190,7 +216,7 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
buf[9] = 0;
buf[10] = 0;
- send(u->fd, buf, 11, 0);
+ lsend(u->fd, buf, 11);
u->want_src_data = 1;
pa_log_debug("###### started recording");
}
@@ -208,10 +234,10 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
buf[9] = (unsigned char) chunk->length;
buf[10] = (unsigned char) ((chunk->length >> 8) & 0xff);
- send(u->fd, buf, 11, 0);
+ lsend(u->fd, buf, 11);
/* read length of data available */
- recv(u->fd, ubuf, 2, 0);
+ lrecv(u->fd, (char *) ubuf, 2);
bytes = ((ubuf[1] << 8) & 0xff00) | (ubuf[0] & 0xff);
if (bytes == 0) {
@@ -220,7 +246,7 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
}
/* get data */
- bytes = recv(u->fd, data, bytes, 0);
+ bytes = lrecv(u->fd, data, bytes);
pa_memblock_release(chunk->memblock);
@@ -272,7 +298,7 @@ static void thread_func(void *userdata) {
buf[9] = 0;
buf[10] = 0;
- send(u->fd, buf, 11, 0);
+ lsend(u->fd, buf, 11);
u->want_src_data = 0;
pa_log_debug("###### stopped recording");
}