// Path: src/net/straylightlabs/archivo/utilities/OSHelper.java
// public class OSHelper {
//     private static final String osName;
//     private static final Runtime runtime;
//     private static int cpuThreads;
//     private static Boolean isAMD64;
//     private static String exeSuffix;
// 
//     @SuppressWarnings("unused")
//     private final static Logger logger = LoggerFactory.getLogger(OSHelper.class);
// 
//     static {
//         osName = System.getProperty("os.name").toLowerCase();
//         runtime = Runtime.getRuntime();
//     }
// 
//     public static boolean isWindows() {
//         return osName.startsWith("windows");
//     }
// 
//     public static boolean isMacOS() {
//         return osName.startsWith("mac os");
//     }
// 
//     public static String getExeSuffix() {
//         if (exeSuffix == null) {
//             if (isWindows()) {
//                 exeSuffix = ".exe";
//             } else {
//                 exeSuffix = "";
//             }
//         }
//         return exeSuffix;
//     }
// 
//     public static String getArchSuffix() {
//         if (isWindows()) {
//             if (isAMD64()) {
//                 return "-64";
//             } else {
//                 return "-32";
//             }
//         } else {
//             return "";
//         }
//     }
// 
//     private static boolean isAMD64() {
//         if (isAMD64 == null) {
//             String arch = System.getenv("PROCESSOR_ARCHITECTURE");
//             isAMD64 = arch.equalsIgnoreCase("amd64");
//         }
//         return isAMD64;
//     }
// 
//     public static int getProcessorThreads() {
//         if (cpuThreads == 0) {
//             cpuThreads = runtime.availableProcessors();
//         }
//         return cpuThreads;
//     }
// 
//     @SuppressWarnings("unused")
//     public static Path getApplicationDirectory() {
//         if (isWindows()) {
//             String programFilesEnv = System.getenv("ProgramFiles");
//             if (programFilesEnv != null) {
//                 return Paths.get(programFilesEnv);
//             } else {
//                 return Paths.get("C:");
//             }
//         } else {
//             return Paths.get("/");
//         }
//     }
// 
//     public static Path getDataDirectory() {
//         Path dataDir;
// 
//         if (isWindows()) {
//             dataDir = Paths.get(System.getenv("APPDATA"), "Archivo");
//         } else if (isMacOS()) {
//             dataDir = Paths.get(System.getProperty("user.home"), "Library", "Application Support", "Archivo");
//         } else {
//             dataDir = Paths.get(System.getProperty("user.home"), ".archivo");
//         }
// 
//         return dataDir;
//     }
// 
//     public static String getFileBrowserName() {
//         if (isWindows()) {
//             return "File Explorer";
//         } else if (isMacOS()) {
//             return "Finder";
//         } else {
//             return "File Browser";
//         }
//     }
// }


