From caec6a8de96ecdad2bcc5522e4d40b80df4889b8 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 3 Jan 2017 22:37:30 -0800 Subject: CRYO: Get rid of HnmContext, refactoring --- engines/cryo/cryolib.h | 19 ---- engines/cryo/eden.cpp | 31 +++--- engines/cryo/eden.h | 1 - engines/cryo/video.cpp | 287 ++++++++++++++++++++++++------------------------- engines/cryo/video.h | 54 ++++++---- 5 files changed, 189 insertions(+), 203 deletions(-) diff --git a/engines/cryo/cryolib.h b/engines/cryo/cryolib.h index cad24020a2..849a78e284 100644 --- a/engines/cryo/cryolib.h +++ b/engines/cryo/cryolib.h @@ -117,25 +117,6 @@ struct HNMHeader { typedef struct HNMHeader HNMHeader; #pragma pack(pop) -struct hnm_t { - int _frameNum; - int _unused04; - Common::File *_file; - HNMHeader _header; - byte *tmpBuffer[2]; - byte *finalBuffer; - byte *_newFrameBuffer; - byte *_oldFrameBuffer; - byte *_readBuffer; - byte *_dataPtr; - color_t _palette[256]; - bool _canLoop; - int16 _unused896; - int16 _chunkId; - int _totalRead; -}; -typedef struct hnm_t hnm_t; - class Sound { private: int32 _headerOffset; diff --git a/engines/cryo/eden.cpp b/engines/cryo/eden.cpp index b129ab71d7..a2af07414f 100644 --- a/engines/cryo/eden.cpp +++ b/engines/cryo/eden.cpp @@ -110,7 +110,6 @@ EdenGame::EdenGame(CryoEngine *vm) : _vm(vm) { _hnmSoundChannel = nullptr; _voiceSound = nullptr; _view2 = _underSubtitlesView = _subtitlesView = _underBarsView = _mainView = _hnmView = nullptr; - _hnmContext = nullptr; _doubledScreen = false; _cirsorPanX = 0; _inventoryScrollDelay = 0; @@ -4741,8 +4740,8 @@ void EdenGame::openbigfile() { _bigfileHeader->_files[j]._flag = _bigfile.readByte(); } - _hnmContext = _vm->_video->resetInternals(); - _vm->_video->setFile(_hnmContext, &_bigfile); + _vm->_video->resetInternals(); + _vm->_video->setFile(&_bigfile); } void EdenGame::closebigfile() { @@ -4839,7 +4838,7 @@ void EdenGame::shnmfl(uint16 num) { int size = file->_size; int offs = file->_offs; debug("* Loading movie %d (%s) at 0x%X, %d bytes", num, file->_name.c_str(), (uint)offs, size); - _hnmContext->_file->seek(offs, SEEK_SET); + _vm->_video->_file->seek(offs, SEEK_SET); } int EdenGame::ssndfl(uint16 num) { @@ -6351,21 +6350,21 @@ void EdenGame::mouse() { ////// film.c // Original name: showfilm void EdenGame::showMovie(char arg1) { - _vm->_video->readHeader(_hnmContext); + _vm->_video->readHeader(); if (_vm->_video->_curVideoNum == 92) { // _hnmContext->_header._unusedFlag2 = 0; CHECKME: Useless? _hnmSoundChannel->setVolumeLeft(0); _hnmSoundChannel->setVolumeRight(0); } - if (_vm->_video->getVersion(_hnmContext) != 4) + if (_vm->_video->getVersion() != 4) return; bool playing = true; - _vm->_video->allocMemory(_hnmContext); - _hnmView = new View(_vm, _hnmContext->_header._width, _hnmContext->_header._height); + _vm->_video->allocMemory(); + _hnmView = new View(_vm, _vm->_video->_header._width, _vm->_video->_header._height); _hnmView->setSrcZoomValues(0, 0); - _hnmView->setDisplayZoomValues(_hnmContext->_header._width * 2, _hnmContext->_header._height * 2); + _hnmView->setDisplayZoomValues(_vm->_video->_header._width * 2, _vm->_video->_header._height * 2); _hnmView->centerIn(_vm->_screenView); _hnmViewBuf = _hnmView->_bufferPtr; if (arg1) { @@ -6374,12 +6373,12 @@ void EdenGame::showMovie(char arg1) { _hnmView->_normal._dstTop = _mainView->_normal._dstTop + 16; _hnmView->_zoom._dstTop = _mainView->_zoom._dstTop + 32; } - _vm->_video->setFinalBuffer(_hnmContext, _hnmView->_bufferPtr); + _vm->_video->setFinalBuffer(_hnmView->_bufferPtr); _hnmView->_doubled = _doubledScreen; do { - _hnmFrameNum = _vm->_video->getFrameNum(_hnmContext); - _vm->_video->waitLoop(_hnmContext); - playing = _vm->_video->nextElement(_hnmContext); + _hnmFrameNum = _vm->_video->getFrameNum(); + _vm->_video->waitLoop(); + playing = _vm->_video->nextElement(); if (_specialTextMode) handleHNMSubtitles(); else @@ -6411,7 +6410,7 @@ void EdenGame::showMovie(char arg1) { } } while (playing && !_videoCanceledFlag); delete _hnmView; - _vm->_video->deallocMemory(_hnmContext); + _vm->_video->deallocMemory(); } void EdenGame::playHNM(int16 num) { @@ -6436,8 +6435,8 @@ void EdenGame::playHNM(int16 num) { _showVideoSubtitle = false; _videoCanceledFlag = false; shnmfl(num); - _vm->_video->reset(_hnmContext); - _vm->_video->flushPreloadBuffer(_hnmContext); + _vm->_video->reset(); + _vm->_video->flushPreloadBuffer(); if (_needToFade) { fadeToBlack(4); clearScreen(); diff --git a/engines/cryo/eden.h b/engines/cryo/eden.h index d44f278209..3e5c506725 100644 --- a/engines/cryo/eden.h +++ b/engines/cryo/eden.h @@ -650,7 +650,6 @@ private: View *_underBarsView; View *_mainView; View *_hnmView; - hnm_t *_hnmContext; Common::Rect _underSubtitlesBackupRect; Common::Rect _underSubtitlesScreenRect; Common::Rect _underBottomBarBackupRect; diff --git a/engines/cryo/video.cpp b/engines/cryo/video.cpp index 15e341174e..1647c9d1d2 100644 --- a/engines/cryo/video.cpp +++ b/engines/cryo/video.cpp @@ -50,32 +50,27 @@ HnmPlayer::HnmPlayer(CryoEngine *vm) : _vm(vm) { } // Original name: CLHNM_New -hnm_t *HnmPlayer::resetInternals() { - - hnm_t *hnm = (hnm_t *)malloc(sizeof(*hnm)); - - hnm->_frameNum = 0; - hnm->_unused04 = 0; - hnm->_file = nullptr; - hnm->tmpBuffer[0] = nullptr; - hnm->tmpBuffer[1] = nullptr; - hnm->finalBuffer = nullptr; - hnm->_readBuffer = nullptr; - hnm->_unused896 = 0; - hnm->_totalRead = 0; +void HnmPlayer::resetInternals() { + _frameNum = 0; + _unused04 = 0; + _file = nullptr; + tmpBuffer[0] = nullptr; + tmpBuffer[1] = nullptr; + _finalBuffer = nullptr; + _readBuffer = nullptr; + _unused896 = 0; + _totalRead = 0; for (int i = 0; i < 256; i++) { - hnm->_palette[i].a = 0; - hnm->_palette[i].r = 0; - hnm->_palette[i].g = 0; - hnm->_palette[i].b = 0; + _palette[i].a = 0; + _palette[i].r = 0; + _palette[i].g = 0; + _palette[i].b = 0; } - - return hnm; } // Original name: CLHNM_SetFile -void HnmPlayer::setFile(hnm_t *hnm, Common::File *file) { - hnm->_file = file; +void HnmPlayer::setFile(Common::File *file) { + _file = file; } // Original name: CLHNM_SetupTimer @@ -90,10 +85,10 @@ void HnmPlayer::resetInternalTimer() { } // Original name: CLHNM_Reset -void HnmPlayer::reset(hnm_t *hnm) { - hnm->_frameNum = 0; - hnm->_unused04 = 0; - hnm->_totalRead = 0; +void HnmPlayer::reset() { + _frameNum = 0; + _unused04 = 0; + _totalRead = 0; _soundStarted = false; _pendingSounds = 0; resetInternalTimer(); @@ -111,7 +106,7 @@ void HnmPlayer::setForceZero2Black(bool forceblack) { } // Original name: CLHNM_WaitLoop -void HnmPlayer::waitLoop(hnm_t *hnm) { +void HnmPlayer::waitLoop() { _expectedFrameTime += _rate; _nextFrameTime = _expectedFrameTime - _timeDrift; if (_useSoundSync && _vm->_timerTicks > 1000.0 + _nextFrameTime) @@ -185,101 +180,102 @@ void HnmPlayer::decompADPCM(byte *buffer, int16 *output, int size) { } // Original name: CLHNM_ReadHeader -void HnmPlayer::readHeader(hnm_t *hnm) { - hnm->_header._signature = hnm->_file->readUint32BE(); - hnm->_header._unusedFlag1 = hnm->_file->readByte(); - hnm->_header._unusedFlag2 = hnm->_file->readByte(); - hnm->_header._unusedReserved = hnm->_file->readByte(); - hnm->_header._unusedBpp = hnm->_file->readByte(); - hnm->_header._width = hnm->_file->readUint16LE(); - hnm->_header._height = hnm->_file->readUint16LE(); - hnm->_header._unusedFileSize = hnm->_file->readSint32LE(); - hnm->_header._numbFrame = hnm->_file->readSint32LE(); - hnm->_header._unusedTableOffset = hnm->_file->readSint32LE(); - hnm->_header._unusedSpeed = hnm->_file->readSint16LE(); - hnm->_header._unusedMaxBuffer = hnm->_file->readSint16LE(); - hnm->_header._bufferSize = hnm->_file->readSint32LE(); - hnm->_header._unusedUnknown = hnm->_file->readSint16LE(); +void HnmPlayer::readHeader() { + _header._signature = _file->readUint32BE(); + _header._unusedFlag1 = _file->readByte(); + _header._unusedFlag2 = _file->readByte(); + _header._unusedReserved = _file->readByte(); + _header._unusedBpp = _file->readByte(); + _header._width = _file->readUint16LE(); + _header._height = _file->readUint16LE(); + _header._unusedFileSize = _file->readSint32LE(); + _header._numbFrame = _file->readSint32LE(); + _header._unusedTableOffset = _file->readSint32LE(); + _header._unusedSpeed = _file->readSint16LE(); + _header._unusedMaxBuffer = _file->readSint16LE(); + _header._bufferSize = _file->readSint32LE(); + _header._unusedUnknown = _file->readSint16LE(); for (int i = 0; i < 14; i++) - hnm->_header._unusedReserved2[i] = hnm->_file->readSByte(); + _header._unusedReserved2[i] = _file->readSByte(); for (int i = 0; i < 16; i++) - hnm->_header._unusedCopyright[i] = hnm->_file->readSByte(); + _header._unusedCopyright[i] = _file->readSByte(); - hnm->_header._bufferSize += 4096; //TODO: checkme + _header._bufferSize += 4096; //TODO: checkme } // Original name: CLHNM_GetVersion -int16 HnmPlayer::getVersion(hnm_t *hnm) { - if (hnm->_header._signature == MKTAG('H','N','M','4')) +int16 HnmPlayer::getVersion() { + if (_header._signature == MKTAG('H','N','M','4')) return 4; return -1; } // Original name: CLHNM_AllocMemory -void HnmPlayer::allocMemory(hnm_t *hnm) { - hnm->tmpBuffer[0] = (byte *)malloc(hnm->_header._bufferSize + 2); +void HnmPlayer::allocMemory() { +// TODO: rework this code + tmpBuffer[0] = (byte *)malloc(_header._bufferSize + 2); - if (!hnm->tmpBuffer[0]) + if (!tmpBuffer[0]) return; - hnm->tmpBuffer[1] = (byte *)malloc(hnm->_header._bufferSize + 2); + tmpBuffer[1] = (byte *)malloc(_header._bufferSize + 2); - if (!hnm->tmpBuffer[1]) { - free(hnm->tmpBuffer[0]); - hnm->tmpBuffer[0] = nullptr; + if (!tmpBuffer[1]) { + free(tmpBuffer[0]); + tmpBuffer[0] = nullptr; return; } - hnm->_readBuffer = (byte *)malloc(hnm->_header._bufferSize + 2); - if (!hnm->_readBuffer) { - free(hnm->tmpBuffer[0]); - hnm->tmpBuffer[0] = nullptr; - free(hnm->tmpBuffer[1]); - hnm->tmpBuffer[1] = nullptr; + _readBuffer = (byte *)malloc(_header._bufferSize + 2); + if (!_readBuffer) { + free(tmpBuffer[0]); + tmpBuffer[0] = nullptr; + free(tmpBuffer[1]); + tmpBuffer[1] = nullptr; } } // Original name: CLHNM_DeallocMemory -void HnmPlayer::deallocMemory(hnm_t *hnm) { - free(hnm->tmpBuffer[0]); - free(hnm->tmpBuffer[1]); - free(hnm->_readBuffer); +void HnmPlayer::deallocMemory() { + free(tmpBuffer[0]); + free(tmpBuffer[1]); + free(_readBuffer); - hnm->tmpBuffer[0] = nullptr; - hnm->tmpBuffer[1] = nullptr; - hnm->_readBuffer = nullptr; + tmpBuffer[0] = nullptr; + tmpBuffer[1] = nullptr; + _readBuffer = nullptr; } // Original name: CLHNM_SetFinalBuffer -void HnmPlayer::setFinalBuffer(hnm_t *hnm, byte *buffer) { - hnm->finalBuffer = buffer; +void HnmPlayer::setFinalBuffer(byte *buffer) { + _finalBuffer = buffer; } // Original name: CLHNM_GetFrameNum -int HnmPlayer::getFrameNum(hnm_t *hnm) { - return hnm->_frameNum; +int HnmPlayer::getFrameNum() { + return _frameNum; } // Original name: CLHNM_TryRead -void HnmPlayer::tryRead(hnm_t *hnm, int size) { - hnm->_file->read(hnm->_readBuffer, size); +void HnmPlayer::tryRead(int size) { + _file->read(_readBuffer, size); } // Original name: CLHNM_LoadFrame -bool HnmPlayer::loadFrame(hnm_t *hnm) { - tryRead(hnm, 4); - int chunk = *(int *)hnm->_readBuffer; +bool HnmPlayer::loadFrame() { + tryRead(4); + int chunk = *(int *)_readBuffer; chunk = LE32(chunk); chunk &= 0xFFFFFF; // upper bit - keyframe mark? if (!chunk) return false; - if (chunk - 4 > hnm->_header._bufferSize) + if (chunk - 4 > _header._bufferSize) error("loadFrame - Chunk size"); - tryRead(hnm, chunk - 4); - hnm->_dataPtr = hnm->_readBuffer; - hnm->_totalRead += chunk; + tryRead(chunk - 4); + _dataPtr = _readBuffer; + _totalRead += chunk; return true; } @@ -351,13 +347,13 @@ void HnmPlayer::desentrelace320(byte *frame_buffer, byte *final_buffer, uint16 h } // Original name: CLHNM_Desentrelace -void HnmPlayer::desentrelace(hnm_t *hnm) { - switch (hnm->_header._width) { +void HnmPlayer::desentrelace() { + switch (_header._width) { case 320: - desentrelace320(hnm->_newFrameBuffer, hnm->finalBuffer, hnm->_header._height); + desentrelace320(_newFrameBuffer, _finalBuffer, _header._height); break; // case 480: - // CLHNM_Desentrelace480(hnm->new_frame_buffer, hnm->final_buffer, hnm->header.height); + // CLHNM_Desentrelace480(_newFrameBuffer, finalBuffer, _header._height); // break; default: error("desentrelace - Unexpected width"); @@ -467,51 +463,51 @@ void HnmPlayer::decompUBA(byte *output, byte *curr_buffer, byte *prev_buffer, by } // Original name: CLHNM_NextElement -bool HnmPlayer::nextElement(hnm_t *hnm) { - if (hnm->_frameNum == 0) { +bool HnmPlayer::nextElement() { + if (_frameNum == 0) { resetInternalTimer(); _prevLeft = _prevRight = 0; } - if (hnm->_frameNum == hnm->_header._numbFrame) + if (_frameNum == _header._numbFrame) return false; - if (!loadFrame(hnm)) + if (!loadFrame()) return false; for (;;) { - int sz = READ_LE_UINT32(hnm->_dataPtr) & 0xFFFFFF; - hnm->_dataPtr += 4; - int16 id = READ_LE_UINT16(hnm->_dataPtr); - hnm->_dataPtr += 2; - char h6 = *hnm->_dataPtr; - hnm->_dataPtr += 1; - char h7 = *hnm->_dataPtr; - hnm->_dataPtr += 1; - hnm->_chunkId = id; + int sz = READ_LE_UINT32(_dataPtr) & 0xFFFFFF; + _dataPtr += 4; + int16 id = READ_LE_UINT16(_dataPtr); + _dataPtr += 2; + char h6 = *_dataPtr; + _dataPtr += 1; + char h7 = *_dataPtr; + _dataPtr += 1; + _chunkId = id; switch (id) { case MKTAG16('L', 'P'): - changePalette(hnm); - hnm->_dataPtr += sz - 8; + changePalette(); + _dataPtr += sz - 8; break; case MKTAG16('Z', 'I'): - hnm->_frameNum++; - selectBuffers(hnm); - decompLempelZiv(hnm->_dataPtr + 4, hnm->_newFrameBuffer); - switch (hnm->_header._width) { - // case 320: CLBlitter_RawCopy320ASM(hnm->new_frame_buffer, hnm->old_frame_buffer, hnm->header.height); break; - // case 480: CLBlitter_RawCopy480ASM(hnm->new_frame_buffer, hnm->old_frame_buffer, hnm->header.height); break; - // case 640: CLBlitter_RawCopy640ASM(hnm->new_frame_buffer, hnm->old_frame_buffer, hnm->header.height); break; - // default: memcpy(hnm->old_frame_buffer, hnm->new_frame_buffer, hnm->header.width * hnm->header.height); + _frameNum++; + selectBuffers(); + decompLempelZiv(_dataPtr + 4, _newFrameBuffer); + switch (_header._width) { + // case 320: CLBlitter_RawCopy320ASM(_newFrameBuffer, _oldFrameBuffer, _header._height); break; + // case 480: CLBlitter_RawCopy480ASM(_newFrameBuffer, _oldFrameBuffer, _header._height); break; + // case 640: CLBlitter_RawCopy640ASM(_newFrameBuffer, _oldFrameBuffer, _header._height); break; + // default: memcpy(_oldFrameBuffer, _newFrameBuffer, _header._width * _header._height); default: - memcpy(hnm->_oldFrameBuffer, hnm->_newFrameBuffer, hnm->_header._bufferSize); //TODO strange buffer size here + memcpy(_oldFrameBuffer, _newFrameBuffer, _header._bufferSize); //TODO strange buffer size here } if (!(h6 & 1)) - desentrelace(hnm); + desentrelace(); else { - // if(hnm->header.width == 640) - // CLBlitter_RawCopy640(hnm->new_frame_buffer, hnm->final_buffer, hnm->header.height); + // if(_header._width == 640) + // CLBlitter_RawCopy640(_newFrameBuffer, finalBuffer, _header._height); // else - memcpy(hnm->finalBuffer, hnm->_newFrameBuffer, hnm->_header._height); //TODO: wrong size? + memcpy(_finalBuffer, _newFrameBuffer, _header._height); //TODO: wrong size? } if (_useAdpcm) { if (!_soundStarted) { @@ -527,16 +523,16 @@ bool HnmPlayer::nextElement(hnm_t *hnm) { return true; case MKTAG16('U', 'I'): - hnm->_frameNum++; - selectBuffers(hnm); - decompUBA(hnm->_newFrameBuffer, hnm->_newFrameBuffer, hnm->_oldFrameBuffer, hnm->_dataPtr, hnm->_header._width, h6); + _frameNum++; + selectBuffers(); + decompUBA(_newFrameBuffer, _newFrameBuffer, _oldFrameBuffer, _dataPtr, _header._width, h6); if (!(h6 & 1)) - desentrelace(hnm); + desentrelace(); else { - // if(hnm->header.width == 640) - // CLBlitter_RawCopy640(hnm->new_frame_buffer, hnm->final_buffer, hnm->header.height); + // if(_header._width == 640) + // CLBlitter_RawCopy640(_newFrameBuffer, _finalBuffer, _header._height); // else - memcpy(hnm->finalBuffer, hnm->_newFrameBuffer, hnm->_header._width * hnm->_header._height); + memcpy(_finalBuffer, _newFrameBuffer, _header._width * _header._height); } return true; @@ -546,7 +542,7 @@ bool HnmPlayer::nextElement(hnm_t *hnm) { if (!h6) { int sound_size = sz - 8; if (!_useAdpcm) { - _soundGroup->setDatas(hnm->_dataPtr, sound_size - 2, false); + _soundGroup->setDatas(_dataPtr, sound_size - 2, false); if (_soundStarted) _soundGroup->playNextSample(_soundChannel); else @@ -555,11 +551,11 @@ bool HnmPlayer::nextElement(hnm_t *hnm) { int16 *sound_buffer = (int16 *)_soundGroupAdpcm->getNextBuffer(); if (!_pendingSounds) { const int kDecompTableSize = 256 * sizeof(int16); - loadDecompTable((int16 *)hnm->_dataPtr); - decompADPCM(hnm->_dataPtr + kDecompTableSize, sound_buffer, sound_size - kDecompTableSize); + loadDecompTable((int16 *)_dataPtr); + decompADPCM(_dataPtr + kDecompTableSize, sound_buffer, sound_size - kDecompTableSize); _soundGroupAdpcm->assignDatas(sound_buffer, (sound_size - kDecompTableSize) * 2, false); } else { - decompADPCM(hnm->_dataPtr, sound_buffer, sound_size); + decompADPCM(_dataPtr, sound_buffer, sound_size); _soundGroupAdpcm->assignDatas(sound_buffer, sound_size * 2, false); } _pendingSounds++; @@ -569,12 +565,12 @@ bool HnmPlayer::nextElement(hnm_t *hnm) { } else error("nextElement - unexpected flag"); } - hnm->_dataPtr += sz - 8; + _dataPtr += sz - 8; break; default: if (_customChunkHandler) - _customChunkHandler(hnm->_dataPtr, sz - 8, id, h6, h7); - hnm->_dataPtr += sz - 8; + _customChunkHandler(_dataPtr, sz - 8, id, h6, h7); + _dataPtr += sz - 8; } } return true; @@ -586,13 +582,13 @@ SoundChannel *HnmPlayer::getSoundChannel() { } // Original name: CLHNM_FlushPreloadBuffer -void HnmPlayer::flushPreloadBuffer(hnm_t *hnm) { +void HnmPlayer::flushPreloadBuffer() { } // Original name: CLHNM_ChangePalette -void HnmPlayer::changePalette(hnm_t *hnm) { - CLPalette_GetLastPalette(hnm->_palette); - byte *pal = hnm->_dataPtr; +void HnmPlayer::changePalette() { + CLPalette_GetLastPalette(_palette); + byte *pal = _dataPtr; if (*(uint16 *)pal == 0xFFFF) return; @@ -609,7 +605,7 @@ void HnmPlayer::changePalette(hnm_t *hnm) { mincolor = fst; if (maxcolor < fst + cnt) maxcolor = fst + cnt; - color_t *color = hnm->_palette + fst; + color_t *color = _palette + fst; if (_safePalette) { while (cnt--) { byte r = *pal++; @@ -640,23 +636,23 @@ void HnmPlayer::changePalette(hnm_t *hnm) { } while (*(uint16 *)pal != 0xFFFF); #if 0 if (preserve_color0) { - hnm->palette[0].r = 0; - hnm->palette[0].g = 0; - hnm->palette[0].b = 0; + _palette[0].r = 0; + _palette[0].g = 0; + _palette[0].b = 0; } #endif - // CLBlitter_Send2ScreenNextCopy(hnm->palette, mincolor, maxcolor - mincolor); - CLBlitter_Send2ScreenNextCopy(hnm->_palette, 0, 256); + // CLBlitter_Send2ScreenNextCopy(_palette, mincolor, maxcolor - mincolor); + CLBlitter_Send2ScreenNextCopy(_palette, 0, 256); } // Original name: CLHNM_SelectBuffers -void HnmPlayer::selectBuffers(hnm_t *hnm) { - if (hnm->_frameNum % 2) { - hnm->_newFrameBuffer = hnm->tmpBuffer[1]; - hnm->_oldFrameBuffer = hnm->tmpBuffer[0]; +void HnmPlayer::selectBuffers() { + if (_frameNum % 2) { + _newFrameBuffer = tmpBuffer[1]; + _oldFrameBuffer = tmpBuffer[0]; } else { - hnm->_newFrameBuffer = hnm->tmpBuffer[0]; - hnm->_oldFrameBuffer = hnm->tmpBuffer[1]; + _newFrameBuffer = tmpBuffer[0]; + _oldFrameBuffer = tmpBuffer[1]; } } @@ -664,14 +660,9 @@ void HnmPlayer::selectBuffers(hnm_t *hnm) { void HnmPlayer::done() { } -// Original name: CLHNM_Dispose -void HnmPlayer::dispose(hnm_t *hnm) { - free(hnm); -} - // Original name: CLHNM_CanLoop -void HnmPlayer::canLoop(hnm_t *hnm, bool canLoop) { - hnm->_canLoop = canLoop; +void HnmPlayer::canLoop(bool canLoop) { + _canLoop = canLoop; } // Original name: CLHNM_SoundInADPCM diff --git a/engines/cryo/video.h b/engines/cryo/video.h index 144c8e03a4..fa853e6d36 100644 --- a/engines/cryo/video.h +++ b/engines/cryo/video.h @@ -28,6 +28,23 @@ namespace Cryo { class CryoEngine; class HnmPlayer { +public: + int _frameNum; + int _unused04; + Common::File *_file; + HNMHeader _header; + byte *tmpBuffer[2]; + byte *_finalBuffer; + byte *_newFrameBuffer; + byte *_oldFrameBuffer; + byte *_readBuffer; + byte *_dataPtr; + color_t _palette[256]; + bool _canLoop; + int16 _unused896; + int16 _chunkId; + int _totalRead; + private: CryoEngine *_vm; @@ -35,19 +52,18 @@ private: void wantsSound(bool sound); void decompADPCM(byte *buffer, int16 *output, int size); void loadDecompTable(int16 *buffer); - bool loadFrame(hnm_t *hnm); - void tryRead(hnm_t *hnm, int size); - void changePalette(hnm_t *hnm); - void selectBuffers(hnm_t *hnm); + bool loadFrame(); + void tryRead(int size); + void changePalette(); + void selectBuffers(); void decompLempelZiv(byte *buffer, byte *output); void desentrelace320(byte *frame_buffer, byte *final_buffer, uint16 height); - void desentrelace(hnm_t *hnm); + void desentrelace(); void decompUBA(byte *output, byte *curr_buffer, byte *prev_buffer, byte *input, int width, char flags); // Unused void done(); - void dispose(hnm_t *hnm); - void canLoop(hnm_t *hnm, bool canLoop); + void canLoop(bool canLoop); void soundInADPCM(bool is_adpcm); void soundMono(bool is_mono); // @@ -81,23 +97,23 @@ public: HnmPlayer(CryoEngine *vm); void setupTimer(float rate); - void reset(hnm_t *hnm); + void reset(); void closeSound(); - void waitLoop(hnm_t *hnm); - void flushPreloadBuffer(hnm_t *hnm); + void waitLoop(); + void flushPreloadBuffer(); void setupSound(int16 numSounds, int16 length, int16 sampleSize, float rate, int16 mode); void setupSoundADPCM(int16 numSounds, int16 length, int16 sampleSize, float rate, int16 mode); - bool nextElement(hnm_t *hnm); + bool nextElement(); void init(); void setForceZero2Black(bool forceblack); - void readHeader(hnm_t *hnm); - int16 getVersion(hnm_t *hnm); - void allocMemory(hnm_t *hnm); - void deallocMemory(hnm_t *hnm); - void setFinalBuffer(hnm_t *hnm, byte *buffer); - int getFrameNum(hnm_t *hnm); - hnm_t *resetInternals(); - void setFile(hnm_t *hnm, Common::File *file); + void readHeader(); + int16 getVersion(); + void allocMemory(); + void deallocMemory(); + void setFinalBuffer(byte *buffer); + int getFrameNum(); + void resetInternals(); + void setFile(Common::File *file); SoundChannel *getSoundChannel(); }; -- cgit v1.2.3