44cb065cc8
- add sndio audio to mp3blaster and splay programs - implement nmixer as a generic midi volume controller, that defaults to using the aucat:0 midi device - stop using multiple threads for mpeg decoding. they are poorly implmented, just spinning and using all available cpu cycles with feedback from naddy@ and ratchov@
49 lines
1.2 KiB
Plaintext
49 lines
1.2 KiB
Plaintext
$OpenBSD: patch-mpegsound_oggplayer_cc,v 1.2 2010/01/11 07:51:26 jakemsr Exp $
|
|
|
|
ov_read() can return less than asked for. get the full 4096 bytes
|
|
before continuing to save cycles and avoid confusion elsewhere.
|
|
|
|
--- mpegsound/oggplayer.cc.orig Tue Dec 22 05:08:01 2009
|
|
+++ mpegsound/oggplayer.cc Thu Dec 24 14:20:44 2009
|
|
@@ -18,7 +18,11 @@ Oggplayer::Oggplayer(audiodriver_t driver)
|
|
{
|
|
of = NULL;
|
|
wordsize = 2; //2 bytes
|
|
+#ifdef WORDS_BIGENDIAN
|
|
+ bigendian = 1;
|
|
+#else
|
|
bigendian = 0;
|
|
+#endif
|
|
signeddata = 1;
|
|
mono = 0;
|
|
downfreq = 0;
|
|
@@ -156,15 +160,23 @@ bool Oggplayer::playing()
|
|
bool Oggplayer::run(int sec)
|
|
{
|
|
int bitstream;
|
|
- long bytes_read = ov_read(of, soundbuf, 4096, bigendian, wordsize, signeddata,
|
|
- &bitstream);
|
|
|
|
- if (sec); //prevent warning
|
|
+ long bytes_read, ret;
|
|
|
|
- if (bytes_read < 0)
|
|
- return seterrorcode(SOUND_ERROR_BAD);
|
|
+ bytes_read = 0;
|
|
+ while (bytes_read < 4096) {
|
|
+ ret = ov_read(of, soundbuf + bytes_read, 4096 - bytes_read,
|
|
+ bigendian, wordsize, signeddata, &bitstream);
|
|
+ if (ret < 0)
|
|
+ return seterrorcode(SOUND_ERROR_BAD);
|
|
+ if (!ret)
|
|
+ break;
|
|
+ bytes_read += ret;
|
|
+ }
|
|
if (!bytes_read)
|
|
return seterrorcode(SOUND_ERROR_FINISH);
|
|
+
|
|
+ if (sec); //prevent warning
|
|
|
|
vorbis_info *vi = ov_info(of, bitstream);
|
|
|