summaryrefslogtreecommitdiff
path: root/sys/src/9
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2014-03-19 21:15:43 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2014-03-19 21:15:43 +0100
commita6f3ba79c2b50bb6f946a7c5904859971dee6908 (patch)
tree98310e0b19f2b536cd9204c377856db9ed6635c9 /sys/src/9
parent90148cbe87e347d9cc9a86d11e76ba1615291805 (diff)
audiohda: start playback only when we have a minimum delay buffered
Diffstat (limited to 'sys/src/9')
-rw-r--r--sys/src/9/pc/audiohda.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/sys/src/9/pc/audiohda.c b/sys/src/9/pc/audiohda.c
index b4862d1cf..8bcf6b975 100644
--- a/sys/src/9/pc/audiohda.c
+++ b/sys/src/9/pc/audiohda.c
@@ -1319,9 +1319,12 @@ hdabuffered(Audio *adev)
static void
hdakick(Ctlr *ctlr)
{
+ int delay;
+
if(ctlr->sout.active)
return;
- if(buffered(&ctlr->sout.ring) > Blocksize)
+ delay = ctlr->adev->delay*BytesPerSample;
+ if(buffered(&ctlr->sout.ring) >= delay)
streamstart(ctlr, &ctlr->sout);
}
@@ -1486,7 +1489,13 @@ hdasetvol(Audio *adev, int x, int a[2])
adev->speed = a[0];
break;
case Vdelay:
- adev->delay = a[0];
+ if(a[0] < Blocksize/BytesPerSample) {
+ adev->delay = Blocksize/BytesPerSample;
+ } else if(a[0] > (ctlr->sout.ring.nbuf/BytesPerSample)-1) {
+ adev->delay = (ctlr->sout.ring.nbuf/BytesPerSample)-1;
+ } else {
+ adev->delay = a[0];
+ }
break;
}
return 0;