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; }
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 }
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); } }
const TImageInfo *TLevelReader::getImageInfo() { if (m_info) return m_info; TLevelP level = loadInfo(); if (level->getFrameCount() == 0) return 0; return getImageInfo(level->begin()->first); }
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; }
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(); }
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); }