34 lines
643 B
Rust
34 lines
643 B
Rust
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, 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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|