void Controller::setProfile(const QString& profile_name) { LOG_DEBUG() << "setting to profile" << (profile_name.isEmpty()? "Automatic" : profile_name); if (!profile_name.isEmpty()) { Mlt::Profile tmp(profile_name.toLatin1().constData()); m_profile->set_colorspace(tmp.colorspace()); m_profile->set_frame_rate(tmp.frame_rate_num(), tmp.frame_rate_den()); m_profile->set_height(tmp.height()); m_profile->set_progressive(tmp.progressive()); m_profile->set_sample_aspect(tmp.sample_aspect_num(), tmp.sample_aspect_den()); m_profile->set_display_aspect(tmp.display_aspect_num(), tmp.display_aspect_den()); m_profile->set_width(alignWidth(tmp.width())); m_profile->set_explicit(true); } else { m_profile->set_explicit(false); if (m_producer) { m_profile->from_producer(*m_producer); m_profile->set_width(alignWidth(m_profile->width())); } } }
void Controller::setProfile(const QString& profile_name) { if (!profile_name.isEmpty()) { Mlt::Profile tmp(profile_name.toLatin1().constData()); m_profile->set_colorspace(tmp.colorspace()); m_profile->set_frame_rate(tmp.frame_rate_num(), tmp.frame_rate_den()); m_profile->set_height(tmp.height()); m_profile->set_progressive(tmp.progressive()); m_profile->set_sample_aspect(tmp.sample_aspect_num(), tmp.sample_aspect_den()); m_profile->set_display_aspect(tmp.display_aspect_num(), tmp.display_aspect_den()); m_profile->set_width(alignWidth(tmp.width())); m_profile->set_explicit(!profile_name.isEmpty()); restart(); } }
int Controller::open(const QString &url) { int error = 0; close(); if (Settings.playerGPU() && !profile().is_explicit()) // Prevent loading normalizing filters, which might be Movit ones that // may not have a proper OpenGL context when requesting a sample frame. m_producer = new Mlt::Producer(profile(), "abnormal", url.toUtf8().constData()); else m_producer = new Mlt::Producer(profile(), url.toUtf8().constData()); if (m_producer->is_valid()) { double fps = profile().fps(); if (!profile().is_explicit()) { profile().from_producer(*m_producer); profile().set_width(alignWidth(profile().width())); } if (profile().fps() != fps || (Settings.playerGPU() && !profile().is_explicit())) { // Reload with correct FPS or with Movit normalizing filters attached. delete m_producer; m_producer = new Mlt::Producer(profile(), url.toUtf8().constData()); } // Convert avformat to avformat-novalidate so that XML loads faster. if (!qstrcmp(m_producer->get("mlt_service"), "avformat")) { m_producer->set("mlt_service", "avformat-novalidate"); m_producer->set("mute_on_pause", 0); } if (m_url.isEmpty() && QString(m_producer->get("xml")) == "was here") { if (m_producer->get_int("_original_type") != tractor_type || (m_producer->get_int("_original_type") == tractor_type && m_producer->get("shotcut"))) m_url = url; } setImageDurationFromDefault(m_producer); } else { delete m_producer; m_producer = 0; error = 1; } return error; }
bool Controller::openXML(const QString &filename) { bool error = true; close(); Producer* producer = new Mlt::Producer(profile(), "xml", filename.toUtf8().constData()); if (producer->is_valid()) { double fps = profile().fps(); if (!profile().is_explicit()) { profile().from_producer(*producer); profile().set_width(alignWidth(profile().width())); } if (profile().fps() != fps) { // reopen with the correct fps delete producer; producer = new Mlt::Producer(profile(), "xml", filename.toUtf8().constData()); } producer->set(kShotcutVirtualClip, 1); producer->set("resource", filename.toUtf8().constData()); setProducer(new Producer(producer)); error = false; } delete producer; return error; }