openbsd-ports/audio/mp3blaster/patches/patch-mpegsound_oggplayer_cc
jakemsr 44cb065cc8 - update to mp3blaster-3.2.5
- 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@
2010-01-11 07:51:26 +00:00

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);