mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-31 07:53:36 +00:00
GROOVIE: Do not play audio in V2 games when only one frame is shown
This commit is contained in:
parent
0fd16ef39f
commit
9f2c3d794e
@ -174,7 +174,7 @@ bool ROQPlayer::playFrameInternal() {
|
||||
|
||||
// Wait until the current frame can be shown
|
||||
// Don't wait if we're just showing one frame
|
||||
if (!(_alpha && !_flagTwo))
|
||||
if (!playFirstFrame())
|
||||
waitFrame();
|
||||
|
||||
if (_dirty) {
|
||||
@ -193,7 +193,7 @@ bool ROQPlayer::playFrameInternal() {
|
||||
|
||||
// Report the end of the video if we reached the end of the file or if we
|
||||
// just wanted to play one frame.
|
||||
return _file->eos() || (_alpha && !_flagTwo);
|
||||
return _file->eos() || playFirstFrame();
|
||||
}
|
||||
|
||||
bool ROQPlayer::readBlockHeader(ROQBlockHeader &blockHeader) {
|
||||
@ -492,7 +492,7 @@ bool ROQPlayer::processBlockSoundMono(ROQBlockHeader &blockHeader) {
|
||||
}
|
||||
|
||||
// Initialize the audio stream if needed
|
||||
if (!_audioStream) {
|
||||
if (!_audioStream && !playFirstFrame()) {
|
||||
_audioStream = Audio::makeQueuingAudioStream(22050, false);
|
||||
Audio::SoundHandle sound_handle;
|
||||
g_system->getMixer()->playStream(Audio::Mixer::kPlainSoundType, &sound_handle, _audioStream);
|
||||
@ -521,7 +521,10 @@ bool ROQPlayer::processBlockSoundMono(ROQBlockHeader &blockHeader) {
|
||||
#ifdef SCUMM_LITTLE_ENDIAN
|
||||
flags |= Audio::FLAG_LITTLE_ENDIAN;
|
||||
#endif
|
||||
_audioStream->queueBuffer((byte *)buffer, blockHeader.size * 2, DisposeAfterUse::YES, flags);
|
||||
if (!playFirstFrame())
|
||||
_audioStream->queueBuffer((byte *)buffer, blockHeader.size * 2, DisposeAfterUse::YES, flags);
|
||||
else
|
||||
free(buffer);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -535,7 +538,7 @@ bool ROQPlayer::processBlockSoundStereo(ROQBlockHeader &blockHeader) {
|
||||
}
|
||||
|
||||
// Initialize the audio stream if needed
|
||||
if (!_audioStream) {
|
||||
if (!_audioStream && !playFirstFrame()) {
|
||||
_audioStream = Audio::makeQueuingAudioStream(22050, true);
|
||||
Audio::SoundHandle sound_handle;
|
||||
g_system->getMixer()->playStream(Audio::Mixer::kPlainSoundType, &sound_handle, _audioStream);
|
||||
@ -577,7 +580,10 @@ bool ROQPlayer::processBlockSoundStereo(ROQBlockHeader &blockHeader) {
|
||||
#ifdef SCUMM_LITTLE_ENDIAN
|
||||
flags |= Audio::FLAG_LITTLE_ENDIAN;
|
||||
#endif
|
||||
_audioStream->queueBuffer((byte *)buffer, blockHeader.size * 2, DisposeAfterUse::YES, flags);
|
||||
if (!playFirstFrame())
|
||||
_audioStream->queueBuffer((byte *)buffer, blockHeader.size * 2, DisposeAfterUse::YES, flags);
|
||||
else
|
||||
free(buffer);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -57,6 +57,7 @@ private:
|
||||
bool processBlockSoundMono(ROQBlockHeader &blockHeader);
|
||||
bool processBlockSoundStereo(ROQBlockHeader &blockHeader);
|
||||
bool processBlockAudioContainer(ROQBlockHeader &blockHeader);
|
||||
bool playFirstFrame() { return _alpha && !_flagTwo; }
|
||||
|
||||
void paint2(byte i, int destx, int desty);
|
||||
void paint4(byte i, int destx, int desty);
|
||||
|
Loading…
x
Reference in New Issue
Block a user