mirror of
https://github.com/libretro/scummvm.git
synced 2025-04-09 10:11:23 +00:00
AUDIO: Keep packetized MP3 stream from ending prematurely
This fixes the audio in the intro AVI movie for German Fullpipe.
This commit is contained in:
parent
1670cb035f
commit
579c024653
@ -438,6 +438,7 @@ PacketizedMP3Stream::PacketizedMP3Stream(uint channels, uint rate) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
PacketizedMP3Stream::~PacketizedMP3Stream() {
|
PacketizedMP3Stream::~PacketizedMP3Stream() {
|
||||||
|
Common::StackLock lock(_mutex);
|
||||||
while (!_queue.empty()) {
|
while (!_queue.empty()) {
|
||||||
delete _queue.front();
|
delete _queue.front();
|
||||||
_queue.pop();
|
_queue.pop();
|
||||||
@ -447,12 +448,13 @@ PacketizedMP3Stream::~PacketizedMP3Stream() {
|
|||||||
int PacketizedMP3Stream::readBuffer(int16 *buffer, const int numSamples) {
|
int PacketizedMP3Stream::readBuffer(int16 *buffer, const int numSamples) {
|
||||||
int samples = 0;
|
int samples = 0;
|
||||||
|
|
||||||
while (samples < numSamples) {
|
|
||||||
Common::StackLock lock(_mutex);
|
Common::StackLock lock(_mutex);
|
||||||
|
while (samples < numSamples) {
|
||||||
// Empty? Bail out for now
|
// Empty? Bail out for now, and mark the stream as ended
|
||||||
if (_queue.empty())
|
if (_queue.empty()) {
|
||||||
|
_state = MP3_STATE_EOS;
|
||||||
return samples;
|
return samples;
|
||||||
|
}
|
||||||
|
|
||||||
Common::SeekableReadStream *packet = _queue.front();
|
Common::SeekableReadStream *packet = _queue.front();
|
||||||
|
|
||||||
@ -473,6 +475,12 @@ int PacketizedMP3Stream::readBuffer(int16 *buffer, const int numSamples) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This will happen if the audio runs out just as the last sample is
|
||||||
|
// decoded. But there may still be more audio queued up.
|
||||||
|
if (_state == MP3_STATE_EOS && !_queue.empty()) {
|
||||||
|
_state = MP3_STATE_READY;
|
||||||
|
}
|
||||||
|
|
||||||
return samples;
|
return samples;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -492,6 +500,12 @@ void PacketizedMP3Stream::queuePacket(Common::SeekableReadStream *packet) {
|
|||||||
Common::StackLock lock(_mutex);
|
Common::StackLock lock(_mutex);
|
||||||
assert(!_finished);
|
assert(!_finished);
|
||||||
_queue.push(packet);
|
_queue.push(packet);
|
||||||
|
|
||||||
|
// If the audio had finished (buffer underrun?), there is more to
|
||||||
|
// decode now.
|
||||||
|
if (_state == MP3_STATE_EOS) {
|
||||||
|
_state = MP3_STATE_READY;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PacketizedMP3Stream::finish() {
|
void PacketizedMP3Stream::finish() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user