ffmpeg_next/format/stream/
stream_mut.rs1use 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}