1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
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 => { avio_close((*self.ptr).pb); avformat_free_context(self.ptr); } } } } }