TLevelP TLevelReader3gp::loadInfo() { TLevelP level; if (m_IOError != QTNoError) throw TImageException(m_path, buildQTErrorString(m_IOError)); OSType mediaType = VisualMediaCharacteristic; TimeValue nextTime, currentTime; currentTime = 0; nextTime = 0; //per il primo int f = 1; // io vorrei fare '|', ma sul manuale c'e' scritto '+' GetMovieNextInterestingTime(m_movie, nextTimeMediaSample + nextTimeEdgeOK, 1, &mediaType, currentTime, 0, &nextTime, 0); if (nextTime != -1) { TFrameId frame(f); level->setFrame(frame, TImageP()); currentTimes.push_back(nextTime); f++; } currentTime = nextTime; while (nextTime != -1) { GetMovieNextInterestingTime(m_movie, nextTimeMediaSample, 1, &mediaType, currentTime, 0, &nextTime, 0); if (nextTime != -1) { TFrameId frame(f); level->setFrame(frame, TImageP()); currentTimes.push_back(nextTime); f++; } currentTime = nextTime; } return level; }
TLevelP TLevelReader::loadInfo() { TFilePath parentDir = m_path.getParentDir(); TFilePath levelName(m_path.getLevelName()); // cout << "Parent dir = '" << parentDir << "'" << endl; // cout << "Level name = '" << levelName << "'" << endl; TFilePathSet files; try { files = TSystem::readDirectory(parentDir, false, true, true); } catch (...) { throw TImageException(m_path, "unable to read directory content"); } TLevelP level; vector<TFilePath> data; for (TFilePathSet::iterator it = files.begin(); it != files.end(); it++) { TFilePath ln(it->getLevelName()); // cout << "try " << *it << " " << it->getLevelName() << endl; if (levelName == TFilePath(it->getLevelName())) { try { level->setFrame(it->getFrame(), TImageP()); data.push_back(*it); } catch (string msg) { throw msg; } } } if (!data.empty()) { std::vector<TFilePath>::iterator it = std::min_element(data.begin(), data.end(), myLess); TFilePath fr = (*it).withoutParentDir().withName("").withType(""); wstring ws = fr.getWideString(); if (ws.length() == 5) { if (ws.rfind(L'_') == (int)wstring::npos) m_frameFormat = TFrameId::FOUR_ZEROS; else m_frameFormat = TFrameId::UNDERSCORE_FOUR_ZEROS; } else { if (ws.rfind(L'_') == (int)wstring::npos) m_frameFormat = TFrameId::NO_PAD; else m_frameFormat = TFrameId::UNDERSCORE_NO_PAD; } } else m_frameFormat = TFrameId::FOUR_ZEROS; return level; }
TLevelP TLevelReaderMov::loadInfo() { QLocalSocket socket; tipc::startSlaveConnection(&socket, t32bitsrv::srvName(), -1, t32bitsrv::srvCmdline()); tipc::Stream stream(&socket); tipc::Message msg; TLevelP level; { QString shMemId(tipc::uniqueId()); // Send the appropriate command stream << (msg << QString("$LRMovLoadInfo") << m_id << shMemId); if (tipc::readMessage(stream, msg) != "ok") goto err; int frameCount; msg >> frameCount >> tipc::clr; // Read the data in the shared memory segment QSharedMemory shmem(shMemId); shmem.attach(); shmem.lock(); int *f, *fBegin = (int *)shmem.data(), *fEnd = fBegin + frameCount; assert(fBegin); for (f = fBegin; f < fEnd; ++f) level->setFrame(*f, TImageP()); shmem.unlock(); shmem.detach(); // Release the shared memory segment stream << (msg << QString("$shmem_release") << shMemId); if (tipc::readMessage(stream, msg) != "ok") goto err; } return level; err: throw TException("Couldn't read movie data"); return TLevelP(); }