#include "interfaces.h"
#include "config-kdenlive.h"
#include "cliptranscode.h"
+#include "clipstabilize.h"
#include "ui_templateclip_ui.h"
#include "colorscopes/vectorscope.h"
#include "colorscopes/waveform.h"
connect(m_projectList, SIGNAL(refreshClip(const QString &, bool)), m_monitorManager, SLOT(slotRefreshCurrentMonitor(const QString &)));
connect(m_projectList, SIGNAL(findInTimeline(const QString&)), this, SLOT(slotClipInTimeline(const QString&)));
connect(m_clipMonitor, SIGNAL(zoneUpdated(QPoint)), m_projectList, SLOT(slotUpdateClipCut(QPoint)));
+ connect(m_clipMonitor, SIGNAL(extractZone(const QString &, QPoint)), m_projectList, SLOT(slotCutClipJob(const QString &, QPoint)));
m_projectMonitorDock = new QDockWidget(i18n("Project Monitor"), this);
m_projectMonitorDock->setObjectName("project_monitor");
connect(m_recMonitor, SIGNAL(addProjectClip(KUrl)), this, SLOT(slotAddProjectClip(KUrl)));
connect(m_recMonitor, SIGNAL(addProjectClipList(KUrl::List)), this, SLOT(slotAddProjectClipList(KUrl::List)));
connect(m_recMonitor, SIGNAL(showConfigDialog(int, int)), this, SLOT(slotPreferences(int, int)));
+
#endif /* ! Q_WS_MAC */
m_monitorManager->initMonitors(m_clipMonitor, m_projectMonitor, m_recMonitor);
clipInTimeline->setIcon(KIcon("go-jump"));
QHash<QString,QMenu*> menus;
menus.insert("addMenu",static_cast<QMenu*>(factory()->container("generators", this)));
+ menus.insert("extractAudioMenu",static_cast<QMenu*>(factory()->container("extract_audio", this)));
menus.insert("transcodeMenu",static_cast<QMenu*>(factory()->container("transcoders", this)));
menus.insert("stabilizeMenu",static_cast<QMenu*>(factory()->container("stabilize", this)));
menus.insert("inTimelineMenu",clipInTimeline);
void MainWindow::loadStabilize()
{
QMenu* stabMenu= static_cast<QMenu*>(factory()->container("stabilize", this));
- stabMenu->clear();
- Mlt::Profile profile;
- if (Mlt::Factory::filter(profile,(char*)"videostab")){
- QAction *action=stabMenu->addAction("Videostab (vstab)");
- action->setData("videostab");
- connect(action,SIGNAL(triggered()), this, SLOT(slotStabilize()));
- }
- if (Mlt::Factory::filter(profile,(char*)"videostab2")){
- QAction *action=stabMenu->addAction("Videostab (transcode)");
- action->setData("videostab2");
- connect(action,SIGNAL(triggered()), this, SLOT(slotStabilize()));
+ if (stabMenu){
+ stabMenu->clear();
+ Mlt::Profile profile;
+ if (Mlt::Factory::filter(profile,(char*)"videostab")){
+ QAction *action=stabMenu->addAction("Videostab (vstab)");
+ action->setData("videostab");
+ connect(action,SIGNAL(triggered()), this, SLOT(slotStabilize()));
+ }
+ if (Mlt::Factory::filter(profile,(char*)"videostab2")){
+ QAction *action=stabMenu->addAction("Videostab (transcode)");
+ action->setData("videostab2");
+ connect(action,SIGNAL(triggered()), this, SLOT(slotStabilize()));
+ }
}
{
QMenu *transMenu = static_cast<QMenu*>(factory()->container("transcoders", this));
transMenu->clear();
+
+ QMenu *extractAudioMenu = static_cast<QMenu*>(factory()->container("extract_audio", this));
+ extractAudioMenu->clear();
KSharedConfigPtr config = KSharedConfig::openConfig("kdenlivetranscodingrc");
KConfigGroup transConfig(config, "Transcoding");
QMapIterator<QString, QString> i(profiles);
while (i.hasNext()) {
i.next();
- QStringList data = i.value().split(";", QString::SkipEmptyParts);
- QAction *a = transMenu->addAction(i.key());
+ QStringList data = i.value().split(";");
+ QAction *a;
+ // separate audio transcoding in a separate menu
+ if (data.count() > 2 && data.at(2) == "audio") {
+ a = extractAudioMenu->addAction(i.key());
+ }
+ else {
+ a = transMenu->addAction(i.key());
+ }
a->setData(data);
- if (data.count() > 1)
- a->setToolTip(data.at(1));
+ a->setToolTip(data.at(1));
connect(a, SIGNAL(triggered()), this, SLOT(slotTranscode()));
}
}
void MainWindow::slotStabilize(KUrl::List urls)
{
- QString condition;
+ QString condition,filtername;
+
if (urls.isEmpty()) {
QAction *action = qobject_cast<QAction *>(sender());
if (action){
- QString filtername=action->data().toString();
+ filtername=action->data().toString();
urls = m_projectList->getConditionalUrls(condition);
}
}
+ if (urls.isEmpty()) {
+ m_messageLabel->setMessage(i18n("No clip to transcode"), ErrorMessage);
+ return;
+ }
+ Mlt::Profile profile;
+ Mlt::Filter filter(profile,filtername.toUtf8().data());
+ ClipStabilize *d=new ClipStabilize(urls,filtername,&filter);
+ connect(d, SIGNAL(addClip(KUrl)), this, SLOT(slotAddProjectClip(KUrl)));
+ d->show();
+
}
void MainWindow::slotTranscode(KUrl::List urls)
void MainWindow::slotUpdateColorScopes()
{
bool request = false;
- kDebug()<<"// UPDATE SCOPES";
for (int i = 0; i < m_gfxScopesList.count(); i++) {
// Check if we need the renderer to send a new frame for update
if (!m_gfxScopesList.at(i)->widget()->visibleRegion().isEmpty() && !(static_cast<AbstractGfxScopeWidget *>(m_gfxScopesList.at(i)->widget())->autoRefreshEnabled())) request = true;
if (request && m_monitorManager->activeRenderer()) {
m_monitorManager->activeRenderer()->sendFrameUpdate();
}
+ if (m_audiosignal->isVisible() && m_recMonitor->abstractRender()) {
+ connect(m_recMonitor->abstractRender(), SIGNAL(audioSamplesSignal(const QVector<int16_t>&, const int&, const int&, const int&)), m_audiosignal, SLOT(slotReceiveAudio(const QVector<int16_t>&, const int&, const int&, const int&)));
+ }
}
void MainWindow::slotClearColorScopes()
kDebug()<<"-----------------------------------------\n"<<"Time elapsed: "<<m_timer.elapsed()<<"\n-------------------------";
}
+
#include "mainwindow.moc"
#ifdef DEBUG_MAINW