img-stream-enc/src/main.zig

61 lines
1.5 KiB
Zig
Raw Normal View History

2023-11-24 13:15:08 +05:00
const std = @import("std");
2023-11-24 13:36:55 +05:00
const util = @import("util.zig");
const InitError = error {
NotEnoughArgs,
InvalidDimension,
InvalidQuality,
InvalidNumJobs,
};
inline fn next_arg(args: *std.process.ArgIterator) ![:0]const u8 {
return args.next() orelse InitError.NotEnoughArgs;
}
inline fn get_dim(arg: [:0]const u8) !usize {
const d = try std.fmt.parseInt(usize, arg, 10);
if (d % 16 != 0 or d == 0) {
return InitError.InvalidDimension;
}
return d;
}
inline fn get_qual(arg: [:0]const u8) !f16 {
const q = try std.fmt.parseFloat(f16, arg);
if (q < 0 or q > 1) {
return InitError.InvalidQuality;
}
return q;
}
inline fn get_n_jobs(arg: [:0]const u8) !usize {
const n = try std.fmt.parseInt(usize, arg, 10);
if (n == 0) {
return InitError.InvalidNumJobs;
}
return n;
}
fn get_opts(alloc: std.mem.Allocator) !util.Options {
var args = try std.process.argsWithAllocator(alloc);
defer args.deinit();
_ = args.next();
return util.Options {
.width = try get_dim(try next_arg(&args)),
.height = try get_dim(try next_arg(&args)),
.quality = try get_qual(try next_arg(&args)),
.n_quant_jobs = try get_n_jobs(try next_arg(&args)),
};
}
2023-11-24 13:15:08 +05:00
pub fn main() !void {
2023-11-24 13:36:55 +05:00
var arg_buff: [100]u8 = undefined;
var arg_fba = std.heap.FixedBufferAllocator.init(&arg_buff);
const alloc = arg_fba.allocator();
2023-11-24 13:15:08 +05:00
2023-11-24 13:36:55 +05:00
const opts = try get_opts(alloc);
std.debug.print("{any}\n", .{opts});
2023-11-24 13:15:08 +05:00
}