void start(const ToonzScene &scene) { m_status = 3; m_alphaNeeded = scene.getProperties()->getBgColor().m < 255; assert(m_started == false); m_started = true; if (TSystem::doesExistFileOrLevel(m_filepath)) TSystem::removeFileOrLevel(m_filepath); m_lw = TLevelWriterP(m_filepath); m_lw->setFrameRate(m_fps); if (m_lw->getProperties() && m_fileOptions) m_lw->getProperties()->setProperties(m_fileOptions); if (m_st) m_lw->saveSoundTrack(m_st.getPointer()); }
bool Convert2Tlv::init(std::string &errorMessage) { m_lastIndex = m_maxPaletteIndex = 0; m_colorMap.clear(); try { m_lr1 = TLevelReaderP(m_levelIn1); if (m_lr1) m_level1 = m_lr1->loadInfo(); } catch (...) { errorMessage = "Error: can't read level " + toString(m_levelIn1.getWideString()); return false; } if (m_level1->getFrameCount() == 0) { errorMessage = "Error: can't find level " + toString(m_levelIn1.getWideString()); return false; } TLevelP level2; if (m_levelIn2 != TFilePath()) { try { m_lr2 = TLevelReaderP(m_levelIn2); if (m_lr2) level2 = m_lr2->loadInfo(); } catch (...) { errorMessage = "Error: can't read level " + toString(m_levelIn2.getWideString()); return false; } if (level2->getFrameCount() == 0) { errorMessage = "Error: can't find level " + toString(m_levelIn2.getWideString()); return false; } if (m_level1->getFrameCount() != level2->getFrameCount()) { errorMessage = "Error: the two input levels must have same frame number"; return false; } } m_size = TDimension(); m_lw = TLevelWriterP(m_levelOut); m_it = m_level1->begin(); TLevel::Iterator it2; if (level2->getFrameCount() > 0) it2 = level2->begin(); for (; m_it != m_level1->end(); ++m_it) { TImageReaderP ir1 = m_lr1->getFrameReader(m_it->first); const TImageInfo *info1 = ir1->getImageInfo(); if (!info1) { errorMessage = "Error: can't read frame " + toString(m_it->first.getNumber()) + " of level " + toString(m_levelIn1.getWideString()); return false; } if (info1->m_bitsPerSample != 8) { errorMessage = "Error: all frames must have 8 bits per channel!\n"; return false; } m_size.lx = tmax(m_size.lx, info1->m_lx); m_size.ly = tmax(m_size.ly, info1->m_ly); if (m_lr2 != TLevelReaderP()) { TImageReaderP ir2 = m_lr2->getFrameReader(it2->first); if (ir2) { const TImageInfo *info2 = ir2->getImageInfo(); if (!info1) { errorMessage = "Error: can't read frame " + toString(it2->first.getNumber()) + " of level " + toString(m_levelIn2.getWideString()); ; return false; } if (info1->m_lx != info2->m_lx || info1->m_ly != info2->m_ly) { errorMessage = "Error: painted frames must have same resolution of matching unpainted frames!\n"; return false; } if (info2->m_bitsPerSample != 8) { errorMessage = "Error: all frames must have 8 bits per channel!\n"; return false; } } ++it2; } } m_palette = new TPalette(); if (m_palettePath != TFilePath()) { TIStream is(m_palettePath); is >> m_palette; if (m_palette->getStyleInPagesCount() == 0) { errorMessage = "Error: invalid palette!\n"; return false; } for (int i = 0; i < m_palette->getStyleCount(); i++) if (m_palette->getStylePage(i)) { m_colorMap[m_palette->getStyle(i)->getMainColor()] = i; if (i > m_lastIndex) m_lastIndex = i; } assert(m_colorMap.size() == m_palette->getStyleInPagesCount()); }
void close() { m_lw = TLevelWriterP(); m_st = TSoundTrackP(); }