예제 #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
void TVectorBrushStyle::loadBrush(const std::string &brushName)
{
	m_brushName = brushName;
	m_colorCount = 0;

	if (brushName.empty())
		return;

	if (!m_brush) {
		//Load the image associated with fp
		TFilePath fp(m_rootDir + TFilePath(brushName + ".pli"));

		TLevelReaderP lr(fp);
		TLevelP level = lr->loadInfo();

		m_brush = lr->getFrameReader(level->begin()->first)->load();
		assert(m_brush);

		TPalette *palette = level->getPalette();
		m_brush->setPalette(palette);
	}

	assert(m_brush);
	m_colorCount = m_brush->getPalette()->getStyleInPagesCount() - 1; //No transparent
}
예제 #3
0
void TLevelWriter::save(const TLevelP &level)
{
	for (TLevel::Iterator it = level->begin(); it != level->end(); it++) {
		if (it->second)
			getFrameWriter(it->first)->save(it->second);
	}
}
예제 #4
0
const TImageInfo *TLevelReader::getImageInfo()
{
	if (m_info)
		return m_info;
	TLevelP level = loadInfo();
	if (level->getFrameCount() == 0)
		return 0;
	return getImageInfo(level->begin()->first);
}
예제 #5
0
void LRLoadInfoParser::operator()(Message &msg) {
  // Read command data
  unsigned int id;
  QString shMemId;
  msg >> id >> shMemId >> clr;

  QHash<unsigned int, TLevelReaderP>::iterator it = readers.find(id);
  if (it == readers.end()) goto err;

  // Read level infos
  {
    TLevelP level;
    try {
      level = it.value()->loadInfo();
    } catch (...) {
      goto err;
    }

    int frameCount = level->getFrameCount();
    if (!shMemId.isEmpty()) {
      // Create a shared memory segment to transfer the infos to
      tipc::DefaultMessageParser<SHMEM_REQUEST> msgParser;
      Message shMsg;

      shMsg << shMemId << frameCount * (int)sizeof(int) << reset;
      msgParser(shMsg);

      QString str;
      shMsg >> reset >> str;
      if (str != QString("ok")) goto err;

      // Copy level data to the shared memory segment
      {
        QSharedMemory shmem(shMemId);
        shmem.attach();
        shmem.lock();

        TLevel::Table *table = level->getTable();

        TLevel::Table::const_iterator jt;
        int *f = (int *)shmem.data();
        for (jt = table->begin(); jt != table->end(); ++jt, ++f)
          *f = jt->first.getNumber();

        shmem.unlock();
        shmem.detach();
      }
    }

    msg << QString("ok") << frameCount;
  }
예제 #6
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;
}
예제 #7
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();
}
void FormatSettingsPopup::showEvent(QShowEvent *se)
{
#ifdef WIN32
	if (m_format == "avi") {
		assert(m_codecComboBox);
		m_codecComboBox->blockSignals(true);
		m_codecComboBox->clear();
		ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene();
		TEnumProperty *eProps = dynamic_cast<TEnumProperty *>(m_props->getProperty(0));
		assert(eProps);

		TDimension res(0, 0);
		if (m_levelPath.isEmpty())
			res = scene->getCurrentCamera()->getRes();
		else {
			TLevelReaderP lr(m_levelPath);
			TLevelP level = lr->loadInfo();
			const TImageInfo *info = lr->getImageInfo(level->begin()->first);
			res.lx = info->m_lx;
			res.ly = info->m_ly;
		}

		TEnumProperty::Range range = eProps->getRange();
		int currIndex = -1;
		wstring defaultVal = eProps->getValue();

		QMap<wstring, bool> usableCodecs = AviCodecRestrictions::getUsableCodecs(res);
		for (int i = 0; i < (int)range.size(); i++) {
			wstring nameProp = range[i];
			if (nameProp == L"Uncompressed" || (usableCodecs.contains(nameProp) && usableCodecs[nameProp])) {
				if (nameProp == defaultVal)
					currIndex = m_codecComboBox->count();
				m_codecComboBox->addItem(QString::fromStdWString(nameProp));
			}
		}
		m_codecComboBox->blockSignals(false);
		if (currIndex >= 0)
			m_codecComboBox->setCurrentIndex(currIndex);
	}

#endif

	Dialog::showEvent(se);
}