From 2d2a68c4d00ed77483ae17607f0613b4a8188d0e Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Sat, 6 Aug 2016 21:31:20 -0400 Subject: Write to a GEGL buffer. --- Cargo.toml | 2 ++ src/main.rs | 40 +++++++++++++++++++++++++++++++--------- 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 "] [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(); -- cgit v1.2.3