public void AddJob(Job job) { if (job == null) return; jobs.Add(job); pendingJobs.Add(job); UpdateJobsStatus(); if (pendingJobs.Count == 1) StartNextJob(); }
private void StartNextJob() { if (pendingJobs.Count == 0) { ResetGui(); return; } videoEditor = multimediaToolkit.GetVideoEditor(); videoEditor.Progress += OnProgress; currentJob = pendingJobs[0]; LoadJob(currentJob); try { videoEditor.EncodingSettings = currentJob.EncodingSettings; videoEditor.EnableTitle = currentJob.OverlayTitle; videoEditor.EnableAudio = currentJob.EnableAudio; videoEditor.Start(); } catch(Exception ex) { Log.Exception(ex); Log.Error("Error redering job: ", currentJob.Name); currentJob.State = JobState.Error; } }
private void LoadJob(Job job) { foreach(PlayListPlay segment in job.Playlist) { if(segment.Valid) videoEditor.AddSegment(segment.MediaFile.FilePath, segment.Start.MSeconds, segment.Duration.MSeconds, segment.Rate, segment.Name, segment.MediaFile.HasAudio); } }
public void DeleteJob(Job job) { job.State = JobState.Cancelled; CancelJob(job); }
public void CancelJob(Job job) { if (currentJob != job) return; videoEditor.Progress -= OnProgress; videoEditor.Cancel(); job.State = JobState.Cancelled; RemoveCurrentFromPending(); UpdateJobsStatus(); StartNextJob(); }
public Job ConfigureRenderingJob(IPlayList playlist) { VideoEditionProperties vep; Job job = null; int response; if (playlist.Count == 0) { WarningMessage(Catalog.GetString("The playlist you want to render is empty.")); return null; } vep = new VideoEditionProperties(); vep.TransientFor = mainWindow as Gtk.Window; response = vep.Run(); while(response == (int)ResponseType.Ok && vep.EncodingSettings.OutputFile == "") { WarningMessage(Catalog.GetString("Please, select a video file.")); response=vep.Run(); } if(response ==(int)ResponseType.Ok) job = new Job(playlist, vep.EncodingSettings, vep.EnableAudio, vep.TitleOverlay); vep.Destroy(); return job; }