chiark
/
gitweb
/
~mdw
/
disorder
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
d19ccd7
)
sort of works on macos
author
Richard Kettlewell
<rjk@greenend.org.uk>
Mon, 17 Sep 2007 18:11:35 +0000
(19:11 +0100)
committer
Richard Kettlewell
<rjk@greenend.org.uk>
Mon, 17 Sep 2007 18:11:35 +0000
(19:11 +0100)
clients/playrtp.c
patch
|
blob
|
blame
|
history
diff --git
a/clients/playrtp.c
b/clients/playrtp.c
index 68926e6d84e6b8b4a4d77c2e7b4156c421269f62..bf96e84285906267fe54631b7dc6fe21eb47a32b 100644
(file)
--- a/
clients/playrtp.c
+++ b/
clients/playrtp.c
@@
-218,7
+218,7
@@
static void *listen_thread(void attribute((unused)) *arg) {
{
size_t i;
{
size_t i;
- for(i = 0; i < p->nsamples; ++
n
)
+ for(i = 0; i < p->nsamples; ++
i
)
p->samples_float[i] = (int16_t)ntohs(samples[i]) * (0.5f / 32767);
}
#else
p->samples_float[i] = (int16_t)ntohs(samples[i]) * (0.5f / 32767);
}
#else
@@
-288,13
+288,14
@@
static OSStatus adioproc
if(le(packet_end, next_timestamp)) {
/* This packet is in the past */
info("dropping buffered past packet %"PRIx32" < %"PRIx32,
if(le(packet_end, next_timestamp)) {
/* This packet is in the past */
info("dropping buffered past packet %"PRIx32" < %"PRIx32,
- packets->timestamp, next_timestamp);
+ packet_start, next_timestamp);
+ drop_first_packet();
continue;
}
if(ge(next_timestamp, packet_start)
&& lt(next_timestamp, packet_end)) {
/* This packet is suitable */
continue;
}
if(ge(next_timestamp, packet_start)
&& lt(next_timestamp, packet_end)) {
/* This packet is suitable */
- const uint32_t offset = next_timestamp - packet
s->timestamp
;
+ const uint32_t offset = next_timestamp - packet
_start
;
uint32_t samples_available = packet_end - next_timestamp;
if(samples_available > samplesOutLeft)
samples_available = samplesOutLeft;
uint32_t samples_available = packet_end - next_timestamp;
if(samples_available > samplesOutLeft)
samples_available = samplesOutLeft;
@@
-303,6
+304,7
@@
static OSStatus adioproc
samples_available * sizeof(float));
samplesOut += samples_available;
next_timestamp += samples_available;
samples_available * sizeof(float));
samplesOut += samples_available;
next_timestamp += samples_available;
+ samplesOutLeft -= samples_available;
if(ge(next_timestamp, packet_end))
drop_first_packet();
continue;
if(ge(next_timestamp, packet_end))
drop_first_packet();
continue;
@@
-316,6
+318,7
@@
static OSStatus adioproc
if(samples_available > samplesOutLeft)
samples_available = samplesOutLeft;
if(samples_available > samplesOutLeft)
samples_available = samplesOutLeft;
+ info("infill by %"PRIu32, samples_available);
/* Convniently the buffer is 0 to start with */
next_timestamp += samples_available;
samplesOut += samples_available;
/* Convniently the buffer is 0 to start with */
next_timestamp += samples_available;
samplesOut += samples_available;
@@
-323,6
+326,7
@@
static OSStatus adioproc
/* TODO log infill */
} else {
/* There's no next packet at all */
/* TODO log infill */
} else {
/* There's no next packet at all */
+ info("infilled by %zu", samplesOutLeft);
next_timestamp += samplesOutLeft;
samplesOut += samplesOutLeft;
samplesOutLeft = 0;
next_timestamp += samplesOutLeft;
samplesOut += samplesOutLeft;
samplesOutLeft = 0;
@@
-605,9
+609,13
@@
static void play_rtp(void) {
pthread_mutex_lock(&lock);
for(;;) {
/* Wait for the buffer to fill up a bit */
pthread_mutex_lock(&lock);
for(;;) {
/* Wait for the buffer to fill up a bit */
+ info("Buffering...");
while(nsamples < readahead)
pthread_cond_wait(&cond, &lock);
/* Start playing now */
while(nsamples < readahead)
pthread_cond_wait(&cond, &lock);
/* Start playing now */
+ info("Playing...");
+ next_timestamp = packets->timestamp;
+ active = 1;
status = AudioDeviceStart(adid, adioproc);
if(status)
fatal(0, "AudioDeviceStart: %d", (int)status);
status = AudioDeviceStart(adid, adioproc);
if(status)
fatal(0, "AudioDeviceStart: %d", (int)status);
@@
-618,6
+626,7
@@
static void play_rtp(void) {
status = AudioDeviceStop(adid, adioproc);
if(status)
fatal(0, "AudioDeviceStop: %d", (int)status);
status = AudioDeviceStop(adid, adioproc);
if(status)
fatal(0, "AudioDeviceStop: %d", (int)status);
+ active = 0;
/* Go back round */
}
}
/* Go back round */
}
}