codec/context: make destructors safe
This commit is contained in:
35
src/format/context/destructor.rs
Normal file
35
src/format/context/destructor.rs
Normal file
@ -0,0 +1,35 @@
|
||||
use ffi::*;
|
||||
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
pub enum Mode {
|
||||
Input,
|
||||
Output,
|
||||
}
|
||||
|
||||
pub struct Destructor {
|
||||
ptr: *mut AVFormatContext,
|
||||
mode: Mode,
|
||||
}
|
||||
|
||||
impl Destructor {
|
||||
pub unsafe fn new(ptr: *mut AVFormatContext, mode: Mode) -> Self {
|
||||
Destructor {
|
||||
ptr: ptr,
|
||||
mode: mode,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for Destructor {
|
||||
fn drop(&mut self) {
|
||||
unsafe {
|
||||
match self.mode {
|
||||
Mode::Input =>
|
||||
avformat_close_input(&mut self.ptr),
|
||||
|
||||
Mode::Output =>
|
||||
avformat_free_context(self.ptr),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user