ffmpeg_next/codec/
parameters.rs

1use std::any::Any;
2use std::rc::Rc;
3
4use super::{Context, Id};
5use ffi::*;
6use media;
7
8pub struct Parameters {
9    ptr: *mut AVCodecParameters,
10    owner: Option<Rc<dyn Any>>,
11}
12
13unsafe impl Send for Parameters {}
14
15impl Parameters {
16    pub unsafe fn wrap(ptr: *mut AVCodecParameters, owner: Option<Rc<dyn Any>>) -> Self {
17        Parameters { ptr, owner }
18    }
19
20    pub unsafe fn as_ptr(&self) -> *const AVCodecParameters {
21        self.ptr as *const _
22    }
23
24    pub unsafe fn as_mut_ptr(&mut self) -> *mut AVCodecParameters {
25        self.ptr
26    }
27}
28
29impl Parameters {
30    pub fn new() -> Self {
31        unsafe {
32            Parameters {
33                ptr: avcodec_parameters_alloc(),
34                owner: None,
35            }
36        }
37    }
38
39    pub fn medium(&self) -> media::Type {
40        unsafe { media::Type::from((*self.as_ptr()).codec_type) }
41    }
42
43    pub fn id(&self) -> Id {
44        unsafe { Id::from((*self.as_ptr()).codec_id) }
45    }
46}
47
48impl Default for Parameters {
49    fn default() -> Self {
50        Self::new()
51    }
52}
53
54impl Drop for Parameters {
55    fn drop(&mut self) {
56        unsafe {
57            if self.owner.is_none() {
58                avcodec_parameters_free(&mut self.as_mut_ptr());
59            }
60        }
61    }
62}
63
64impl Clone for Parameters {
65    fn clone(&self) -> Self {
66        let mut ctx = Parameters::new();
67        ctx.clone_from(self);
68
69        ctx
70    }
71
72    fn clone_from(&mut self, source: &Self) {
73        unsafe {
74            avcodec_parameters_copy(self.as_mut_ptr(), source.as_ptr());
75        }
76    }
77}
78
79impl<C: AsRef<Context>> From<C> for Parameters {
80    fn from(context: C) -> Parameters {
81        let mut parameters = Parameters::new();
82        let context = context.as_ref();
83        unsafe {
84            avcodec_parameters_from_context(parameters.as_mut_ptr(), context.as_ptr());
85        }
86        parameters
87    }
88}