#[repr(transparent)]pub struct ChannelLayout(pub AVChannelLayout);Tuple Fields§
§0: AVChannelLayoutImplementations§
Source§impl ChannelLayout
impl ChannelLayout
pub const MONO: ChannelLayout
pub const STEREO: ChannelLayout
pub const _2POINT1: ChannelLayout
pub const _2_1: ChannelLayout
pub const SURROUND: ChannelLayout
pub const _3POINT1: ChannelLayout
pub const _4POINT0: ChannelLayout
pub const _4POINT1: ChannelLayout
pub const _2_2: ChannelLayout
pub const QUAD: ChannelLayout
pub const _5POINT0: ChannelLayout
pub const _5POINT1: ChannelLayout
pub const _5POINT0_BACK: ChannelLayout
pub const _5POINT1_BACK: ChannelLayout
pub const _6POINT0: ChannelLayout
pub const _6POINT0_FRONT: ChannelLayout
pub const _3POINT1POINT2: ChannelLayout
pub const HEXAGONAL: ChannelLayout
pub const _6POINT1: ChannelLayout
pub const _6POINT1_BACK: ChannelLayout
pub const _6POINT1_FRONT: ChannelLayout
pub const _7POINT0: ChannelLayout
pub const _7POINT0_FRONT: ChannelLayout
pub const _7POINT1: ChannelLayout
pub const _7POINT1_WIDE: ChannelLayout
pub const _7POINT1_WIDE_BACK: ChannelLayout
pub const _5POINT1POINT2_BACK: ChannelLayout
pub const OCTAGONAL: ChannelLayout
pub const CUBE: ChannelLayout
pub const _5POINT1POINT4_BACK: ChannelLayout
pub const _7POINT1POINT2: ChannelLayout
pub const _7POINT1POINT4_BACK: ChannelLayout
pub const _7POINT2POINT3: ChannelLayout
pub const _9POINT1POINT4_BACK: ChannelLayout
pub const HEXADECAGONAL: ChannelLayout
pub const STEREO_DOWNMIX: ChannelLayout
pub const _22POINT2: ChannelLayout
pub const _7POINT1_TOP_BACK: ChannelLayout
Sourcepub fn channels(&self) -> i32
pub fn channels(&self) -> i32
Examples found in repository?
examples/transcode-audio.rs (line 92)
64fn transcoder<P: AsRef<Path> + ?Sized>(
65 ictx: &mut format::context::Input,
66 octx: &mut format::context::Output,
67 path: &P,
68 filter_spec: &str,
69) -> Result<Transcoder, ffmpeg::Error> {
70 let input = ictx
71 .streams()
72 .best(media::Type::Audio)
73 .expect("could not find best audio stream");
74 let context = ffmpeg::codec::context::Context::from_parameters(input.parameters())?;
75 let mut decoder = context.decoder().audio()?;
76 let codec = ffmpeg::encoder::find(octx.format().codec(path, media::Type::Audio))
77 .expect("failed to find encoder")
78 .audio()?;
79 let global = octx
80 .format()
81 .flags()
82 .contains(ffmpeg::format::flag::Flags::GLOBAL_HEADER);
83
84 decoder.set_parameters(input.parameters())?;
85
86 let mut output = octx.add_stream(codec)?;
87 let context = ffmpeg::codec::context::Context::from_parameters(output.parameters())?;
88 let mut encoder = context.encoder().audio()?;
89
90 let channel_layout = codec
91 .channel_layouts()
92 .map(|cls| cls.best(decoder.channel_layout().channels()))
93 .unwrap_or(ffmpeg::channel_layout::ChannelLayout::STEREO);
94
95 if global {
96 encoder.set_flags(ffmpeg::codec::flag::Flags::GLOBAL_HEADER);
97 }
98
99 encoder.set_rate(decoder.rate() as i32);
100 encoder.set_channel_layout(channel_layout);
101 #[cfg(not(feature = "ffmpeg_7_0"))]
102 {
103 encoder.set_channels(channel_layout.channels());
104 }
105 encoder.set_format(
106 codec
107 .formats()
108 .expect("unknown supported formats")
109 .next()
110 .unwrap(),
111 );
112 encoder.set_bit_rate(decoder.bit_rate());
113 encoder.set_max_bit_rate(decoder.max_bit_rate());
114
115 encoder.set_time_base((1, decoder.rate() as i32));
116 output.set_time_base((1, decoder.rate() as i32));
117
118 let encoder = encoder.open_as(codec)?;
119 output.set_parameters(&encoder);
120
121 let filter = filter(filter_spec, &decoder, &encoder)?;
122
123 let in_time_base = decoder.time_base();
124 let out_time_base = output.time_base();
125
126 Ok(Transcoder {
127 stream: input.index(),
128 filter,
129 decoder,
130 encoder,
131 in_time_base,
132 out_time_base,
133 })
134}Sourcepub fn bits(&self) -> u64
pub fn bits(&self) -> u64
Examples found in repository?
examples/transcode-audio.rs (line 21)
9fn filter(
10 spec: &str,
11 decoder: &codec::decoder::Audio,
12 encoder: &codec::encoder::Audio,
13) -> Result<filter::Graph, ffmpeg::Error> {
14 let mut filter = filter::Graph::new();
15
16 let args = format!(
17 "time_base={}:sample_rate={}:sample_fmt={}:channel_layout=0x{:x}",
18 decoder.time_base(),
19 decoder.rate(),
20 decoder.format().name(),
21 decoder.channel_layout().bits()
22 );
23
24 filter.add(&filter::find("abuffer").unwrap(), "in", &args)?;
25 filter.add(&filter::find("abuffersink").unwrap(), "out", "")?;
26
27 {
28 let mut out = filter.get("out").unwrap();
29
30 out.set_sample_format(encoder.format());
31 out.set_channel_layout(encoder.channel_layout());
32 out.set_sample_rate(encoder.rate());
33 }
34
35 filter.output("in", 0)?.input("out", 0)?.parse(spec)?;
36 filter.validate()?;
37
38 println!("{}", filter.dump());
39
40 if let Some(codec) = encoder.codec()
41 && !codec
42 .capabilities()
43 .contains(ffmpeg::codec::capabilities::Capabilities::VARIABLE_FRAME_SIZE)
44 {
45 filter
46 .get("out")
47 .unwrap()
48 .sink()
49 .set_frame_size(encoder.frame_size());
50 }
51
52 Ok(filter)
53}pub fn default(number: i32) -> ChannelLayout
pub fn is_empty(&self) -> bool
Trait Implementations§
Source§impl Clone for ChannelLayout
impl Clone for ChannelLayout
Source§fn clone(&self) -> ChannelLayout
fn clone(&self) -> ChannelLayout
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for ChannelLayout
Source§impl Debug for ChannelLayout
impl Debug for ChannelLayout
impl Eq for ChannelLayout
Source§impl From<AVChannelLayout> for ChannelLayout
impl From<AVChannelLayout> for ChannelLayout
Source§fn from(value: AVChannelLayout) -> Self
fn from(value: AVChannelLayout) -> Self
Converts to this type from the input type.
Source§impl From<ChannelLayout> for AVChannelLayout
impl From<ChannelLayout> for AVChannelLayout
Source§fn from(value: ChannelLayout) -> Self
fn from(value: ChannelLayout) -> Self
Converts to this type from the input type.
Auto Trait Implementations§
impl !Send for ChannelLayout
impl !Sync for ChannelLayout
impl Freeze for ChannelLayout
impl RefUnwindSafe for ChannelLayout
impl Unpin for ChannelLayout
impl UnsafeUnpin for ChannelLayout
impl UnwindSafe for ChannelLayout
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more