예제 #1
0
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;
}
예제 #2
0
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;
}
예제 #3
0
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();
}