/* JWildfire - an image and animation processor written in Java Copyright (C) 1995-2015 Andreas Maschke This is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this software; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jwildfire.create.tina.batch; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import javax.swing.JProgressBar; import javax.swing.JTable; import org.jwildfire.base.Prefs; import org.jwildfire.base.QualityProfile; import org.jwildfire.base.ResolutionProfile; import org.jwildfire.create.tina.random.RandomGeneratorType; import org.jwildfire.create.tina.render.ProgressUpdater; /** * This is a headless controller used for commandline or web server based rendering (Swing components not needed) * @author boleslaw */ public class HeadlessBatchRendererController implements JobRenderThreadController { JProgressBar pro = new JProgressBar(); JTable table = new JTable(); @Override public void refreshRenderBatchJobsTable() { } @Override public void onJobFinished() { System.out.println("Done"); } @Override public JProgressBar getTotalProgressBar() { return pro; } @Override public JTable getRenderBatchJobsTable() { return table; } @Override public ProgressUpdater getJobProgressUpdater() { return new ProgressUpdater() { @Override public void updateProgress(int pStep) { } @Override public void initProgress(int pMaxSteps) { } }; } @Override public JProgressBar getJobProgressBar() { return pro; } public static void main(String args[]) throws Exception { // args = new String[]{"/dev/shm/","400","400","80"};//,"ZIGGURAT"}; int height; int width; int quality; String filename; File f; List<File> files = new LinkedList<File>(); long start = System.nanoTime(); if (args.length < 4) { usage(args); return; } else { try { height = Integer.parseInt(args[1]); width = Integer.parseInt(args[2]); quality = Integer.parseInt(args[3]); filename = args[0].trim(); String was = Prefs.getPrefs().getTinaRandomNumberGenerator().name(); if (args.length > 4 && Arrays.toString(RandomGeneratorType.values()).contains(args[4])) { Prefs.getPrefs().setTinaRandomNumberGenerator(RandomGeneratorType.valueOf(args[4])); System.out.println(was + " changed to " + Prefs.getPrefs().getTinaRandomNumberGenerator().name()); } f = new File(filename); if (!f.exists()) throw new Exception(filename + " does not exist"); if (f.isDirectory()) { final File[] listFiles = f.listFiles(); if (listFiles != null) for (File fi : listFiles) { if (fi.canRead() && fi.exists() && fi.getName().toLowerCase().endsWith(".flame")) files.add(fi); } } else if (f.getName().toLowerCase().endsWith(".flame")) files.add(f); } catch (Exception e) { usage(args); System.err.println(e.getMessage()); return; } } ResolutionProfile respro = new ResolutionProfile(true, width, height); JobRenderThreadController controller = new HeadlessBatchRendererController(); List<Job> joblist = new ArrayList<Job>(); for (File fi : files) { Job j = new Job(); j.setCustomHeight(height); j.setCustomWidth(width); j.setCustomQuality(quality); j.setFlameFilename(fi.getCanonicalPath()); joblist.add(j); } QualityProfile qualpro = new QualityProfile(); qualpro.setQuality(quality); JobRenderThread job = new JobRenderThread(controller, joblist, respro, qualpro, true, false); job.run(); System.out.println((System.nanoTime() - start) / 1000 / 1000 + " ms"); } private static void usage(String args[]) { System.out.println("Please include the following parameters: \n\tfilename,height,width,quality,[optional:rng]\n" + "Example: HeadlessBatchRendererController file1.flame,1024,1280,2000\n" + "Example: HeadlessBatchRendererController file1.flame,1024,1280,2000,ZIGGURAT"); if (args != null) System.out.println("You Passed: " + Arrays.toString(args) + "\n"); System.out.println(); } }