summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Orbekk <kjetil.orbekk@gmail.com>2016-08-06 21:31:20 -0400
committerKjetil Orbekk <kjetil.orbekk@gmail.com>2016-08-06 21:31:29 -0400
commit2d2a68c4d00ed77483ae17607f0613b4a8188d0e (patch)
tree5fa62b2298065a59865e650697fff7a61a52777d
parent1ad88bc7e346cde1dba925fcc7a3a9c836adfec6 (diff)
Write to a GEGL buffer.
-rw-r--r--Cargo.toml2
-rw-r--r--src/main.rs40
2 files changed, 33 insertions, 9 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 87e126f..8c31968 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -6,3 +6,5 @@ authors = ["Kjetil Orbekk <kjetil.orbekk@gmail.com>"]
[dependencies]
libc = "*"
glib = "*"
+gobject-sys = "*"
+glib-sys = "*"
diff --git a/src/main.rs b/src/main.rs
index 4f26cd2..d6d685c 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,9 +1,13 @@
extern crate libc;
extern crate glib;
+extern crate gobject_sys as gobject_ffi;
+extern crate glib_sys as glib_ffi;
use std::ffi::CString;
use std::ptr;
use glib::translate::*;
use glib::Value;
+use gobject_ffi::G_TYPE_POINTER;
+
#[link(name="gegl-0.3")]
extern {
@@ -20,6 +24,8 @@ extern {
fn gegl_node_process(node: *mut libc::c_void);
fn g_object_unref(node: *mut libc::c_void);
fn gegl_exit();
+ fn gegl_buffer_new(extent: *mut libc::c_void, format: *mut libc::c_void)
+ -> *mut libc::c_void;
}
fn main() {
@@ -29,24 +35,40 @@ fn main() {
let graph = gegl_node_new();
let src = gegl_node_create_child(
graph, CString::new("gegl:load").unwrap().as_ptr());
- println!("{:?}", src);
- println!("Hello");
gegl_node_set_property(
src,
CString::new("path").unwrap().as_ptr(),
// ptr::null_mut()
Value::from("/tmp/test.jpg").to_glib_none().0
as *const libc::c_void);
- let sink = gegl_node_create_child(
- graph, CString::new("gegl:save").unwrap().as_ptr());
+ // let sink = gegl_node_create_child(
+ // graph, CString::new("gegl:save").unwrap().as_ptr());
+ // gegl_node_set_property(
+ // sink,
+ // CString::new("path").unwrap().as_ptr(),
+ // Value::from("/tmp/test-output.jpg").to_glib_none().0
+ // as *const libc::c_void);
+ // gegl_node_link(src, sink);
+ // let mut buffer : *mut libc::c_void = ptr::null_mut();
+ let mut buffer = gegl_buffer_new(ptr::null_mut(), ptr::null_mut());
+ let sink = gegl_node_create_child(graph,
+ CString::new("gegl:buffer-sink")
+ .unwrap().as_ptr());
+ // gegl_node_set_property(
+ // sink,
+ // CString::new("buffer").unwrap().as_ptr(),
+ // Value::from(buffer).to_glib_none().0);
+ let mut ret = Value::uninitialized();
+ gobject_ffi::g_value_init(ret.to_glib_none_mut().0, G_TYPE_POINTER);
+ gobject_ffi::g_value_set_pointer(ret.to_glib_none_mut().0,
+ buffer);
+
gegl_node_set_property(
sink,
- CString::new("path").unwrap().as_ptr(),
- Value::from("/tmp/test-output.jpg").to_glib_none().0
- as *const libc::c_void);
- gegl_node_link(src, sink);
- println!("Hello");
+ CString::new("buffer").unwrap().as_ptr(),
+ ret.to_glib_none_mut().0 as *mut libc::c_void);
+ gegl_node_link(src, sink);
gegl_node_process(sink);
g_object_unref(graph);
gegl_exit();