void ClipManager::updatePreviewSettings() {
for (int i = 0; i < m_clipList.count(); i++) {
if (m_clipList.at(i)->clipType() == AV || m_clipList.at(i)->clipType() == VIDEO) {
- if (m_clipList.at(i)->producerProperty("meta.media.0.codec.name") == "h264") {
+ if (m_clipList.at(i)->producerProperty("meta.media.0.codec.name") && strcmp(m_clipList.at(i)->producerProperty("meta.media.0.codec.name"), "h264") == 0) {
if (KdenliveSettings::dropbframes()) {
m_clipList[i]->setProducerProperty("skip_loop_filter", "all");
m_clipList[i]->setProducerProperty("skip_frame", "bidir");
char *tmp = (char *) qstrdup(QString(getId() + '_' + QString::number(track)).toUtf8().data());
m_baseTrackProducers[track]->set("id", tmp);
delete[] tmp;
- if (KdenliveSettings::dropbframes()) {
+ if (KdenliveSettings::dropbframes() && m_baseTrackProducers.at(i)->get("skip_loop_filter") && strcmp(m_baseTrackProducers.at(i)->get("skip_loop_filter"), "all") == 0) {
m_baseTrackProducers[track]->set("skip_loop_filter", "all");
m_baseTrackProducers[track]->set("skip_frame", "bidir");
}
}
}
-QString DocClipBase::producerProperty(const char *name) const {
+const char *DocClipBase::producerProperty(const char *name) const {
for (int i = 0; i < m_baseTrackProducers.count(); i++) {
if (m_baseTrackProducers.at(i) != NULL) {
- char *tmp = m_baseTrackProducers.at(i)->get(name);
- QString result = QString(tmp);
- return result;
+ return m_baseTrackProducers.at(i)->get(name);
}
}
- return QString();
+ return NULL;
}
void askForAudioThumbs();
QString getClipHash() const;
void refreshThumbUrl();
- QString producerProperty(const char *name) const;
+ const char *producerProperty(const char *name) const;
void setProducerProperty(const char *name, const char *data);
void deleteProducers();
if (producer->get(property))
filePropertyMap["videocodec"] = producer->get(property);
}
+
+ if (KdenliveSettings::dropbframes()) {
+ kDebug() << "// LOOKING FOR H264 on: " << default_video;
+ snprintf(property, sizeof(property), "meta.media.%d.codec.name", default_video);
+ kDebug() << "PROP: " << property << " = " << producer->get(property);
+ if (producer->get(property) && strcmp(producer->get(property), "h264") == 0) {
+ kDebug() << "// GOT H264 CLIP, SETTING FAST PROPS";
+ producer->set("skip_loop_filter", "all");
+ producer->set("skip_frame", "bidir");
+ }
+ }
+
} else kDebug() << " / / / / /WARNING, VIDEO CONTEXT IS NULL!!!!!!!!!!!!!!";
if (producer->get_int("audio_index") > -1) {
// Get the audio_index
m_mltConsumer->stop();
} else return;
+ m_mltConsumer->purge();
+
m_isBlocked = true;
if (m_mltProducer) {
m_mltProducer->set_speed(0);
m_mltProducer = NULL;
emit stopped();
}
- if (producer) m_mltProducer = new Mlt::Producer(producer->get_producer());
- else m_mltProducer = new Mlt::Producer();
+ if (producer) {
+ m_mltProducer = new Mlt::Producer(producer->get_producer());
+ } else m_mltProducer = new Mlt::Producer();
+ /*if (KdenliveSettings::dropbframes()) {
+ m_mltProducer->set("skip_loop_filter", "all");
+ m_mltProducer->set("skip_frame", "bidir");
+ }*/
if (!m_mltProducer || !m_mltProducer->is_valid()) kDebug() << " WARNING - - - - -INVALID PLAYLIST: ";
m_fps = m_mltProducer->get_fps();
int in = elem.attribute("in").toInt();
QString idString = elem.attribute("producer");
QString id = idString;
- bool hasSpeedAttribute = false;
- double speed;
+ double speed = 1.0;
if (idString.startsWith("slowmotion")) {
- hasSpeedAttribute = true;
id = idString.section(":", 1, 1);
speed = idString.section(":", 2, 2).toDouble();
} else id = id.section('_', 0, 0);
clipinfo.cropStart = GenTime(in, m_doc->fps());
clipinfo.track = ix;
//kDebug() << "// INSERTING CLIP: " << in << "x" << out << ", track: " << ix << ", ID: " << id << ", SCALE: " << m_scale << ", FPS: " << m_doc->fps();
- ClipItem *item = new ClipItem(clip, clipinfo, m_doc->fps(), false);
- if (hasSpeedAttribute) item->setSpeed(speed);
+ ClipItem *item = new ClipItem(clip, clipinfo, m_doc->fps(), speed, false);
m_scene->addItem(item);
clip->addReference();
position += (out - in + 1);
missingClip = new DocClipBase(m_doc->clipManager(), producerXml, id);
m_documentErrors.append(i18n("Boken clip producer %1\n", id));
} else m_documentErrors.append(i18n("Replaced wrong clip producer %1 with %2\n", id, missingClip->getId()));
- ClipItem *item = new ClipItem(missingClip, clipinfo, m_doc->fps(), false);
+ ClipItem *item = new ClipItem(missingClip, clipinfo, m_doc->fps(), 1.0, false);
m_scene->addItem(item);
missingClip->addReference();
position += (out - in + 1);