-
- if (element.attribute("speed", "1.0").toDouble() != 1.0 || element.attribute("strobe", "1").toInt() > 1) {
- // We want a slowmotion producer
- double speed = element.attribute("speed", "1.0").toDouble();
- int strobe = element.attribute("strobe", "1").toInt();
- QString url = QString::fromUtf8(prod->get("resource"));
- url.append('?' + QString::number(speed));
- if (strobe > 1) url.append("&strobe=" + QString::number(strobe));
- Mlt::Producer *slowprod = m_slowmotionProducers.value(url);
- if (!slowprod || slowprod->get_producer() == NULL) {
- char *tmp = decodedString(url);
- slowprod = new Mlt::Producer(*m_mltProfile, "framebuffer", tmp);
- if (strobe > 1) slowprod->set("strobe", strobe);
- delete[] tmp;
- QString id = prod->get("id");
- if (id.contains('_')) id = id.section('_', 0, 0);
- QString producerid = "slowmotion:" + id + ':' + QString::number(speed);
- if (strobe > 1) producerid.append(':' + QString::number(strobe));
- tmp = decodedString(producerid);
- slowprod->set("id", tmp);
- delete[] tmp;
- m_slowmotionProducers.insert(url, slowprod);
- }
- prod = slowprod;
- if (prod == NULL || !prod->is_valid()) {
- mlt_service_unlock(service.get_service());
- return -1;
- }