#include "mwindowgui.h"
#include "plugin.h"
#include "pluginset.h"
+#include "preferences.h"
#include "rescale.h"
#include "track.h"
#include "tracks.h"
close_window();
}
-int CreateDVD_Thread::create_dvd_jobs(ArrayList<BatchRenderJob*> *jobs,
- const char *asset_dir, const char *asset_title)
+int CreateDVD_Thread::create_dvd_jobs(ArrayList<BatchRenderJob*> *jobs, const char *asset_dir)
{
EDL *edl = mwindow->edl;
if( !edl || !edl->session ) {
fprintf(fp,"\n");
const char *exec_path = File::get_cinlib_path();
fprintf(fp,"PATH=$PATH:%s\n",exec_path);
- if( !use_ffmpeg ) {
- fprintf(fp,"mplex -f 8 -o $1/dvd.mpg $1/dvd.m2v $1/dvd.ac3\n");
- fprintf(fp,"\n");
+ if( mwindow->preferences->use_renderfarm ||
+ (use_label_chapters && edl->labels ) ) {
+ if( !use_ffmpeg ) {
+ fprintf(fp, "cat > $1/dvd.m2v $1/dvd.m2v0*\n");
+ fprintf(fp, "mplex -M -f 8 -o $1/dvd.mpg $1/dvd.m2v $1/dvd.ac3\n");
+ }
+ else
+ fprintf(fp, "ffmpeg -f concat -safe 0 -i <(for f in \"$1/dvd.mpg0\"*; do "
+ "echo \"file '$f'\"; done) -c copy -y $1/dvd.mpg\n");
}
+ else
+ fprintf(fp, "mplex -f 8 -o $1/dvd.mpg $1/dvd.m2v $1/dvd.ac3\n");
fprintf(fp,"rm -rf $1/iso\n");
fprintf(fp,"mkdir -p $1/iso\n");
fprintf(fp,"\n");
fprintf(fp,"\n");
fprintf(fp,"echo To burn dvd, load blank media and run:\n");
fprintf(fp,"echo growisofs -dvd-compat -Z /dev/dvd -dvd-video $1/iso\n");
+ fprintf(fp,"kill $$\n");
fprintf(fp,"\n");
fclose(fp);
- if( use_wide_audio ) {
- session->audio_channels = session->audio_tracks = DVD_WIDE_CHANNELS;
- session->achannel_positions[0] = 90;
- session->achannel_positions[1] = 150;
- session->achannel_positions[2] = 30;
- session->achannel_positions[3] = 210;
- session->achannel_positions[4] = 330;
- session->achannel_positions[5] = 270;
- if( edl->tracks->recordable_audio_tracks() == DVD_WIDE_CHANNELS )
- mwindow->remap_audio(MWindow::AUDIO_1_TO_1);
- }
- else {
- session->audio_channels = session->audio_tracks = DVD_CHANNELS;
- session->achannel_positions[0] = 180;
- session->achannel_positions[1] = 0;
- if( edl->tracks->recordable_audio_tracks() == DVD_WIDE_CHANNELS )
- mwindow->remap_audio(MWindow::AUDIO_5_1_TO_2);
- }
+ session->audio_channels = session->audio_tracks =
+ !use_wide_audio ? DVD_CHANNELS : DVD_WIDE_CHANNELS;
+ for( int i=0; i<MAX_CHANNELS; ++i )
+ session->achannel_positions[i] = default_audio_channel_position(i, session->audio_channels);
+ int audio_mapping = edl->tracks->recordable_audio_tracks() == DVD_WIDE_CHANNELS &&
+ !use_wide_audio ? MWindow::AUDIO_5_1_TO_2 : MWindow::AUDIO_1_TO_1;
+ mwindow->remap_audio(audio_mapping);
double new_samplerate = session->sample_rate;
double new_framerate = session->frame_rate;
+ edl->retrack();
edl->rechannel();
edl->resample(old_samplerate, new_samplerate, TRACK_AUDIO);
edl->resample(old_framerate, new_framerate, TRACK_VIDEO);
char xml_filename[BCTEXTLEN];
sprintf(xml_filename, "%s/dvd.xml", asset_dir);
FileXML xml_file;
- edl->save_xml(&xml_file, xml_filename, 0, 0);
+ edl->save_xml(&xml_file, xml_filename);
xml_file.terminate_string();
if( xml_file.write_to_file(xml_filename) ) {
char msg[BCTEXTLEN];
return 1;
}
- BatchRenderJob *job = new BatchRenderJob(mwindow->preferences);
+ BatchRenderJob *job = new BatchRenderJob(mwindow->preferences, use_label_chapters);
jobs->append(job);
strcpy(&job->edl_path[0], xml_filename);
Asset *asset = job->asset;
FFMPEG::load_options(option_path, asset->ff_video_options,
sizeof(asset->ff_video_options));
asset->ff_video_bitrate = vid_bitrate;
- asset->ff_video_quality = 0;
+ asset->ff_video_quality = -1;
}
else {
sprintf(&asset->path[0],"%s/dvd.m2v", asset_dir);
asset->vmpeg_preset = 8;
asset->vmpeg_field_order = 0;
asset->vmpeg_pframe_distance = 0;
- job = new BatchRenderJob(mwindow->preferences);
+ job = new BatchRenderJob(mwindow->preferences, 0, 0);
jobs->append(job);
strcpy(&job->edl_path[0], xml_filename);
asset = job->asset;
asset->ac3_bitrate = dvd_kaudio_rate;
}
- job = new BatchRenderJob(mwindow->preferences);
+ job = new BatchRenderJob(mwindow->preferences, 0, 0);
jobs->append(job);
job->edl_path[0] = '@';
strcpy(&job->edl_path[1], script_filename);
edit->startproject, edit->length,
PLUGIN_STANDALONE, 0, &keyframe, 0);
}
+ vtrk->optimize();
}
}
insert_video_plugin("Histogram", &keyframe);
}
char asset_dir[BCTEXTLEN], jobs_path[BCTEXTLEN];
- sprintf(asset_dir, "%s/%s", tmp_path, asset_title);
- sprintf(jobs_path, "%s/dvd.jobs", asset_dir);
+ snprintf(asset_dir, sizeof(asset_dir), "%s/%s", tmp_path, asset_title);
+ snprintf(jobs_path, sizeof(jobs_path), "%s/dvd.jobs", asset_dir);
mwindow->batch_render->reset(jobs_path);
- int ret = create_dvd_jobs(&mwindow->batch_render->jobs, asset_dir, asset_title);
+ int ret = create_dvd_jobs(&mwindow->batch_render->jobs, asset_dir);
mwindow->undo->update_undo_after(_("create dvd"), LOAD_ALL);
mwindow->resync_guis();
if( ret ) return;
int64_t CreateDVD_DiskSpace::tmp_path_space()
{
- const char *path = gui->tmp_path->get_text();
+ const char *path = gui->thread->tmp_path;
if( access(path,R_OK+W_OK) ) return 0;
struct statfs sfs;
if( statfs(path, &sfs) ) return 0;
int CreateDVD_TmpPath::handle_event()
{
+ get_text();
gui->disk_space->update();
return 1;
}
CreateDVD_AssetTitle::CreateDVD_AssetTitle(CreateDVD_GUI *gui, int x, int y, int w)
- : BC_TextBox(x, y, w, 1, 0, gui->thread->asset_title, 1, MEDIUMFONT)
+ : BC_TextBox(x, y, w, 1, -(int)sizeof(gui->thread->asset_title),
+ gui->thread->asset_title, 1, MEDIUMFONT)
{
this->gui = gui;
}
{
}
+int CreateDVD_AssetTitle::handle_event()
+{
+ get_text();
+ return 1;
+}
+
CreateDVD_Deinterlace::CreateDVD_Deinterlace(CreateDVD_GUI *gui, int x, int y)
: BC_CheckBox(x, y, &gui->thread->use_deinterlace, _("Deinterlace"))
edit->startproject, edit->length,
PLUGIN_STANDALONE, 0, default_keyframe, 0);
}
+ vtrk->optimize();
}
return 0;
}
if( !EQUIV(aspect, dvd_aspect) ) use_scale = Rescale::scaled;
}
for( int i=0; i<trk->plugin_set.size(); ++i ) {
- for(Plugin *plugin = (Plugin*)trk->plugin_set[i]->first;
- plugin;
- plugin = (Plugin*)plugin->next) {
- if( !strcmp(plugin->title, _("Deinterlace")) )
+ for( Plugin *plugin = (Plugin*)trk->plugin_set[i]->first;
+ plugin; plugin=(Plugin*)plugin->next ) {
+ if( !strcmp(plugin->title, "Deinterlace") )
has_deinterlace = 1;
- if( !strcmp(plugin->title, _("Auto Scale")) ||
- !strcmp(plugin->title, _("Scale Ratio")) ||
- !strcmp(plugin->title, _("Scale")) )
+ if( !strcmp(plugin->title, "Auto Scale") ||
+ !strcmp(plugin->title, "Scale Ratio") ||
+ !strcmp(plugin->title, "Scale") )
has_scale = 1;
}
}