Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "toutputproperties.h"
Toshihiro Shimizu 890ddd
shun-iwasawa cd4694
// TnzLib includes
shun-iwasawa cd4694
#include "toonz/boardsettings.h"
shun-iwasawa cd4694
Toshihiro Shimizu 890ddd
// TnzBase includes
Toshihiro Shimizu 890ddd
#include "trasterfx.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzCore includes
Toshihiro Shimizu 890ddd
#include "tiio.h"
Toshihiro Shimizu 890ddd
#include "tproperty.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//**********************************************************************************
Toshihiro Shimizu 890ddd
//    Local namespace  stuff
Toshihiro Shimizu 890ddd
//**********************************************************************************
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
namespace {
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
inline void deleteValue(const std::pair<std::string, *="" tpropertygroup=""> &p) {</std::string,>
Shinya Kitaoka 120a6e
  delete p.second;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
}  // namespace
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//**********************************************************************************
Toshihiro Shimizu 890ddd
//    TOutputProperties  implementation
Toshihiro Shimizu 890ddd
//**********************************************************************************
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TOutputProperties::TOutputProperties()
Shinya Kitaoka 120a6e
    : m_path(TFilePath("+outputs") + ".tif")
Shinya Kitaoka 120a6e
    , m_renderSettings()
Shinya Kitaoka 120a6e
    , m_frameRate(24)
Shinya Kitaoka 120a6e
    , m_from(0)
Shinya Kitaoka 120a6e
    , m_to(-1)
Shinya Kitaoka 120a6e
    , m_offset(0)
Shinya Kitaoka 120a6e
    , m_step(1)
Shinya Kitaoka 120a6e
    , m_whichLevels(false)
Shinya Kitaoka 120a6e
    , m_multimediaRendering(0)
Shinya Kitaoka 120a6e
    , m_maxTileSizeIndex(0)
Shinya Kitaoka 120a6e
    , m_threadIndex(2)
shun-iwasawa cd4694
    , m_subcameraPreview(false)
shun-iwasawa fc0d80
    , m_boardSettings(new BoardSettings())
shun-iwasawa 481b59
    , m_formatTemplateFId()
shun-iwasawa 481b59
    , m_syncColorSettings(true) {
Shinya Kitaoka 120a6e
  m_renderSettings = new TRenderSettings();
shun-iwasawa 481b59
  m_nonlinearBpp   = m_renderSettings->m_bpp;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TOutputProperties::TOutputProperties(const TOutputProperties &src)
Shinya Kitaoka 120a6e
    : m_path(src.m_path)
Shinya Kitaoka 120a6e
    , m_formatProperties(src.m_formatProperties)
Shinya Kitaoka 120a6e
    , m_renderSettings(new TRenderSettings(*src.m_renderSettings))
Shinya Kitaoka 120a6e
    , m_frameRate(src.m_frameRate)
Shinya Kitaoka 120a6e
    , m_from(src.m_from)
Shinya Kitaoka 120a6e
    , m_to(src.m_to)
Shinya Kitaoka 120a6e
    , m_whichLevels(src.m_whichLevels)
Shinya Kitaoka 120a6e
    , m_offset(src.m_offset)
Shinya Kitaoka 120a6e
    , m_step(src.m_step)
Shinya Kitaoka 120a6e
    , m_multimediaRendering(src.m_multimediaRendering)
Shinya Kitaoka 120a6e
    , m_maxTileSizeIndex(src.m_maxTileSizeIndex)
Shinya Kitaoka 120a6e
    , m_threadIndex(src.m_threadIndex)
shun-iwasawa cd4694
    , m_subcameraPreview(src.m_subcameraPreview)
shun-iwasawa fc0d80
    , m_boardSettings(new BoardSettings(*src.m_boardSettings))
shun-iwasawa 481b59
    , m_formatTemplateFId(src.m_formatTemplateFId)
shun-iwasawa 481b59
    , m_syncColorSettings(src.m_syncColorSettings)
shun-iwasawa 481b59
    , m_nonlinearBpp(src.m_nonlinearBpp) {
Shinya Kitaoka 120a6e
  std::map<std::string, *="" tpropertygroup="">::iterator ft,</std::string,>
Shinya Kitaoka 120a6e
      fEnd = m_formatProperties.end();
Shinya Kitaoka 120a6e
  for (ft = m_formatProperties.begin(); ft != fEnd; ++ft) {
Shinya Kitaoka 120a6e
    if (ft->second) ft->second = ft->second->clone();
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
TOutputProperties::~TOutputProperties() {
Shinya Kitaoka 120a6e
  delete m_renderSettings;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  std::for_each(m_formatProperties.begin(), m_formatProperties.end(),
Shinya Kitaoka 120a6e
                ::deleteValue);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
TOutputProperties &TOutputProperties::operator=(const TOutputProperties &src) {
Shinya Kitaoka 120a6e
  m_path        = src.m_path;
Shinya Kitaoka 120a6e
  m_from        = src.m_from;
Shinya Kitaoka 120a6e
  m_to          = src.m_to;
Shinya Kitaoka 120a6e
  m_frameRate   = src.m_frameRate;
Shinya Kitaoka 120a6e
  m_whichLevels = src.m_whichLevels;
Shinya Kitaoka 120a6e
  m_offset      = src.m_offset;
Shinya Kitaoka 120a6e
  m_step        = src.m_step;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  m_multimediaRendering = src.m_multimediaRendering;
Shinya Kitaoka 120a6e
  m_maxTileSizeIndex    = src.m_maxTileSizeIndex;
Shinya Kitaoka 120a6e
  m_threadIndex         = src.m_threadIndex;
Shinya Kitaoka 120a6e
  m_subcameraPreview    = src.m_subcameraPreview;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  delete m_renderSettings;
Shinya Kitaoka 120a6e
  m_renderSettings = new TRenderSettings(*src.m_renderSettings);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  std::for_each(m_formatProperties.begin(), m_formatProperties.end(),
Shinya Kitaoka 120a6e
                ::deleteValue);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  std::map<std::string, *="" tpropertygroup="">::const_iterator sft,</std::string,>
Shinya Kitaoka 120a6e
      sfEnd = src.m_formatProperties.end();
shun_iwasawa d4ffc7
  for (sft = src.m_formatProperties.begin(); sft != sfEnd; ++sft)
Shinya Kitaoka 120a6e
    m_formatProperties[sft->first] = sft->second->clone();
Toshihiro Shimizu 890ddd
shun-iwasawa cd4694
  delete m_boardSettings;
shun-iwasawa cd4694
  m_boardSettings = new BoardSettings(*src.m_boardSettings);
shun-iwasawa cd4694
shun-iwasawa fc0d80
  m_formatTemplateFId = src.m_formatTemplateFId;
shun-iwasawa fc0d80
Shinya Kitaoka 120a6e
  return *this;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
TFilePath TOutputProperties::getPath() const { return m_path; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TOutputProperties::setPath(const TFilePath &fp) { m_path = fp; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TOutputProperties::setOffset(int off) { m_offset = off; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
bool TOutputProperties::getRange(int &r0, int &r1, int &step) const {
Shinya Kitaoka 120a6e
  step = m_step;
Shinya Kitaoka 120a6e
  if (m_from > m_to) {
Shinya Kitaoka 120a6e
    r0 = 0;
Shinya Kitaoka 120a6e
    r1 = -1;
Shinya Kitaoka 120a6e
    return false;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    r0 = m_from;
Shinya Kitaoka 120a6e
    r1 = m_to;
Shinya Kitaoka 120a6e
    return true;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TOutputProperties::setRange(int r0, int r1, int step) {
Shinya Kitaoka 120a6e
  assert(0 <= r0 && r0 <= r1 || r0 == 0 && r1 == -1);
Shinya Kitaoka 120a6e
  m_from = r0;
Shinya Kitaoka 120a6e
  m_to   = r1;
Shinya Kitaoka 120a6e
  m_step = step;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TOutputProperties::setFrameRate(double fps) { m_frameRate = fps; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
TPropertyGroup *TOutputProperties::getFileFormatProperties(std::string ext) {
Shinya Kitaoka 120a6e
  std::map<std::string, *="" tpropertygroup="">::const_iterator it;</std::string,>
Shinya Kitaoka 120a6e
  it = m_formatProperties.find(ext);
Shinya Kitaoka 120a6e
  if (it == m_formatProperties.end()) {
Shinya Kitaoka 120a6e
    TPropertyGroup *ret     = Tiio::makeWriterProperties(ext);
Shinya Kitaoka 120a6e
    m_formatProperties[ext] = ret;
Shinya Kitaoka 120a6e
    return ret;
shun-iwasawa 47cda8
  } else if (ext == "mov" || ext == "3gp") {
shun-iwasawa 47cda8
    return it->second;
justburner e7c1a3
  } else {
justburner e7c1a3
    // Try to merge settings instead of overriding them
justburner e7c1a3
    TPropertyGroup *ret = Tiio::makeWriterProperties(ext);
justburner e7c1a3
    ret->setProperties(it->second);
justburner e7c1a3
    m_formatProperties[ext] = ret;
justburner e7c1a3
    return ret;
justburner e7c1a3
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TOutputProperties::getFileFormatPropertiesExtensions(
Shinya Kitaoka 120a6e
    std::vector<std::string> &v) const {</std::string>
Shinya Kitaoka 120a6e
  v.reserve(m_formatProperties.size());
Shinya Kitaoka 120a6e
  std::map<std::string, *="" tpropertygroup="">::const_iterator it;</std::string,>
Shinya Kitaoka 120a6e
  for (it = m_formatProperties.begin(); it != m_formatProperties.end(); ++it)
Shinya Kitaoka 120a6e
    v.push_back(it->first);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TOutputProperties::setRenderSettings(
Shinya Kitaoka 120a6e
    const TRenderSettings &renderSettings) {
shun-iwasawa 481b59
  assert(renderSettings.m_bpp == 32 || renderSettings.m_bpp == 64 ||
shun-iwasawa 481b59
         renderSettings.m_bpp == 128);
Shinya Kitaoka 120a6e
  assert(renderSettings.m_gamma > 0);
Shinya Kitaoka 120a6e
  assert(renderSettings.m_quality == TRenderSettings::StandardResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality == TRenderSettings::ImprovedResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality == TRenderSettings::HighResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality ==
Shinya Kitaoka 120a6e
             TRenderSettings::Triangle_FilterResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality ==
Shinya Kitaoka 120a6e
             TRenderSettings::Mitchell_FilterResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality ==
Shinya Kitaoka 120a6e
             TRenderSettings::Cubic5_FilterResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality ==
Shinya Kitaoka 120a6e
             TRenderSettings::Cubic75_FilterResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality ==
Shinya Kitaoka 120a6e
             TRenderSettings::Cubic1_FilterResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality ==
Shinya Kitaoka 120a6e
             TRenderSettings::Hann2_FilterResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality ==
Shinya Kitaoka 120a6e
             TRenderSettings::Hann3_FilterResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality ==
Shinya Kitaoka 120a6e
             TRenderSettings::Hamming2_FilterResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality ==
Shinya Kitaoka 120a6e
             TRenderSettings::Hamming3_FilterResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality ==
Shinya Kitaoka 120a6e
             TRenderSettings::Lanczos2_FilterResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality ==
Shinya Kitaoka 120a6e
             TRenderSettings::Lanczos3_FilterResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality ==
Shinya Kitaoka 120a6e
             TRenderSettings::Gauss_FilterResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality ==
Shinya Kitaoka 120a6e
             TRenderSettings::ClosestPixel_FilterResampleQuality ||
Shinya Kitaoka 120a6e
         renderSettings.m_quality ==
Shinya Kitaoka 120a6e
             TRenderSettings::Bilinear_FilterResampleQuality);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  *m_renderSettings = renderSettings;
Toshihiro Shimizu 890ddd
}