diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-03-19 21:15:43 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-03-19 21:15:43 +0100 |
commit | a6f3ba79c2b50bb6f946a7c5904859971dee6908 (patch) | |
tree | 98310e0b19f2b536cd9204c377856db9ed6635c9 /sys/src/9 | |
parent | 90148cbe87e347d9cc9a86d11e76ba1615291805 (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.c | 13 |
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; |