| 2237 | } |
| 2238 | |
| 2239 | static BenchmarkOptions ParseOptions(int argc, char* argv[]) { |
| 2240 | BenchmarkOptions options; |
| 2241 | for (int i = 1; i < argc; ++i) { |
| 2242 | const std::string arg = argv[i]; |
| 2243 | if ((arg == "--video" || arg == "-v") && i + 1 < argc) { |
| 2244 | options.video_path = argv[++i]; |
| 2245 | } else if ((arg == "--overlay" || arg == "-o") && i + 1 < argc) { |
| 2246 | options.overlay_path = argv[++i]; |
| 2247 | } else if (arg == "--mode" && i + 1 < argc) { |
| 2248 | options.mode = argv[++i]; |
| 2249 | if (options.mode != "preview" && options.mode != "export") |
| 2250 | throw std::runtime_error("Unknown mode: " + options.mode); |
| 2251 | } else if (arg == "--dump-dir" && i + 1 < argc) { |
| 2252 | options.dump_dir = argv[++i]; |
| 2253 | } else if (arg == "--dump-every" && i + 1 < argc) { |
| 2254 | options.dump_every = std::max(0, std::atoi(argv[++i])); |
| 2255 | } else if ((arg == "--frames" || arg == "-n") && i + 1 < argc) { |
| 2256 | options.max_frames = std::max(1, std::atoi(argv[++i])); |
| 2257 | } else if (arg == "--row" && i + 1 < argc) { |
| 2258 | options.row_name = argv[++i]; |
| 2259 | } else if (arg == "--vaapi-device" && i + 1 < argc) { |
| 2260 | options.vaapi_device = argv[++i]; |
| 2261 | } else if (arg == "--cpu-only") { |
| 2262 | options.run_vulkan = false; |
| 2263 | } else if (arg == "--vulkan-only") { |
| 2264 | options.run_cpu = false; |
| 2265 | } else if (arg == "--help" || arg == "-h") { |
| 2266 | std::cout |
| 2267 | << "Usage: openshot-vulkan-benchmark [--video <path>] [--overlay <path>] [--frames <n>]\n" |
| 2268 | << " [--mode <preview|export>] [--vaapi-device <path>] [--row <name>]\n" |
| 2269 | << " [--dump-dir <dir>] [--dump-every <n>]\n" |
| 2270 | << "Rows: CPU->CPU, CPU->Vk, VAAPI->CPU, VAAPI->Vk, CUDA->CPU, CUDA->Vk, Vulkan->CPU, VulkanDirect->Vk\n"; |
| 2271 | std::exit(0); |
| 2272 | } else { |
| 2273 | throw std::runtime_error("Unknown argument: " + arg); |
| 2274 | } |
| 2275 | } |
| 2276 | return options; |
| 2277 | } |
| 2278 | |
| 2279 | } // namespace |
| 2280 | |