Skip to content
30 changes: 30 additions & 0 deletions CUsersjayadkiyosrctest_q.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const std = @import("std");
const encoder = @import("encoder.zig");
const decoder = @import("decoder.zig");
const types = @import("types.zig");

test "quality sweep 1-100" {
const allocator = std.testing.allocator;
var pixels: [1024]types.RGBAPixel = undefined;
var prng = std.Random.DefaultPrng.init(7777);
const rng = prng.random();
for (&pixels) |*p| {
p.r = rng.int(u8);
p.g = rng.int(u8);
p.b = rng.int(u8);
p.a = 255;
}
var img = types.ImageData{ .width = 32, .height = 32, .pixels = &pixels };

var q: u8 = 1;
while (q <= 100) : (q +|= 1) {
var encoded = try encoder.encodeJPEG(allocator, &img, .{ .quality = q });
defer encoded.deinit(allocator);

var decoded = decoder.decodeJPEG(allocator, encoded.buffer, .{}) catch |err| {
std.debug.print("DECODE FAIL q={d}: {s} enc_len={d}\n", .{ q, @errorName(err), encoded.buffer.len });
return error.TestExpectedEqual;
};
defer decoded.deinit(allocator);
}
}
36 changes: 36 additions & 0 deletions CUsersjayadkiyotest_quality.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
const std = @import("std");
const encoder = @import("src/encoder.zig");
const decoder = @import("src/decoder.zig");
const types = @import("src/types.zig");

pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const allocator = gpa.allocator();

var pixels = try allocator.alloc(types.RGBAPixel, 32 * 32);
defer allocator.free(pixels);

var prng = std.Random.DefaultPrng.init(7777);
const rng = prng.random();
for (pixels) |*p| {
p.r = rng.int(u8);
p.g = rng.int(u8);
p.b = rng.int(u8);
p.a = 255;
}

var img = types.ImageData{ .width = 32, .height = 32, .pixels = pixels };

var q: u8 = 1;
while (q <= 100) : (q +|= 1) {
var encoded = try encoder.encodeJPEG(allocator, &img, .{ .quality = q });
defer encoded.deinit(allocator);

var decoded = decoder.decodeJPEG(allocator, encoded.buffer, .{}) catch |err| {
std.debug.print("FAILED at quality={d}, err={s}\n", .{ q, @errorName(err) });
continue;
};
defer decoded.deinit(allocator);
std.debug.print("OK quality={d}\n", .{q});
}
}
36 changes: 36 additions & 0 deletions CUsersjayadkiyotest_repro.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
const std = @import("std");
const encoder = @import("src/encoder.zig");
const decoder = @import("src/decoder.zig");
const types = @import("src/types.zig");

pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const allocator = gpa.allocator();
var pixels: [1024]types.RGBAPixel = undefined;
var prng = std.Random.DefaultPrng.init(7777);
const rng = prng.random();
for (&pixels) |*p| {
p.r = rng.int(u8);
p.g = rng.int(u8);
p.b = rng.int(u8);
p.a = 255;
}
var img = types.ImageData{ .width = 32, .height = 32, .pixels = &pixels };

var q: u8 = 1;
while (q <= 100) : (q +|= 1) {
var encoded = encoder.encodeJPEG(allocator, &img, .{ .quality = q }) catch |err| {
std.debug.print("ENCODE FAIL q={d}: {s}\n", .{ q, @errorName(err) });
continue;
};
defer encoded.deinit(allocator);

var decoded = decoder.decodeJPEG(allocator, encoded.buffer, .{}) catch |err| {
std.debug.print("DECODE FAIL q={d}: {s}\n", .{ q, @errorName(err) });
std.debug.print(" encoded len={d}\n", .{encoded.buffer.len});
continue;
};
defer decoded.deinit(allocator);
std.debug.print("OK q={d} enc={d} dec={d}x{d}\n", .{ q, encoded.buffer.len, decoded.width, decoded.height });
}
}
Loading
Loading