package nodebox.movie; import java.io.File; import java.util.ArrayList; public abstract class AbstractVideoFormat implements VideoFormat { private static final String SIZE_ARG_TEMPLATE = "%sx%s"; private String displayName; private String extension; private int width, height; public AbstractVideoFormat(String displayName, String extension) { this.displayName = displayName; this.extension = extension; } public AbstractVideoFormat(String displayName, String extension, int width, int height) { this(displayName, extension); this.width = width; this.height = height; } public String getDisplayName() { return displayName; } public String getExtension() { return extension; } public int getWidth() { return width; } public int getHeight() { return height; } protected String getPresetLocation(String preset) { String format = String.format(Movie.FFMPEG_PRESET_TEMPLATE, preset); if (!new File(format).exists()) { format = nodebox.util.FileUtils.getApplicationFile(format).getAbsolutePath(); } return format; } public ArrayList<String> getArgumentList() { return getArgumentList(null); } protected String getSizeArgument(int inputWidth, int inputHeight) { if (inputWidth > width || inputHeight > height) { float widthRatio = (float) inputWidth / width; float heightRatio = (float) inputHeight / height; float ratio = Math.max(widthRatio, heightRatio); return String.format(SIZE_ARG_TEMPLATE, roundEven((int) (inputWidth / ratio)), roundEven((int) (inputHeight / ratio))); } return null; } private int roundEven(int p) { return p + (p % 2); } public File ensureFileExtension(File file) { return new File(ensureFileExtension(file.getPath())); } public String ensureFileExtension(String file) { if (file.endsWith("." + getExtension())) return file; return file + "." + getExtension(); } @Override public String toString() { return getDisplayName(); } }