add basic plugin position code
This commit is contained in:
parent
25bef23933
commit
32699a55a5
2 changed files with 34 additions and 1 deletions
|
@ -4,6 +4,9 @@ const c = lv2.c;
|
|||
|
||||
const plugins = @import("plugin.zig");
|
||||
|
||||
/// Approximate size of the BMP header.
|
||||
pub const BMPHeaderSize: usize = 82000;
|
||||
|
||||
pub const ImageError = error{
|
||||
OpenFail,
|
||||
InvalidPlugin,
|
||||
|
@ -38,6 +41,12 @@ fn sopen(
|
|||
return file.?;
|
||||
}
|
||||
|
||||
fn getEndPos(path: []const u8) !usize {
|
||||
var file = try std.fs.File.openRead(path);
|
||||
defer file.close();
|
||||
return file.getEndPos();
|
||||
}
|
||||
|
||||
fn temporaryName(allocator: *std.mem.Allocator) ![]u8 {
|
||||
const template_start = "/temp/temp_";
|
||||
const template = "/tmp/temp_XXXXXX";
|
||||
|
@ -135,7 +144,7 @@ pub const Image = struct {
|
|||
pub fn runPlugin(
|
||||
self: *Image,
|
||||
plugin_uri: []const u8,
|
||||
pos: plugins.Position,
|
||||
position: plugins.Position,
|
||||
params: plugins.ParamList,
|
||||
) !void {
|
||||
var ctx = try plugins.makeContext(self.allocator, plugin_uri);
|
||||
|
@ -186,5 +195,14 @@ pub const Image = struct {
|
|||
var rctx = try plugins.RunContext.init(self.allocator, ctx.plugin);
|
||||
rctx.connectPorts(ports);
|
||||
lv2.lilv_instance_activate(rctx.instance);
|
||||
|
||||
// now that we have everything setup, we need to make the part where we
|
||||
// just copy the original image and the part where we run the plugin
|
||||
// over the image.
|
||||
|
||||
const end_pos = (try getEndPos(self.path)) - BMPHeaderSize;
|
||||
std.debug.warn("file end: {}\n", end_pos);
|
||||
const seek_pos = position.seekPos(end_pos);
|
||||
std.debug.warn("start {} end {}\n", seek_pos.start, seek_pos.end);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -17,10 +17,25 @@ pub const Param = struct {
|
|||
/// List of parameters to be set to control ports.
|
||||
pub const ParamList = std.ArrayList(Param);
|
||||
|
||||
/// Represents an absolute position in the image.
|
||||
pub const SeekPos = struct {
|
||||
start: usize,
|
||||
end: usize,
|
||||
};
|
||||
|
||||
/// Represents a relative position in the image
|
||||
pub const Position = struct {
|
||||
split: usize,
|
||||
index: usize,
|
||||
|
||||
pub fn seekPos(self: Position, total_size: usize) SeekPos {
|
||||
var tot = total_size / self.split;
|
||||
|
||||
return SeekPos{
|
||||
.start = self.index * tot,
|
||||
.end = (self.index + 1) * tot,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
/// Represents the starting context for a single plugin run.
|
||||
|
|
Loading…
Reference in a new issue