mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-07-22 15:38:03 +02:00
2017-09-19 Fred Gleason <fredg@paravelsystems.com>
* Added support for cart/cut rendering to the 'Render Log' dialog in rdlogedit(1). * Added a length check when rendering to cart/cut in 'lib/rdrenderer.cpp'.
This commit is contained in:
parent
288eddca4c
commit
78fa7dbe17
@ -16027,3 +16027,8 @@
|
||||
to be midnight.
|
||||
2017-09-19 Fred Gleason <fredg@paravelsystems.com>
|
||||
* Added a 'Render Log' dialog to rdlogedit(1).
|
||||
2017-09-19 Fred Gleason <fredg@paravelsystems.com>
|
||||
* Added support for cart/cut rendering to the 'Render Log' dialog
|
||||
in rdlogedit(1).
|
||||
* Added a length check when rendering to cart/cut in
|
||||
'lib/rdrenderer.cpp'.
|
||||
|
@ -2230,6 +2230,10 @@ Zkuste to, prosím, znovu!</translation>
|
||||
<source>failed to play (NO AUDIO AVAILABLE)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rendered log is too long!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RDReport</name>
|
||||
|
@ -2221,6 +2221,10 @@ bitte erneut versuchen!</translation>
|
||||
<source>failed to play (NO AUDIO AVAILABLE)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rendered log is too long!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RDReport</name>
|
||||
|
@ -2223,6 +2223,10 @@ please try again!</source>
|
||||
<source>failed to play (NO AUDIO AVAILABLE)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rendered log is too long!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RDReport</name>
|
||||
|
@ -1882,6 +1882,10 @@ please try again!</source>
|
||||
<source>failed to play (NO AUDIO AVAILABLE)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rendered log is too long!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RDSoundPanel</name>
|
||||
|
@ -2171,6 +2171,10 @@ prøv ein gong til!</translation>
|
||||
<source>failed to play (NO AUDIO AVAILABLE)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rendered log is too long!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RDReport</name>
|
||||
|
@ -2171,6 +2171,10 @@ prøv ein gong til!</translation>
|
||||
<source>failed to play (NO AUDIO AVAILABLE)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rendered log is too long!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RDReport</name>
|
||||
|
@ -2170,6 +2170,10 @@ por favor, tente novamente!</translation>
|
||||
<source>failed to play (NO AUDIO AVAILABLE)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rendered log is too long!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RDReport</name>
|
||||
|
@ -239,6 +239,7 @@ RDRenderer::RDRenderer(RDUser *user,RDStation *station,RDSystem *system,
|
||||
render_station=station;
|
||||
render_system=system;
|
||||
render_config=config;
|
||||
render_total_passes=0;
|
||||
}
|
||||
|
||||
|
||||
@ -257,6 +258,7 @@ bool RDRenderer::renderToFile(const QString &outfile,RDLogEvent *log,
|
||||
char tempdir[PATH_MAX];
|
||||
bool ok=false;
|
||||
FILE *f=NULL;
|
||||
bool ret;
|
||||
|
||||
//
|
||||
// Verify Destination
|
||||
@ -270,6 +272,8 @@ bool RDRenderer::renderToFile(const QString &outfile,RDLogEvent *log,
|
||||
if(((s->format()!=RDSettings::Pcm16)&&(s->format()!=RDSettings::Pcm24))||
|
||||
(s->normalizationLevel()!=0)) {
|
||||
ProgressMessage("Pass 1 of 2");
|
||||
render_total_passes=2;
|
||||
|
||||
//
|
||||
// Get Temporary File
|
||||
//
|
||||
@ -292,14 +296,19 @@ bool RDRenderer::renderToFile(const QString &outfile,RDLogEvent *log,
|
||||
ProgressMessage(tr("Writing output file"));
|
||||
ok=ConvertAudio(temp_output_filename,outfile,s,err_msg);
|
||||
DeleteTempFile(temp_output_filename);
|
||||
emit lineStarted(log->size()+1,log->size()+1);
|
||||
if(!ok) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
ProgressMessage(tr("Pass 1 of 1"));
|
||||
return Render(outfile,log,chans,s,start_time,ignore_stops,err_msg,
|
||||
first_line,last_line,first_time,last_time);
|
||||
render_total_passes=1;
|
||||
|
||||
ret=Render(outfile,log,chans,s,start_time,ignore_stops,err_msg,
|
||||
first_line,last_line,first_time,last_time);
|
||||
emit lineStarted(log->size(),log->size());
|
||||
return ret;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -315,7 +324,26 @@ bool RDRenderer::renderToCart(unsigned cartnum,int cutnum,RDLogEvent *log,
|
||||
char tempdir[PATH_MAX];
|
||||
bool ok=false;
|
||||
|
||||
if(first_line<0) {
|
||||
first_line=0;
|
||||
}
|
||||
if(last_line<0) {
|
||||
last_line=log->size();
|
||||
}
|
||||
|
||||
//
|
||||
// Check that we won't overflow the 32 bit BWF structures
|
||||
// when we go to import the rendered log back into the audio store
|
||||
//
|
||||
if((double)log->length(first_line,last_line-1)/1000.0>=
|
||||
(1073741824.0/((double)s->channels()*(double)s->sampleRate()))) {
|
||||
*err_msg=tr("Rendered log is too long!");
|
||||
return false;
|
||||
}
|
||||
|
||||
ProgressMessage(tr("Pass 1 of 2"));
|
||||
render_total_passes=2;
|
||||
|
||||
//
|
||||
// Verify Destination
|
||||
//
|
||||
@ -350,6 +378,7 @@ bool RDRenderer::renderToCart(unsigned cartnum,int cutnum,RDLogEvent *log,
|
||||
ProgressMessage(tr("Importing cart"));
|
||||
ok=ImportCart(temp_output_filename,cartnum,cutnum,err_msg);
|
||||
DeleteTempFile(temp_output_filename);
|
||||
emit lineStarted(log->size()+1,log->size()+1);
|
||||
if(!ok) {
|
||||
return false;
|
||||
}
|
||||
@ -453,12 +482,13 @@ bool RDRenderer::Render(const QString &outfile,RDLogEvent *log,unsigned chans,
|
||||
//
|
||||
for(unsigned i=0;i<lls.size();i++) {
|
||||
if(render_abort) {
|
||||
emit lineStarted(lls.size());
|
||||
emit lineStarted(log->size()+render_total_passes-1,
|
||||
log->size()+render_total_passes-1);
|
||||
*err_msg+="Render aborted.\n";
|
||||
sf_close(sf_out);
|
||||
return false;
|
||||
}
|
||||
emit lineStarted(i);
|
||||
emit lineStarted(i,log->size()+render_total_passes-1);
|
||||
if(((first_line==-1)||(first_line<=(int)i))&&
|
||||
((last_line==-1)||(last_line>(int)i))) {
|
||||
if(lls.at(i)->transType()==RDLogLine::Stop) {
|
||||
|
@ -97,7 +97,7 @@ class RDRenderer : public QObject
|
||||
|
||||
signals:
|
||||
void progressMessageSent(const QString &msg);
|
||||
void lineStarted(int linno);
|
||||
void lineStarted(int linno,int totallines);
|
||||
|
||||
private:
|
||||
bool Render(const QString &outfile,RDLogEvent *log,unsigned chans,
|
||||
@ -121,6 +121,7 @@ class RDRenderer : public QObject
|
||||
RDConfig *render_config;
|
||||
QStringList render_warnings;
|
||||
bool render_abort;
|
||||
int render_total_passes;
|
||||
};
|
||||
|
||||
|
||||
|
@ -466,11 +466,11 @@ EditLog::EditLog(QString logname,QString *filter,QString *group,
|
||||
connect(edit_saveas_button,SIGNAL(clicked()),this,SLOT(saveasData()));
|
||||
|
||||
//
|
||||
// Render As Button
|
||||
// Render Button
|
||||
//
|
||||
edit_renderas_button=new QPushButton(this);
|
||||
edit_renderas_button->setFont(button_font);
|
||||
edit_renderas_button->setText(tr("Render")+"\n"+tr("As"));
|
||||
edit_renderas_button->setText(tr("Render"));
|
||||
connect(edit_renderas_button,SIGNAL(clicked()),this,SLOT(renderasData()));
|
||||
|
||||
//
|
||||
|
@ -80,13 +80,25 @@ RenderDialog::RenderDialog(RDStation *station,RDSystem *system,RDConfig *config,
|
||||
render_settings->setQuality(3);
|
||||
render_settings->setNormalizationLevel(0);
|
||||
|
||||
//
|
||||
// Render To Type
|
||||
//
|
||||
render_to_box=new QComboBox(this);
|
||||
render_to_box->insertItem(tr("Cart/Cut"));
|
||||
render_to_box->insertItem(tr("File"));
|
||||
connect(render_to_box,SIGNAL(activated(int)),this,SLOT(toChangedData(int)));
|
||||
render_to_label=new QLabel(tr("Render To")+":",this);
|
||||
render_to_label->setFont(button_font);
|
||||
render_to_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
|
||||
|
||||
//
|
||||
// Filename
|
||||
//
|
||||
render_filename_edit=new QLineEdit(this);
|
||||
render_filename_edit->setReadOnly(true);
|
||||
connect(render_filename_edit,SIGNAL(textChanged(const QString &)),
|
||||
this,SLOT(filenameChangedData(const QString &)));
|
||||
render_filename_label=new QLabel(tr("Render To File")+":",this);
|
||||
render_filename_label=new QLabel(tr("Cart/Cut")+":",this);
|
||||
render_filename_label->setFont(button_font);
|
||||
render_filename_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
|
||||
render_filename_button=new QPushButton(tr("Select"),this);
|
||||
@ -168,7 +180,7 @@ RenderDialog::~RenderDialog()
|
||||
|
||||
QSize RenderDialog::sizeHint() const
|
||||
{
|
||||
return QSize(500,200);
|
||||
return QSize(500,230);
|
||||
}
|
||||
|
||||
|
||||
@ -186,6 +198,23 @@ int RenderDialog::exec(RDUser *user,RDLogEvent *log,
|
||||
}
|
||||
|
||||
|
||||
void RenderDialog::toChangedData(int item)
|
||||
{
|
||||
if(item) {
|
||||
render_filename_label->setText(tr("Filename")+":");
|
||||
render_filename_edit->setReadOnly(false);
|
||||
}
|
||||
else {
|
||||
render_filename_label->setText(tr("Cart/Cut")+":");
|
||||
render_filename_edit->setReadOnly(true);
|
||||
}
|
||||
render_filename_edit->clear();
|
||||
render_to_cartnum=0;
|
||||
render_to_cutnum=-1;
|
||||
render_render_button->setDisabled(true);
|
||||
}
|
||||
|
||||
|
||||
void RenderDialog::filenameChangedData(const QString &str)
|
||||
{
|
||||
render_render_button->setDisabled(str.isEmpty());
|
||||
@ -194,13 +223,27 @@ void RenderDialog::filenameChangedData(const QString &str)
|
||||
|
||||
void RenderDialog::selectData()
|
||||
{
|
||||
QString filename=
|
||||
QFileDialog::getSaveFileName(render_save_path,RD_AUDIO_FILE_FILTER,this,"",
|
||||
"RDLogEdit - "+tr("Render Log"));
|
||||
if(!filename.isEmpty()) {
|
||||
render_filename_edit->setText(filename);
|
||||
filenameChangedData(filename);
|
||||
render_save_path=RDGetPathPart(filename);
|
||||
if(render_to_box->currentItem()) {
|
||||
QString filename=
|
||||
QFileDialog::getSaveFileName(render_save_path,RD_AUDIO_FILE_FILTER,
|
||||
this,"","RDLogEdit - "+tr("Render Log"));
|
||||
if(!filename.isEmpty()) {
|
||||
render_filename_edit->setText(filename);
|
||||
filenameChangedData(filename);
|
||||
render_save_path=RDGetPathPart(filename);
|
||||
}
|
||||
}
|
||||
else {
|
||||
QString cutname;
|
||||
RDCutDialog *d=new RDCutDialog(&cutname,render_station,render_system,
|
||||
NULL,NULL,NULL,"",false,true,true,this);
|
||||
if(d->exec()==0) {
|
||||
render_to_cartnum=RDCut::cartNumber(cutname);
|
||||
render_to_cutnum=RDCut::cutNumber(cutname);
|
||||
render_filename_edit->setText(QString().sprintf("%06u:%03d",
|
||||
render_to_cartnum,render_to_cutnum));
|
||||
}
|
||||
delete d;
|
||||
}
|
||||
}
|
||||
|
||||
@ -225,6 +268,7 @@ void RenderDialog::audiosettingsData()
|
||||
void RenderDialog::renderData()
|
||||
{
|
||||
QString err_msg;
|
||||
bool result;
|
||||
|
||||
int first_line=0;
|
||||
int last_line=render_log->size();
|
||||
@ -238,20 +282,28 @@ void RenderDialog::renderData()
|
||||
}
|
||||
RDRenderer *r=
|
||||
new RDRenderer(render_user,render_station,render_system,render_config,this);
|
||||
connect(r,SIGNAL(lineStarted(int)),
|
||||
render_progress_dialog,SLOT(setProgress(int)));
|
||||
connect(r,SIGNAL(lineStarted(int,int)),
|
||||
render_progress_dialog,SLOT(setProgress(int,int)));
|
||||
connect(render_progress_dialog,SIGNAL(cancelled()),r,SLOT(abort()));
|
||||
render_progress_dialog->setTotalSteps(render_log->size());
|
||||
if(!r->renderToFile(render_filename_edit->text(),render_log,2,render_settings,
|
||||
if(render_to_box->currentItem()) {
|
||||
result=
|
||||
r->renderToFile(render_filename_edit->text(),render_log,2,render_settings,
|
||||
start_time,render_ignorestop_box->currentItem(),
|
||||
&err_msg,first_line,last_line)) {
|
||||
&err_msg,first_line,last_line);
|
||||
}
|
||||
else {
|
||||
result=
|
||||
r->renderToCart(render_to_cartnum,render_to_cutnum,render_log,2,
|
||||
render_settings,start_time,
|
||||
render_ignorestop_box->currentItem(),
|
||||
&err_msg,first_line,last_line);
|
||||
}
|
||||
if(!result) {
|
||||
QMessageBox::warning(this,"RDLogEdit - "+tr("Rendering Error"),
|
||||
err_msg);
|
||||
render_progress_dialog->setProgress(render_log->size());
|
||||
delete r;
|
||||
return;
|
||||
}
|
||||
render_progress_dialog->setProgress(render_log->size());
|
||||
delete r;
|
||||
|
||||
done(true);
|
||||
@ -272,23 +324,26 @@ void RenderDialog::closeEvent(QCloseEvent *e)
|
||||
|
||||
void RenderDialog::resizeEvent(QResizeEvent *e)
|
||||
{
|
||||
render_filename_label->setGeometry(10,10,95,20);
|
||||
render_filename_edit->setGeometry(110,10,size().width()-190,20);
|
||||
render_filename_button->setGeometry(size().width()-70,8,60,25);
|
||||
render_to_label->setGeometry(10,10,65,20);
|
||||
render_to_box->setGeometry(80,10,100,20);
|
||||
|
||||
render_audiosettings_label->setGeometry(10,40,135,20);
|
||||
render_audiosettings_edit->setGeometry(150,40,size().width()-230,20);
|
||||
render_audiosettings_button->setGeometry(size().width()-70,38,60,25);
|
||||
render_filename_label->setGeometry(10,40,95,20);
|
||||
render_filename_edit->setGeometry(110,40,size().width()-190,20);
|
||||
render_filename_button->setGeometry(size().width()-70,38,60,25);
|
||||
|
||||
render_starttime_label->setGeometry(10,62,135,20);
|
||||
render_starttime_box->setGeometry(150,62,160,20);
|
||||
render_starttime_edit->setGeometry(315,62,80,20);
|
||||
render_audiosettings_label->setGeometry(10,70,135,20);
|
||||
render_audiosettings_edit->setGeometry(150,70,size().width()-230,20);
|
||||
render_audiosettings_button->setGeometry(size().width()-70,68,60,25);
|
||||
|
||||
render_events_label->setGeometry(10,84,135,20);
|
||||
render_events_box->setGeometry(150,84,160,20);
|
||||
render_starttime_label->setGeometry(10,95,135,20);
|
||||
render_starttime_box->setGeometry(150,95,160,20);
|
||||
render_starttime_edit->setGeometry(315,95,80,20);
|
||||
|
||||
render_ignorestop_label->setGeometry(10,106,135,20);
|
||||
render_ignorestop_box->setGeometry(150,106,160,20);
|
||||
render_events_label->setGeometry(10,117,135,20);
|
||||
render_events_box->setGeometry(150,117,160,20);
|
||||
|
||||
render_ignorestop_label->setGeometry(10,139,135,20);
|
||||
render_ignorestop_box->setGeometry(150,139,160,20);
|
||||
|
||||
render_render_button->
|
||||
setGeometry(size().width()-180,size().height()-60,80,50);
|
||||
|
@ -31,6 +31,7 @@
|
||||
|
||||
#include <rdbusybar.h>
|
||||
#include <rdconfig.h>
|
||||
#include <rdcut_dialog.h>
|
||||
#include <rdsettings.h>
|
||||
#include <rdlog_event.h>
|
||||
#include <rdsystem.h>
|
||||
@ -56,6 +57,7 @@ class RenderDialog : public QDialog
|
||||
int exec(RDUser *user,RDLogEvent *log,int first_line,int last_line);
|
||||
|
||||
private slots:
|
||||
void toChangedData(int item);
|
||||
void filenameChangedData(const QString &str);
|
||||
void selectData();
|
||||
void starttimeSourceData(int item);
|
||||
@ -77,6 +79,8 @@ class RenderDialog : public QDialog
|
||||
int render_last_line;
|
||||
RDSettings *render_settings;
|
||||
QProgressDialog *render_progress_dialog;
|
||||
QLabel *render_to_label;
|
||||
QComboBox *render_to_box;
|
||||
QLabel *render_filename_label;
|
||||
QLineEdit *render_filename_edit;
|
||||
QLabel *render_starttime_label;
|
||||
@ -93,6 +97,8 @@ class RenderDialog : public QDialog
|
||||
QPushButton *render_render_button;
|
||||
QPushButton *render_cancel_button;
|
||||
QString render_save_path;
|
||||
unsigned render_to_cartnum;
|
||||
int render_to_cutnum;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user