From c4622614335f36152ed4f05cdc5f94f07b5ee67c Mon Sep 17 00:00:00 2001 From: Ryan Roden-Corrent Date: Wed, 2 Sep 2015 13:00:00 -0400 Subject: [PATCH] Use RenderManager in ExportProjectDialog. Remove the rendering logic from the gui code in ExportProjectDialog and let RenderManger handle it instead. This is part of an effort to allow the CLI and the GUI to share the same rendering logic, setting the state for a --render-tracks CLI option similiar to the "Export Tracks" GUI option. --- include/ExportProjectDialog.h | 15 +-- src/gui/ExportProjectDialog.cpp | 186 +++++--------------------------- 2 files changed, 32 insertions(+), 169 deletions(-) diff --git a/include/ExportProjectDialog.h b/include/ExportProjectDialog.h index 46ab7fdb2..dfab28561 100644 --- a/include/ExportProjectDialog.h +++ b/include/ExportProjectDialog.h @@ -32,7 +32,7 @@ #include "ui_export_project.h" #include "ProjectRenderer.h" - +#include "RenderManager.h" class ExportProjectDialog : public QDialog, public Ui::ExportProjectDialog { @@ -50,26 +50,17 @@ protected: private slots: void startBtnClicked( void ); void updateTitleBar( int ); - void render(ProjectRenderer* renderer); - void multiRender(); - ProjectRenderer* prepRender(); - void popRender(); void accept(); + void startExport(); private: QString m_fileName; QString m_dirName; QString m_fileExtension; - typedef QVector RenderVector; - RenderVector m_renderers; bool m_multiExport; - typedef QVector TrackVector; - TrackVector m_unmuted; - TrackVector m_unmutedBB; ProjectRenderer::ExportFileFormats m_ft; - TrackVector m_tracksToRender; - ProjectRenderer* m_activeRenderer; + RenderManager* m_renderManager; } ; #endif diff --git a/src/gui/ExportProjectDialog.cpp b/src/gui/ExportProjectDialog.cpp index d81d6b917..23794db80 100644 --- a/src/gui/ExportProjectDialog.cpp +++ b/src/gui/ExportProjectDialog.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include "ExportProjectDialog.h" #include "Song.h" @@ -41,10 +42,10 @@ ExportProjectDialog::ExportProjectDialog( const QString & _file_name, m_fileName( _file_name ), m_fileExtension(), m_multiExport( multi_export ), - m_activeRenderer( NULL ) + m_renderManager( NULL ) { setupUi( this ); - setWindowTitle( tr( "Export project to %1" ).arg( + setWindowTitle( tr( "Export project to %1" ).arg( QFileInfo( _file_name ).fileName() ) ); // get the extension of the chosen file @@ -80,7 +81,6 @@ ExportProjectDialog::ExportProjectDialog( const QString & _file_name, connect( startButton, SIGNAL( clicked() ), this, SLOT( startBtnClicked() ) ); - } @@ -88,12 +88,7 @@ ExportProjectDialog::ExportProjectDialog( const QString & _file_name, ExportProjectDialog::~ExportProjectDialog() { - - for( RenderVector::ConstIterator it = m_renderers.begin(); - it != m_renderers.end(); ++it ) - { - delete (*it); - } + delete m_renderManager; } @@ -101,14 +96,12 @@ ExportProjectDialog::~ExportProjectDialog() void ExportProjectDialog::reject() { - for( RenderVector::ConstIterator it = m_renderers.begin(); it != m_renderers.end(); ++it ) - { - (*it)->abortProcessing(); + if( m_renderManager ) { + m_renderManager->abortProcessing(); } - if( m_activeRenderer ) { - m_activeRenderer->abortProcessing(); - } + delete m_renderManager; + m_renderManager = NULL; QDialog::reject(); } @@ -117,24 +110,10 @@ void ExportProjectDialog::reject() void ExportProjectDialog::accept() { - // If more to render, kick off next render job - if( m_renderers.isEmpty() == false ) - { - popRender(); - } - else - { - // If done, then reset mute states - while( m_unmuted.isEmpty() == false ) - { - Track* restoreTrack = m_unmuted.back(); - m_unmuted.pop_back(); - restoreTrack->setMuted( false ); - } + delete m_renderManager; + m_renderManager = NULL; - QDialog::accept(); - - } + QDialog::accept(); } @@ -142,16 +121,8 @@ void ExportProjectDialog::accept() void ExportProjectDialog::closeEvent( QCloseEvent * _ce ) { - for( RenderVector::ConstIterator it = m_renderers.begin(); it != m_renderers.end(); ++it ) - { - if( (*it)->isRunning() ) - { - (*it)->abortProcessing(); - } - } - - if( m_activeRenderer && m_activeRenderer->isRunning() ) { - m_activeRenderer->abortProcessing(); + if( m_renderManager ) { + m_renderManager->abortProcessing(); } QDialog::closeEvent( _ce ); @@ -159,94 +130,8 @@ void ExportProjectDialog::closeEvent( QCloseEvent * _ce ) -void ExportProjectDialog::popRender() -{ - if( m_multiExport && m_tracksToRender.isEmpty() == false ) - { - Track* renderTrack = m_tracksToRender.back(); - m_tracksToRender.pop_back(); - // Set must states for song tracks - for( TrackVector::ConstIterator it = m_unmuted.begin(); it != m_unmuted.end(); ++it ) - { - if( (*it) == renderTrack ) - { - (*it)->setMuted( false ); - } - else - { - (*it)->setMuted( true ); - } - } - } - - - // Pop next render job and start - m_activeRenderer = m_renderers.back(); - m_renderers.pop_back(); - render( m_activeRenderer ); -} - - - -void ExportProjectDialog::multiRender() -{ - m_dirName = m_fileName; - QString path = QDir(m_fileName).filePath("text.txt"); - - int x = 1; - - const TrackContainer::TrackList & tl = Engine::getSong()->tracks(); - - // Check for all unmuted tracks. Remember list. - for( TrackContainer::TrackList::ConstIterator it = tl.begin(); - it != tl.end(); ++it ) - { - Track* tk = (*it); - Track::TrackTypes type = tk->type(); - // Don't mute automation tracks - if ( tk->isMuted() == false && - ( type == Track::InstrumentTrack || type == Track::SampleTrack ) ) - { - m_unmuted.push_back(tk); - QString nextName = tk->name(); - nextName = nextName.remove(QRegExp("[^a-zA-Z]")); - QString name = QString( "%1_%2%3" ).arg( x++ ).arg( nextName ).arg( m_fileExtension ); - m_fileName = QDir(m_dirName).filePath(name); - prepRender(); - } - else if (! tk->isMuted() && type == Track::BBTrack ) - { - m_unmutedBB.push_back(tk); - } - - - } - - const TrackContainer::TrackList t2 = Engine::getBBTrackContainer()->tracks(); - for( TrackContainer::TrackList::ConstIterator it = t2.begin(); it != t2.end(); ++it ) - { - Track* tk = (*it); - if ( tk->isMuted() == false ) - { - m_unmuted.push_back(tk); - QString nextName = tk->name(); - nextName = nextName.remove(QRegExp("[^a-zA-Z]")); - QString name = QString( "%1_%2%3" ).arg( x++ ).arg( nextName ).arg( m_fileExtension ); - m_fileName = QDir(m_dirName).filePath(name); - prepRender(); - } - } - - - m_tracksToRender = m_unmuted; - - popRender(); -} - - - -ProjectRenderer* ExportProjectDialog::prepRender() +void ExportProjectDialog::startExport() { Mixer::qualitySettings qs = Mixer::qualitySettings( @@ -262,38 +147,33 @@ ProjectRenderer* ExportProjectDialog::prepRender() bitrates[ bitrateCB->currentIndex() ], static_cast( depthCB->currentIndex() ) ); + m_renderManager = new RenderManager( qs, os, m_ft, m_fileName ); + Engine::getSong()->setExportLoop( exportLoopCB->isChecked() ); Engine::getSong()->setRenderBetweenMarkers( renderMarkersCB->isChecked() ); - ProjectRenderer* renderer = new ProjectRenderer( qs, os, m_ft, m_fileName ); + connect( m_renderManager, SIGNAL( progressChanged( int ) ), + progressBar, SLOT( setValue( int ) ) ); + connect( m_renderManager, SIGNAL( progressChanged( int ) ), + this, SLOT( updateTitleBar( int ) )) ; + connect( m_renderManager, SIGNAL( finished() ), + this, SLOT( accept() ) ); + connect( m_renderManager, SIGNAL( finished() ), + gui->mainWindow(), SLOT( resetWindowTitle() ) ); - m_renderers.push_back(renderer); - - return renderer; -} - - - -void ExportProjectDialog::render( ProjectRenderer* renderer ) -{ - - if( renderer->isReady() ) + if ( m_multiExport ) { - connect( renderer, SIGNAL( progressChanged( int ) ), progressBar, SLOT( setValue( int ) ) ); - connect( renderer, SIGNAL( progressChanged( int ) ), this, SLOT( updateTitleBar( int ) )) ; - connect( renderer, SIGNAL( finished() ), this, SLOT( accept() ) ); - connect( renderer, SIGNAL( finished() ), gui->mainWindow(), SLOT( resetWindowTitle() ) ); - - renderer->startProcessing(); + m_renderManager->renderTracks(); } else { - accept(); + m_renderManager->renderProject(); } } + void ExportProjectDialog::startBtnClicked() { m_ft = ProjectRenderer::NumFileFormats; @@ -325,15 +205,7 @@ void ExportProjectDialog::startBtnClicked() updateTitleBar( 0 ); - if (m_multiExport==true) - { - multiRender(); - } - else - { - prepRender(); - popRender(); - } + startExport(); }