diff --git a/src/image.zig b/src/image.zig index 0e9c775..2b2a38a 100644 --- a/src/image.zig +++ b/src/image.zig @@ -45,6 +45,15 @@ fn sopen( return ImageError.OpenFail; } + const frames_on_end = c.sf_seek(file, 0, c.SEEK_END); + _ = c.sf_seek(file, 0, c.SEEK_SET); + std.testing.expectEqual(fmt.frames, frames_on_end); + + const frames_on_end_by_end = c.sf_seek(file, frames_on_end, c.SEEK_SET); + std.testing.expectEqual(frames_on_end, frames_on_end_by_end); + + std.debug.warn("frames on end: {}, frame on end (2): {}\n", frames_on_end, frames_on_end_by_end); + return file.?; } @@ -52,22 +61,20 @@ fn swrite(file: *c.SNDFILE, buf: [*]f32, frames: i64) !void { const count = c.sf_writef_float(file, buf, frames); if (count != frames) { - std.debug.warn("Wanted to read {}, got {}\n", frames, count); + std.debug.warn("Wanted to write {}, got {}\n", frames, count); return ImageError.WriteFail; } } fn sseek(file: *c.SNDFILE, offset: usize) void { - const frames = c.sf_seek(file, @intCast(i64, offset), c.SEEK_SET); - if (frames != @intCast(i64, offset)) { - std.debug.warn("failed to seek to {}\n", offset); - } -} + const offset_i64 = @intCast(i64, offset); + const frames = c.sf_seek(file, offset_i64, c.SEEK_SET); + const frames_current = c.sf_seek(file, 0, c.SEEK_CUR); + std.testing.expectEqual(frames, frames_current); -fn sf_tell(file: *c.SNDFILE) i64 { - var frames = c.sf_seek(file, 0, c.SEEK_CUR); - std.debug.warn("\t\t{} frames\n", frames); - return -frames; + if (frames != offset_i64) { + std.debug.warn("failed to seek to {} (seeked {} frames, offset_i64={})\n", offset, frames, offset_i64); + } } /// Caller owns the returned memory. @@ -132,6 +139,7 @@ pub const Image = struct { pub fn open(allocator: *std.mem.Allocator, path: []const u8) !*Image { var in_fmt = mkSfInfo(); var sndfile = try sopen(allocator, path, c.SFM_READ, &in_fmt); + var image = try allocator.create(Image); std.debug.assert(in_fmt.frames > i64(0)); @@ -152,6 +160,8 @@ pub const Image = struct { var in_fmt = mkSfInfo(); // clone sndfile var sndfile = try sopen(self.allocator, self.curpath, c.SFM_READ, &in_fmt); + std.testing.expectEqual(self.frames, @intCast(usize, in_fmt.frames)); + var image = try self.allocator.create(Image); std.debug.assert(in_fmt.frames > i64(0)); @@ -249,10 +259,17 @@ pub const Image = struct { var in_fmt = mkSfInfo(); self.sndfile = try sopen(self.allocator, path, c.SFM_READ, &in_fmt); + std.testing.expectEqual(self.frames, @intCast(usize, in_fmt.frames)); + self.curpath = path; self.frames = @intCast(usize, in_fmt.frames); - std.debug.warn("\timage: reopened on '{}'\n", self.curpath); + std.debug.warn( + "\timage: reopened on '{}' (frames={}, fmt.frames={})\n", + self.curpath, + self.frames, + in_fmt.frames, + ); } pub fn checkValid(self: *Image) !void { diff --git a/src/main.zig b/src/main.zig index 503f1b3..3df73fc 100644 --- a/src/main.zig +++ b/src/main.zig @@ -65,7 +65,7 @@ pub fn doRepl(allocator: *std.mem.Allocator, args_it: var) !void { defer runqs_args.deinit(); // TODO change the runqs command to something given in an env var - try runqs_args.append("feh"); + try runqs_args.append("ristretto"); while (true) { lang.reset(); diff --git a/src/plugin.zig b/src/plugin.zig index 03b72cc..861b452 100644 --- a/src/plugin.zig +++ b/src/plugin.zig @@ -34,6 +34,7 @@ pub const Position = struct { index: usize, pub fn seekPos(self: Position, total_size: usize) SeekPos { + std.debug.assert(self.index <= self.split); var tot = total_size / self.split; return SeekPos{