]> git.sesse.net Git - kdenlive/blobdiff - src/renderer.cpp
Fix aspect ratio when using split view
[kdenlive] / src / renderer.cpp
index 51670b58118d0e16a4a3131f7b337dd36564b34e..65706cbed34c96dc32f7cbb49acc7f5e3fcad969 100644 (file)
@@ -538,7 +538,8 @@ void Render::slotSplitView(bool doit)
                 transition->set("mlt_service", "composite");
                 transition->set("a_track", 0);
                 transition->set("b_track", i);
-                transition->set("distort", 1);
+                transition->set("distort", 0);
+               transition->set("aligned", 0);
                 transition->set("internal_added", "200");
                 QString geometry;
                 switch (screen) {
@@ -676,7 +677,6 @@ void Render::processFileProperties()
         KUrl url(path);
         Mlt::Producer *producer = NULL;
         CLIPTYPE type = (CLIPTYPE)info.xml.attribute("type").toInt();
-
         if (type == COLOR) {
             producer = new Mlt::Producer(*m_mltProfile, 0, ("colour:" + info.xml.attribute("colour")).toUtf8().constData());
         } else if (type == TEXT) {
@@ -684,15 +684,23 @@ void Render::processFileProperties()
             if (producer && producer->is_valid() && info.xml.hasAttribute("xmldata"))
                 producer->set("xmldata", info.xml.attribute("xmldata").toUtf8().constData());
         } else if (url.isEmpty()) {
+           //WARNING: when is this case used? Not sure it is working.. JBM/
             QDomDocument doc;
             QDomElement mlt = doc.createElement("mlt");
             QDomElement play = doc.createElement("playlist");
+           play.setAttribute("id", "playlist0");
             doc.appendChild(mlt);
             mlt.appendChild(play);
             play.appendChild(doc.importNode(info.xml, true));
+           QDomElement tractor = doc.createElement("tractor");
+           tractor.setAttribute("id", "tractor0");
+           QDomElement track = doc.createElement("track");
+           track.setAttribute("producer", "playlist0");
+           tractor.appendChild(track);
+           mlt.appendChild(tractor);
             producer = new Mlt::Producer(*m_mltProfile, "xml-string", doc.toString().toUtf8().constData());
         } else {
-            producer = new Mlt::Producer(*m_mltProfile, path.toUtf8().constData());
+           producer = new Mlt::Producer(*m_mltProfile, path.toUtf8().constData());
         }
 
         if (producer == NULL || producer->is_blank() || !producer->is_valid()) {
@@ -777,12 +785,12 @@ void Render::processFileProperties()
         if (type == COLOR || type == TEXT || type == IMAGE || type == SLIDESHOW) {
             int length;
             if (info.xml.hasAttribute("length")) {
-                if (clipOut > 0) duration = clipOut + 1;
                 length = info.xml.attribute("length").toInt();
                 clipOut = length - 1;
             }
             else length = info.xml.attribute("out").toInt() - info.xml.attribute("in").toInt();
             producer->set("length", length);
+           duration = length;
         }
 
         if (clipOut > 0) producer->set_in_and_out(info.xml.attribute("in").toInt(), clipOut);
@@ -818,7 +826,6 @@ void Render::processFileProperties()
         char property[200];
 
         if (frameNumber > 0) producer->seek(frameNumber);
-
         duration = duration > 0 ? duration : producer->get_playtime();
         filePropertyMap["duration"] = QString::number(duration);
         //kDebug() << "///////  PRODUCER: " << url.path() << " IS: " << producer->get_playtime();
@@ -871,13 +878,17 @@ void Render::processFileProperties()
 
        int vindex = -1;
        const QString mltService = producer->get("mlt_service");
-       
        if (mltService == "xml" || mltService == "consumer") {
-           // MLT playlist
-           mlt_profile prof = producer->get_profile();
-           filePropertyMap["progressive"] = QString::number(prof->progressive);
-           filePropertyMap["colorspace"] = QString::number(prof->colorspace);
-           filePropertyMap["fps"] = QString::number(mlt_profile_fps(prof));
+           // MLT playlist, create producer with blank profile to get real profile info
+           // TODO: is there an easier way to get this info (original source clip profile) from MLT?
+           Mlt::Profile *original_profile = new Mlt::Profile();
+           Mlt::Producer *tmpProd = new Mlt::Producer(*original_profile, path.toUtf8().constData());
+           filePropertyMap["progressive"] = QString::number(original_profile->progressive());
+           filePropertyMap["colorspace"] = QString::number(original_profile->colorspace());
+           filePropertyMap["fps"] = QString::number(original_profile->fps());
+           filePropertyMap["aspect_ratio"] = QString::number(original_profile->sar());
+           delete tmpProd;
+           delete original_profile;
        }
        else if (mltService == "avformat") {
            // Get frame rate
@@ -922,10 +933,10 @@ void Render::processFileProperties()
             filePropertyMap["frame_size"] = QString::number(frame->get_int("width")) + 'x' + QString::number(frame->get_int("height"));
             filePropertyMap["frequency"] = QString::number(frame->get_int("frequency"));
             filePropertyMap["channels"] = QString::number(frame->get_int("channels"));
-            filePropertyMap["aspect_ratio"] = frame->get("aspect_ratio");
+            if (!filePropertyMap.contains("aspect_ratio")) filePropertyMap["aspect_ratio"] = frame->get("aspect_ratio");
 
             if (frame->get_int("test_image") == 0) {
-                if (url.path().endsWith(".mlt") || url.path().endsWith(".westley") || url.path().endsWith(".kdenlive")) {
+                if (mltService == "xml" || mltService == "consumer") {
                     filePropertyMap["type"] = "playlist";
                     metadataPropertyMap["comment"] = QString::fromUtf8(producer->get("title"));
                 } else if (frame->get_int("test_audio") == 0)
@@ -1224,7 +1235,6 @@ int Render::setSceneList(QString playlist, int position)
 
     blockSignals(true);
     m_locale = QLocale();
-
     m_mltProducer = new Mlt::Producer(*m_mltProfile, "xml-string", playlist.toUtf8().constData());
     if (!m_mltProducer || !m_mltProducer->is_valid()) {
         kDebug() << " WARNING - - - - -INVALID PLAYLIST: " << playlist.toUtf8().constData();
@@ -4109,6 +4119,7 @@ const QList <Mlt::Producer *> Render::producersList()
         Mlt::Producer trackProducer(tt);
         delete tt;
         Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
+       if (!trackPlaylist.is_valid()) continue;
         int clipNb = trackPlaylist.count();
         for (int i = 0; i < clipNb; i++) {
             Mlt::Producer *c = trackPlaylist.get_clip(i);
@@ -4141,6 +4152,7 @@ void Render::fillSlowMotionProducers()
         Mlt::Producer trackProducer(tt);
         delete tt;
         Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
+       if (!trackPlaylist.is_valid()) continue;
         int clipNb = trackPlaylist.count();
         for (int i = 0; i < clipNb; i++) {
             Mlt::Producer *c = trackPlaylist.get_clip(i);
@@ -4511,7 +4523,22 @@ bool Render::getBlackMagicOutputDeviceList(KComboBox *devicelist)
 }
 
 void Render::slotMultiStreamProducerFound(const QString path, QList<int> audio_list, QList<int> video_list, stringMap data)
-{
+{ 
+    if (KdenliveSettings::automultistreams()) {
+       for (int i = 1; i < video_list.count(); i++) {
+           int vindex = video_list.at(i);
+           int aindex = 0;
+           if (i <= audio_list.count() -1) {
+               aindex = audio_list.at(i);
+           }
+           data.insert("video_index", QString::number(vindex));
+           data.insert("audio_index", QString::number(aindex));
+           data.insert("bypassDuplicate", "1");
+           emit addClip(KUrl(path), data);
+       }
+       return;
+    }
+    
     int width = 60.0 * m_mltProfile->dar();
     int swidth = 60.0 * m_mltProfile->width() / m_mltProfile->height();
     if (width % 2 == 1) width++;
@@ -4531,13 +4558,12 @@ void Render::slotMultiStreamProducerFound(const QString path, QList<int> audio_l
     for (int j = 1; j < video_list.count(); j++) {
        Mlt::Producer multiprod(* m_mltProfile, path.toUtf8().constData());
        multiprod.set("video_index", video_list.at(j));
-       kDebug()<<"// LOADING: "<<j<<" = "<<video_list.at(j);
        QImage thumb = KThumb::getFrame(&multiprod, 0, swidth, width, 60);
        QGroupBox *streamFrame = new QGroupBox(i18n("Video stream %1", video_list.at(j)), content);
        streamFrame->setProperty("vindex", video_list.at(j));
        groupList << streamFrame;
        streamFrame->setCheckable(true);
-       streamFrame->setChecked(false);
+       streamFrame->setChecked(true);
        QVBoxLayout *vh = new QVBoxLayout( streamFrame );
        QLabel *iconLabel = new QLabel(content);
        iconLabel->setPixmap(QPixmap::fromImage(thumb));
@@ -4548,7 +4574,7 @@ void Render::slotMultiStreamProducerFound(const QString path, QList<int> audio_l
                cb->addItem(i18n("Audio stream %1", audio_list.at(k)), audio_list.at(k));
            }
            comboList << cb;
-           cb->setCurrentIndex(j);
+           cb->setCurrentIndex(qMin(j, audio_list.count() - 1));
            vh->addWidget(cb);
        }
        vbox->addWidget(streamFrame);