Skip to content

Commit 1dbbf54

Browse files
author
Marek Counts
committed
init Add support for Config::validate
Added support for Config::validate in capi
1 parent 45585ee commit 1dbbf54

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

src/capi.rs

+27-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ use num_derive::*;
2121
use num_traits::cast::FromPrimitive;
2222

2323
use crate::prelude as rav1e;
24+
use crate::api::config::InvalidConfig;
2425

2526
type PixelRange = rav1e::PixelRange;
2627
type ChromaSamplePosition = rav1e::ChromaSamplePosition;
@@ -114,6 +115,31 @@ impl From<Option<rav1e::EncoderStatus>> for EncoderStatus {
114115
/// Use rav1e_config_unref() to free its memory.
115116
pub struct Config {
116117
cfg: rav1e::Config,
118+
last_err: Option<InvalidConfig>,
119+
}
120+
121+
impl Config {
122+
fn rav1e_config_validate(&mut self) -> bool {
123+
if let Err(err) = self.cfg.validate() {
124+
self.last_err = Some(err);
125+
return false;
126+
}
127+
true
128+
}
129+
/// Returns the last error as a string
130+
pub unsafe fn rav1e_last_config_error_str(&self) -> *mut c_char {
131+
let last_error = format!("{:?}", self.last_err);
132+
let cbuf = CString::new(last_error).unwrap();
133+
let len = cbuf.as_bytes_with_nul().len();
134+
let ret = libc::malloc(len);
135+
136+
if !ret.is_null() {
137+
let cptr = cbuf.as_ptr() as *const libc::c_void;
138+
libc::memcpy(ret, cptr, len);
139+
}
140+
141+
ret as *mut c_char
142+
}
117143
}
118144

119145
enum EncContext {
@@ -257,7 +283,7 @@ pub unsafe extern fn rav1e_data_unref(data: *mut Data) {
257283
pub unsafe extern fn rav1e_config_default() -> *mut Config {
258284
let cfg = rav1e::Config { enc: rav1e::EncoderConfig::default(), threads: 0 };
259285

260-
let c = Box::new(Config { cfg });
286+
let c = Box::new(Config { cfg: cfg, last_err:None });
261287

262288
Box::into_raw(c)
263289
}

0 commit comments

Comments
 (0)