diff --git a/src/codec/decoder/mod.rs b/src/codec/decoder/mod.rs index 4ef54b6..570e214 100644 --- a/src/codec/decoder/mod.rs +++ b/src/codec/decoder/mod.rs @@ -164,7 +164,8 @@ pub fn find(id: Id) -> Option { pub fn find_by_name(name: &str) -> Option { unsafe { - let ptr = avcodec_find_decoder_by_name(CString::new(name).unwrap().as_ptr()); + let name = CString::new(name).unwrap(); + let ptr = avcodec_find_decoder_by_name(name.as_ptr()); if ptr.is_null() { None diff --git a/src/codec/encoder/mod.rs b/src/codec/encoder/mod.rs index 5e5a877..ba5b595 100644 --- a/src/codec/encoder/mod.rs +++ b/src/codec/encoder/mod.rs @@ -141,7 +141,8 @@ pub fn find(id: Id) -> Option { pub fn find_by_name(name: &str) -> Option { unsafe { - let ptr = avcodec_find_encoder_by_name(CString::new(name).unwrap().as_ptr()); + let name = CString::new(name).unwrap(); + let ptr = avcodec_find_encoder_by_name(name.as_ptr()); if ptr.is_null() { None diff --git a/src/filter/graph.rs b/src/filter/graph.rs index cf754c9..f09131d 100644 --- a/src/filter/graph.rs +++ b/src/filter/graph.rs @@ -49,12 +49,14 @@ impl Graph { pub fn add<'a, 'b>(&'a mut self, filter: &Filter, name: &str, args: &str) -> Result, Error> where 'a: 'b { unsafe { + let name = CString::new(name).unwrap(); + let args = CString::new(args).unwrap(); let mut context = ptr::null_mut(); match avfilter_graph_create_filter(&mut context as *mut *mut AVFilterContext, filter.as_ptr(), - CString::new(name).unwrap().as_ptr(), - CString::new(args).unwrap().as_ptr(), + name.as_ptr(), + args.as_ptr(), ptr::null_mut(), self.as_mut_ptr()) { @@ -66,7 +68,8 @@ impl Graph { pub fn get<'a, 'b>(&'b mut self, name: &str) -> Option> where 'a: 'b { unsafe { - let ptr = avfilter_graph_get_filter(self.as_mut_ptr(), CString::new(name).unwrap().as_ptr()); + let name = CString::new(name).unwrap(); + let ptr = avfilter_graph_get_filter(self.as_mut_ptr(), name.as_ptr()); if ptr.is_null() { None @@ -134,7 +137,9 @@ impl<'a> Parser<'a> { panic!("out of memory"); } - (*input).name = av_strdup(CString::new(name).unwrap().as_ptr()); + let name = CString::new(name).unwrap(); + + (*input).name = av_strdup(name.as_ptr()); (*input).filter_ctx = context.as_mut_ptr(); (*input).pad_idx = pad as c_int; (*input).next = ptr::null_mut(); @@ -159,7 +164,9 @@ impl<'a> Parser<'a> { panic!("out of memory"); } - (*output).name = av_strdup(CString::new(name).unwrap().as_ptr()); + let name = CString::new(name).unwrap(); + + (*output).name = av_strdup(name.as_ptr()); (*output).filter_ctx = context.as_mut_ptr(); (*output).pad_idx = pad as c_int; (*output).next = ptr::null_mut(); @@ -177,8 +184,10 @@ impl<'a> Parser<'a> { pub fn parse(mut self, spec: &str) -> Result<(), Error> { unsafe { + let spec = CString::new(spec).unwrap(); + let result = avfilter_graph_parse_ptr(self.graph.as_mut_ptr(), - CString::new(spec).unwrap().as_ptr(), &mut self.inputs, &mut self.outputs, + spec.as_ptr(), &mut self.inputs, &mut self.outputs, ptr::null_mut()); avfilter_inout_free(&mut self.inputs); diff --git a/src/filter/mod.rs b/src/filter/mod.rs index c23eb73..1cd2576 100644 --- a/src/filter/mod.rs +++ b/src/filter/mod.rs @@ -54,7 +54,8 @@ pub fn license() -> &'static str { pub fn find(name: &str) -> Option { unsafe { - let ptr = avfilter_get_by_name(CString::new(name).unwrap().as_ptr()); + let name = CString::new(name).unwrap(); + let ptr = avfilter_get_by_name(name.as_ptr()); if ptr.is_null() { None diff --git a/src/util/format/sample.rs b/src/util/format/sample.rs index 8472ee7..3241c64 100644 --- a/src/util/format/sample.rs +++ b/src/util/format/sample.rs @@ -90,7 +90,9 @@ impl From for Sample { impl From<&'static str> for Sample { fn from(value: &'static str) -> Self { unsafe { - Sample::from(av_get_sample_fmt(CString::new(value).unwrap().as_ptr())) + let value = CString::new(value).unwrap(); + + Sample::from(av_get_sample_fmt(value.as_ptr())) } } } diff --git a/src/util/option/traits.rs b/src/util/option/traits.rs index 6e4f195..309eacd 100644 --- a/src/util/option/traits.rs +++ b/src/util/option/traits.rs @@ -25,8 +25,10 @@ pub unsafe trait Target { pub trait Settable: Target { fn set(&mut self, name: &str, value: &T) -> Result<(), Error> { unsafe { + let name = CString::new(name).unwrap(); + check!(av_opt_set_bin(self.as_mut_ptr(), - CString::new(name).unwrap().as_ptr(), + name.as_ptr(), value as *const _ as *const _, mem::size_of::() as c_int, AV_OPT_SEARCH_CHILDREN)) } @@ -34,17 +36,22 @@ pub trait Settable: Target { fn set_str(&mut self, name: &str, value: &str) -> Result<(), Error> { unsafe { + let name = CString::new(name).unwrap(); + let value = CString::new(value).unwrap(); + check!(av_opt_set(self.as_mut_ptr(), - CString::new(name).unwrap().as_ptr(), - CString::new(value).unwrap().as_ptr(), + name.as_ptr(), + value.as_ptr(), AV_OPT_SEARCH_CHILDREN)) } } fn set_int(&mut self, name: &str, value: i64) -> Result<(), Error> { unsafe { + let name = CString::new(name).unwrap(); + check!(av_opt_set_int(self.as_mut_ptr(), - CString::new(name).unwrap().as_ptr(), + name.as_ptr(), value as int64_t, AV_OPT_SEARCH_CHILDREN)) } @@ -52,8 +59,10 @@ pub trait Settable: Target { fn set_double(&mut self, name: &str, value: f64) -> Result<(), Error> { unsafe { + let name = CString::new(name).unwrap(); + check!(av_opt_set_double(self.as_mut_ptr(), - CString::new(name).unwrap().as_ptr(), + name.as_ptr(), value, AV_OPT_SEARCH_CHILDREN)) } @@ -61,8 +70,10 @@ pub trait Settable: Target { fn set_rational>(&mut self, name: &str, value: T) -> Result<(), Error> { unsafe { + let name = CString::new(name).unwrap(); + check!(av_opt_set_q(self.as_mut_ptr(), - CString::new(name).unwrap().as_ptr(), + name.as_ptr(), value.into().into(), AV_OPT_SEARCH_CHILDREN)) } @@ -70,8 +81,10 @@ pub trait Settable: Target { fn set_image_size(&mut self, name: &str, w: u32, h: u32) -> Result<(), Error> { unsafe { + let name = CString::new(name).unwrap(); + check!(av_opt_set_image_size(self.as_mut_ptr(), - CString::new(name).unwrap().as_ptr(), + name.as_ptr(), w as c_int, h as c_int, AV_OPT_SEARCH_CHILDREN)) } @@ -79,8 +92,10 @@ pub trait Settable: Target { fn set_pixel_format(&mut self, name: &str, format: format::Pixel) -> Result<(), Error> { unsafe { + let name = CString::new(name).unwrap(); + check!(av_opt_set_pixel_fmt(self.as_mut_ptr(), - CString::new(name).unwrap().as_ptr(), + name.as_ptr(), format.into(), AV_OPT_SEARCH_CHILDREN)) } @@ -88,8 +103,10 @@ pub trait Settable: Target { fn set_sample_format(&mut self, name: &str, format: format::Sample) -> Result<(), Error> { unsafe { + let name = CString::new(name).unwrap(); + check!(av_opt_set_sample_fmt(self.as_mut_ptr(), - CString::new(name).unwrap().as_ptr(), + name.as_ptr(), format.into(), AV_OPT_SEARCH_CHILDREN)) } @@ -97,8 +114,10 @@ pub trait Settable: Target { fn set_channel_layout(&mut self, name: &str, layout: ChannelLayout) -> Result<(), Error> { unsafe { + let name = CString::new(name).unwrap(); + check!(av_opt_set_channel_layout(self.as_mut_ptr(), - CString::new(name).unwrap().as_ptr(), + name.as_ptr(), layout.bits() as int64_t, AV_OPT_SEARCH_CHILDREN)) }