mirror of
https://github.com/LMMS/lmms.git
synced 2026-04-02 21:35:22 -04:00
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.
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
#include <QFileInfo>
|
||||
#include <QDir>
|
||||
#include <QMessageBox>
|
||||
#include <QDebug>
|
||||
|
||||
#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<ProjectRenderer::Depths>( 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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user