Skip to main content

ffmpeg_next/format/stream/
stream_mut.rs

1use std::mem;
2use std::ops::Deref;
3
4use super::Stream;
5use crate::ffi::*;
6use crate::format::context::common::Context;
7use crate::{Dictionary, Rational, codec};
8
9pub struct StreamMut<'a> {
10    context: &'a mut Context,
11    index: usize,
12
13    immutable: Stream<'a>,
14}
15
16impl<'a> StreamMut<'a> {
17    pub unsafe fn wrap(context: &mut Context, index: usize) -> StreamMut<'_> {
18        unsafe {
19            StreamMut {
20                context: mem::transmute_copy(&context),
21                index,
22
23                immutable: Stream::wrap(mem::transmute_copy(&context), index),
24            }
25        }
26    }
27
28    pub unsafe fn as_mut_ptr(&mut self) -> *mut AVStream {
29        unsafe { *(*self.context.as_mut_ptr()).streams.add(self.index) }
30    }
31}
32
33impl<'a> StreamMut<'a> {
34    pub fn set_time_base<R: Into<Rational>>(&mut self, value: R) {
35        unsafe {
36            (*self.as_mut_ptr()).time_base = value.into().into();
37        }
38    }
39
40    pub fn set_rate<R: Into<Rational>>(&mut self, value: R) {
41        unsafe {
42            (*self.as_mut_ptr()).r_frame_rate = value.into().into();
43        }
44    }
45
46    pub fn set_avg_frame_rate<R: Into<Rational>>(&mut self, value: R) {
47        unsafe {
48            (*self.as_mut_ptr()).avg_frame_rate = value.into().into();
49        }
50    }
51
52    pub fn set_parameters<P: Into<codec::Parameters>>(&mut self, parameters: P) {
53        let parameters = parameters.into();
54
55        unsafe {
56            avcodec_parameters_copy((*self.as_mut_ptr()).codecpar, parameters.as_ptr());
57        }
58    }
59
60    pub fn set_metadata(&mut self, metadata: Dictionary) {
61        unsafe {
62            let metadata = metadata.disown();
63            (*self.as_mut_ptr()).metadata = metadata;
64        }
65    }
66}
67
68impl<'a> Deref for StreamMut<'a> {
69    type Target = Stream<'a>;
70
71    fn deref(&self) -> &Self::Target {
72        &self.immutable
73    }
74}