diff options
author | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2016-08-06 21:31:20 -0400 |
---|---|---|
committer | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2016-08-06 21:31:29 -0400 |
commit | 2d2a68c4d00ed77483ae17607f0613b4a8188d0e (patch) | |
tree | 5fa62b2298065a59865e650697fff7a61a52777d | |
parent | 1ad88bc7e346cde1dba925fcc7a3a9c836adfec6 (diff) |
Write to a GEGL buffer.
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | src/main.rs | 40 |
2 files changed, 33 insertions, 9 deletions
@@ -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(); |