void RobotDecoder::initRecordAndCuePositions() { PositionList recordSizes; _videoSizes.reserve(_numFramesTotal); _recordPositions.reserve(_numFramesTotal); recordSizes.reserve(_numFramesTotal); switch(_version) { case 5: // 16-bit sizes and positions for (int i = 0; i < _numFramesTotal; ++i) { _videoSizes.push_back(_stream->readUint16()); } for (int i = 0; i < _numFramesTotal; ++i) { recordSizes.push_back(_stream->readUint16()); } break; case 6: // 32-bit sizes and positions for (int i = 0; i < _numFramesTotal; ++i) { _videoSizes.push_back(_stream->readSint32()); } for (int i = 0; i < _numFramesTotal; ++i) { recordSizes.push_back(_stream->readSint32()); } break; default: error("Unknown Robot version %d", _version); } for (int i = 0; i < kCueListSize; ++i) { _cueTimes[i] = _stream->readSint32(); } for (int i = 0; i < kCueListSize; ++i) { _cueValues[i] = _stream->readUint16(); } Common::copy(_cueTimes, _cueTimes + kCueListSize, _masterCueTimes); int bytesRemaining = (_stream->pos() - _fileOffset) % kRobotFrameSize; if (bytesRemaining != 0) { _stream->seek(kRobotFrameSize - bytesRemaining, SEEK_CUR); } int position = _stream->pos(); _recordPositions.push_back(position); for (int i = 0; i < _numFramesTotal - 1; ++i) { position += recordSizes[i]; _recordPositions.push_back(position); } }