Fixed crash after using cutscene subtitles. (Now I *know* no one has used that

feature before. :-)

svn-id: r34796
This commit is contained in:
Torbjörn Andersson 2008-10-13 18:41:12 +00:00
parent ffdbb474c4
commit c2066b9c20
3 changed files with 13 additions and 7 deletions

View File

@ -278,7 +278,7 @@ void MoviePlayer::play(void) {
_textSpriteBuf = (byte *)calloc(_textHeight, _textWidth);
}
if (_currentFrame == _movieTexts[0]->_endFrame) {
_textMan->releaseText(2);
_textMan->releaseText(2, false);
free(_textSpriteBuf);
_textSpriteBuf = NULL;
delete _movieTexts.remove_at(0);
@ -309,10 +309,15 @@ void MoviePlayer::play(void) {
if (terminated)
_snd->stopHandle(_bgSoundHandle);
while (!_movieTexts.empty()) {
delete _movieTexts.remove_at(_movieTexts.size() - 1);
if (_textSpriteBuf) {
_textMan->releaseText(2, false);
free(_textSpriteBuf);
_textSpriteBuf = NULL;
}
while (!_movieTexts.empty())
delete _movieTexts.remove_at(_movieTexts.size() - 1);
while (_snd->isSoundHandleActive(_bgSoundHandle))
_system->delayMillis(100);

View File

@ -89,7 +89,7 @@ void Text::makeTextSprite(uint8 slot, uint8 *text, uint16 maxWidth, uint8 pen) {
assert(!_textBlocks[slot]); // if this triggers, the speechDriver failed to call Text::releaseText.
_textBlocks[slot] = (FrameHeader*)malloc(sprSize + sizeof(FrameHeader));
memcpy( _textBlocks[slot]->runTimeComp, "Nu ", 4);
memcpy(_textBlocks[slot]->runTimeComp, "Nu ", 4);
_textBlocks[slot]->compSize = 0;
_textBlocks[slot]->width = _resMan->toUint16(sprWidth);
_textBlocks[slot]->height = _resMan->toUint16(sprHeight);
@ -179,13 +179,14 @@ FrameHeader *Text::giveSpriteData(uint32 textTarget) {
return _textBlocks[textTarget];
}
void Text::releaseText(uint32 id) {
void Text::releaseText(uint32 id, bool updateCount) {
id &= ITM_ID;
assert(id < MAX_TEXT_OBS);
if (_textBlocks[id]) {
free(_textBlocks[id]);
_textBlocks[id] = NULL;
_textCount--;
if (updateCount)
_textCount--;
}
}

View File

@ -52,7 +52,7 @@ public:
FrameHeader *giveSpriteData(uint32 textTarget);
uint32 lowTextManager(uint8 *text, int32 width, uint8 pen);
void makeTextSprite(uint8 slot, uint8 *text, uint16 maxWidth, uint8 pen);
void releaseText(uint32 id);
void releaseText(uint32 id, bool updateCount = true);
private:
uint16 analyzeSentence(uint8 *text, uint16 maxWidth, LineInfo *info);