import java.util.HashMap;
import java.util.Map;
import net.straylightlabs.archivo.utilities.OSHelper;
import java.util.Collections;
        return supportsQSV;
    }
    public String getDescription() {
        return description;
    }

    public String getExtension() {
        return extension;
    }

    public boolean needsTranscoding() {
        return needsTranscoding;
    }

    public boolean includeMetadata() {
        return includeMetadata;
    }

    public Map<String, String> getHandbrakeArgs() {
        return Collections.unmodifiableMap(handbrakeArgs.getOrDefault(this, Collections.emptyMap()));
    }

    private static Map<FileType, Map<String, String>> buildHandbrakeArgsMap() {
        Map<FileType, Map<String, String>> map = new HashMap<>();

        // Android
        String args = String.format("-e x264 -q 22.0 -r 30 --pfr -a 1 -E %s -B 128 -6 dpl2 -R Auto -D 0.0 " +
                        "--audio-copy-mask aac,ac3,dtshd,dts,mp3 --audio-fallback ffac3 -f mp4 -X 720 -Y 576 " +
                        "--decomb=fast --normalize-mix 1 " +
                        "--loose-anamorphic --modulus 2 --x264-preset veryfast --h264-profile main --h264-level 3.0",
// Path: src/net/straylightlabs/archivo/utilities/OSHelper.java
// public class OSHelper {
//     private static final String osName;
//     private static final Runtime runtime;
//     private static int cpuThreads;
//     private static Boolean isAMD64;
//     private static String exeSuffix;
// 
//     @SuppressWarnings("unused")
//     private final static Logger logger = LoggerFactory.getLogger(OSHelper.class);
// 
//     static {
//         osName = System.getProperty("os.name").toLowerCase();
//         runtime = Runtime.getRuntime();
//     }
// 
//     public static boolean isWindows() {
//         return osName.startsWith("windows");
//     }
// 
//     public static boolean isMacOS() {
//         return osName.startsWith("mac os");
//     }
// 
//     public static String getExeSuffix() {
//         if (exeSuffix == null) {
//             if (isWindows()) {
//                 exeSuffix = ".exe";
//             } else {
//                 exeSuffix = "";
//             }
//         }
//         return exeSuffix;
//     }
// 
//     public static String getArchSuffix() {
//         if (isWindows()) {
//             if (isAMD64()) {
//                 return "-64";
//             } else {
//                 return "-32";
//             }
//         } else {
//             return "";
//         }
//     }
// 
//     private static boolean isAMD64() {
//         if (isAMD64 == null) {
//             String arch = System.getenv("PROCESSOR_ARCHITECTURE");
//             isAMD64 = arch.equalsIgnoreCase("amd64");
//         }
//         return isAMD64;
//     }
// 
//     public static int getProcessorThreads() {
//         if (cpuThreads == 0) {
//             cpuThreads = runtime.availableProcessors();
//         }
//         return cpuThreads;
//     }
// 
//     @SuppressWarnings("unused")
//     public static Path getApplicationDirectory() {
//         if (isWindows()) {
//             String programFilesEnv = System.getenv("ProgramFiles");
//             if (programFilesEnv != null) {
//                 return Paths.get(programFilesEnv);
//             } else {
//                 return Paths.get("C:");
//             }
//         } else {
//             return Paths.get("/");
//         }
//     }
// 
//     public static Path getDataDirectory() {
//         Path dataDir;
// 
//         if (isWindows()) {
//             dataDir = Paths.get(System.getenv("APPDATA"), "Archivo");
//         } else if (isMacOS()) {
//             dataDir = Paths.get(System.getProperty("user.home"), "Library", "Application Support", "Archivo");
//         } else {
//             dataDir = Paths.get(System.getProperty("user.home"), ".archivo");
//         }
// 
//         return dataDir;
//     }
// 
//     public static String getFileBrowserName() {
//         if (isWindows()) {
//             return "File Explorer";
//         } else if (isMacOS()) {
//             return "Finder";
//         } else {
//             return "File Browser";
//         }
//     }
// }


// Path: src/net/straylightlabs/archivo/model/FileType.java
import java.util.HashMap;
import java.util.Map;
import net.straylightlabs.archivo.utilities.OSHelper;
import java.util.Collections;

        return supportsQSV;
    }
    public String getDescription() {
        return description;
    }

    public String getExtension() {
        return extension;
    }

    public boolean needsTranscoding() {
        return needsTranscoding;
    }

    public boolean includeMetadata() {
        return includeMetadata;
    }

    public Map<String, String> getHandbrakeArgs() {
        return Collections.unmodifiableMap(handbrakeArgs.getOrDefault(this, Collections.emptyMap()));
    }

    private static Map<FileType, Map<String, String>> buildHandbrakeArgsMap() {
        Map<FileType, Map<String, String>> map = new HashMap<>();

        // Android
        String args = String.format("-e x264 -q 22.0 -r 30 --pfr -a 1 -E %s -B 128 -6 dpl2 -R Auto -D 0.0 " +
                        "--audio-copy-mask aac,ac3,dtshd,dts,mp3 --audio-fallback ffac3 -f mp4 -X 720 -Y 576 " +
                        "--decomb=fast --normalize-mix 1 " +
                        "--loose-anamorphic --modulus 2 --x264-preset veryfast --h264-profile main --h264-level 3.0",
                getPlatformAudioEncoder());