decomission getEndPos() in favor of SF_INFO.frames
This commit is contained in:
parent
2bf44bc581
commit
b59f937d00
2 changed files with 21 additions and 17 deletions
|
@ -1,8 +1,3 @@
|
||||||
load :0;
|
load :0;
|
||||||
amp 80 70 10;
|
amp 3 1 10;
|
||||||
amp 80 73 20;
|
|
||||||
amp 80 75 20;
|
|
||||||
amp 80 76 20;
|
|
||||||
amp 7 4 2;
|
|
||||||
amp 5 1 8;
|
|
||||||
quicksave;
|
quicksave;
|
||||||
|
|
|
@ -108,24 +108,30 @@ pub const Image = struct {
|
||||||
/// Pointer to the underlying libsndfile's SNDFILE struct.
|
/// Pointer to the underlying libsndfile's SNDFILE struct.
|
||||||
sndfile: *c.SNDFILE,
|
sndfile: *c.SNDFILE,
|
||||||
|
|
||||||
|
/// Current sound file's framecount.
|
||||||
|
frames: usize,
|
||||||
|
|
||||||
/// The original image file path.
|
/// The original image file path.
|
||||||
path: []const u8,
|
path: []const u8,
|
||||||
|
|
||||||
/// Represents the current path being worked on.
|
/// Represents the current path being worked on.
|
||||||
curpath: []const u8,
|
curpath: []const u8,
|
||||||
|
|
||||||
/// Open a BMP file.
|
/// Open a BMP image for later.
|
||||||
pub fn open(allocator: *std.mem.Allocator, path: []const u8) !*Image {
|
pub fn open(allocator: *std.mem.Allocator, path: []const u8) !*Image {
|
||||||
var in_fmt = mkSfInfo();
|
var in_fmt = mkSfInfo();
|
||||||
|
|
||||||
var sndfile = try sopen(allocator, path, c.SFM_READ, &in_fmt);
|
var sndfile = try sopen(allocator, path, c.SFM_READ, &in_fmt);
|
||||||
var image = try allocator.create(Image);
|
var image = try allocator.create(Image);
|
||||||
|
|
||||||
|
std.debug.assert(in_fmt.frames > i64(0));
|
||||||
|
|
||||||
image.* = Image{
|
image.* = Image{
|
||||||
.allocator = allocator,
|
.allocator = allocator,
|
||||||
.sndfile = sndfile,
|
.sndfile = sndfile,
|
||||||
.path = path,
|
.path = path,
|
||||||
.curpath = path,
|
.curpath = path,
|
||||||
|
.frames = @intCast(usize, in_fmt.frames),
|
||||||
};
|
};
|
||||||
|
|
||||||
return image;
|
return image;
|
||||||
|
@ -197,6 +203,13 @@ pub const Image = struct {
|
||||||
_ = c.sf_seek(self.sndfile, @intCast(i64, end), c.SEEK_SET);
|
_ = c.sf_seek(self.sndfile, @intCast(i64, end), c.SEEK_SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn getSeekPos(self: *Image, position: plugins.Position) plugins.SeekPos {
|
||||||
|
const file_end = self.frames;
|
||||||
|
var seek_pos = position.seekPos(file_end);
|
||||||
|
std.debug.warn("\tstart {} end {}\n", seek_pos.start, seek_pos.end);
|
||||||
|
return seek_pos;
|
||||||
|
}
|
||||||
|
|
||||||
/// Run a plugin over the image.
|
/// Run a plugin over the image.
|
||||||
/// This setups a new lilv world/plugin among other things.
|
/// This setups a new lilv world/plugin among other things.
|
||||||
/// The internal SNDFILE pointer is modified to point to the output of the
|
/// The internal SNDFILE pointer is modified to point to the output of the
|
||||||
|
@ -263,9 +276,7 @@ pub const Image = struct {
|
||||||
// just copy the original image and the part where we run the plugin
|
// just copy the original image and the part where we run the plugin
|
||||||
// over the image.
|
// over the image.
|
||||||
|
|
||||||
const file_end = try getEndPos(self.curpath);
|
const seek_pos = self.getSeekPos(position);
|
||||||
const seek_pos = position.seekPos(file_end);
|
|
||||||
std.debug.warn("\tstart {} end {}\n", seek_pos.start, seek_pos.end);
|
|
||||||
|
|
||||||
// make sure we start from 0
|
// make sure we start from 0
|
||||||
_ = c.sf_seek(self.sndfile, 0, c.SEEK_SET);
|
_ = c.sf_seek(self.sndfile, 0, c.SEEK_SET);
|
||||||
|
@ -284,7 +295,7 @@ pub const Image = struct {
|
||||||
out_file,
|
out_file,
|
||||||
file_copy_buf,
|
file_copy_buf,
|
||||||
usize(0),
|
usize(0),
|
||||||
seek_pos.start + @mod(seek_pos.start, BufferSize),
|
seek_pos.start,
|
||||||
);
|
);
|
||||||
|
|
||||||
_ = c.sf_seek(self.sndfile, @intCast(i64, seek_pos.start), c.SEEK_SET);
|
_ = c.sf_seek(self.sndfile, @intCast(i64, seek_pos.start), c.SEEK_SET);
|
||||||
|
@ -313,7 +324,7 @@ pub const Image = struct {
|
||||||
out_file,
|
out_file,
|
||||||
file_copy_buf,
|
file_copy_buf,
|
||||||
seek_pos.end + 1,
|
seek_pos.end + 1,
|
||||||
file_end + @mod(file_end, BufferSize),
|
self.frames,
|
||||||
);
|
);
|
||||||
|
|
||||||
c.sf_write_sync(out_file);
|
c.sf_write_sync(out_file);
|
||||||
|
@ -349,9 +360,7 @@ pub const Image = struct {
|
||||||
var bufs = try plugins.RunBuffers.init(self.allocator);
|
var bufs = try plugins.RunBuffers.init(self.allocator);
|
||||||
defer bufs.deinit();
|
defer bufs.deinit();
|
||||||
|
|
||||||
const file_end = try getEndPos(self.curpath);
|
const seek_pos = self.getSeekPos(position);
|
||||||
const seek_pos = position.seekPos(file_end);
|
|
||||||
std.debug.warn("\tstart {} end {}\n", seek_pos.start, seek_pos.end);
|
|
||||||
|
|
||||||
// make sure we start from 0
|
// make sure we start from 0
|
||||||
_ = c.sf_seek(self.sndfile, 0, c.SEEK_SET);
|
_ = c.sf_seek(self.sndfile, 0, c.SEEK_SET);
|
||||||
|
@ -370,7 +379,7 @@ pub const Image = struct {
|
||||||
out_file,
|
out_file,
|
||||||
file_copy_buf,
|
file_copy_buf,
|
||||||
usize(0),
|
usize(0),
|
||||||
seek_pos.start + @mod(seek_pos.start, BufferSize),
|
seek_pos.start,
|
||||||
);
|
);
|
||||||
|
|
||||||
_ = c.sf_seek(self.sndfile, @intCast(i64, seek_pos.start), c.SEEK_SET);
|
_ = c.sf_seek(self.sndfile, @intCast(i64, seek_pos.start), c.SEEK_SET);
|
||||||
|
@ -399,7 +408,7 @@ pub const Image = struct {
|
||||||
out_file,
|
out_file,
|
||||||
file_copy_buf,
|
file_copy_buf,
|
||||||
seek_pos.end + 1,
|
seek_pos.end + 1,
|
||||||
file_end + @mod(file_end, BufferSize),
|
self.frames,
|
||||||
);
|
);
|
||||||
|
|
||||||
c.sf_write_sync(out_file);
|
c.sf_write_sync(out_file);
|
||||||
|
|
Loading…
Reference in a new issue