bool VQAPlayer::open() { _s = _vm->getResourceStream(_name); if (!_s) { return false; } if (!_decoder.loadStream(_s)) { delete _s; _s = nullptr; return false; } _hasAudio = _decoder.hasAudio(); if (_hasAudio) { _audioStream = Audio::makeQueuingAudioStream(_decoder.frequency(), false); } _repeatsCount = 0; _loop = -1; _frame = -1; _frameBegin = -1; _frameEnd = _decoder.numFrames() - 1; _frameEndQueued = -1; _repeatsCountQueued = -1; if (_loopInitial >= 0) { setLoop(_loopInitial, _repeatsCountInitial, kLoopSetModeImmediate, nullptr, nullptr); } else { _frameNext = 0; setBeginAndEndFrame(0, _frameEnd, 0, kLoopSetModeJustStart, nullptr, nullptr); } return true; }
bool VQAPlayer::setLoop(int loop, int repeatsCount, int loopSetMode, void (*callback)(void *, int, int), void *callbackData) { debug("VQAPlayer::setBeginAndEndFrameFromLoop(%i, %i, %i), streamLoaded = %i", loop, repeatsCount, loopSetMode, _s != nullptr); if (_s == nullptr) { _loopInitial = loop; _repeatsCountInitial = repeatsCount; return true; } int begin, end; if (!_decoder.getLoopBeginAndEndFrame(loop, &begin, &end)) { return false; } if (setBeginAndEndFrame(begin, end, repeatsCount, loopSetMode, callback, callbackData)) { _loop = loop; return true; } return false; }