fd2d71c92b
* sys: Run cargo fmt * sys: Add new channel layout consts * sys: Update build script for 7.0 - Add new FF_API flags - Update version_check_info range - Add ffmpeg_7_0 feature entry * sys: Update non-exhaustive match statement * Update enums * Mark old APIs as removed with 7.0 * Make Audio frame work with 7.0 The .unwrap() in clone() is a bit wonky * Add API for swr_alloc_set_opts2 * Use AVFrame::duration field in 7.0+ * Include 7.0 in CI runs * Add fn ChanneLayoutIter::best * Update examples for new API * Add/update Context setter for ch layout
113 lines
4.0 KiB
Rust
113 lines
4.0 KiB
Rust
extern crate ffmpeg_the_third as ffmpeg;
|
|
|
|
use std::env;
|
|
|
|
fn main() {
|
|
ffmpeg::init().unwrap();
|
|
|
|
for arg in env::args().skip(1) {
|
|
if let Some(codec) = ffmpeg::decoder::find_by_name(&arg) {
|
|
println!("type: decoder");
|
|
println!("\t id: {:?}", codec.id());
|
|
println!("\t name: {}", codec.name());
|
|
println!("\t description: {}", codec.description());
|
|
println!("\t medium: {:?}", codec.medium());
|
|
println!("\t capabilities: {:?}", codec.capabilities());
|
|
|
|
if let Some(profiles) = codec.profiles() {
|
|
println!("\t profiles: {:?}", profiles.collect::<Vec<_>>());
|
|
} else {
|
|
println!("\t profiles: none");
|
|
}
|
|
|
|
if let Ok(video) = codec.video() {
|
|
if let Some(rates) = video.rates() {
|
|
println!("\t rates: {:?}", rates.collect::<Vec<_>>());
|
|
} else {
|
|
println!("\t rates: any");
|
|
}
|
|
|
|
if let Some(formats) = video.formats() {
|
|
println!("\t formats: {:?}", formats.collect::<Vec<_>>());
|
|
} else {
|
|
println!("\t formats: any");
|
|
}
|
|
}
|
|
|
|
if let Ok(audio) = codec.audio() {
|
|
if let Some(rates) = audio.rates() {
|
|
println!("\t rates: {:?}", rates.collect::<Vec<_>>());
|
|
} else {
|
|
println!("\t rates: any");
|
|
}
|
|
|
|
if let Some(formats) = audio.formats() {
|
|
println!("\t formats: {:?}", formats.collect::<Vec<_>>());
|
|
} else {
|
|
println!("\t formats: any");
|
|
}
|
|
|
|
#[cfg(feature = "ffmpeg_5_1")]
|
|
if let Some(layouts) = audio.ch_layouts() {
|
|
println!("\t channel_layouts: {:?}", layouts.collect::<Vec<_>>());
|
|
} else {
|
|
println!("\t channel_layouts: any");
|
|
}
|
|
}
|
|
|
|
println!("\t max_lowres: {:?}", codec.max_lowres());
|
|
}
|
|
|
|
if let Some(codec) = ffmpeg::encoder::find_by_name(&arg) {
|
|
println!();
|
|
println!("type: encoder");
|
|
println!("\t id: {:?}", codec.id());
|
|
println!("\t name: {}", codec.name());
|
|
println!("\t description: {}", codec.description());
|
|
println!("\t medium: {:?}", codec.medium());
|
|
println!("\t capabilities: {:?}", codec.capabilities());
|
|
|
|
if let Some(profiles) = codec.profiles() {
|
|
println!("\t profiles: {:?}", profiles.collect::<Vec<_>>());
|
|
}
|
|
|
|
if let Ok(video) = codec.video() {
|
|
if let Some(rates) = video.rates() {
|
|
println!("\t rates: {:?}", rates.collect::<Vec<_>>());
|
|
} else {
|
|
println!("\t rates: any");
|
|
}
|
|
|
|
if let Some(formats) = video.formats() {
|
|
println!("\t formats: {:?}", formats.collect::<Vec<_>>());
|
|
} else {
|
|
println!("\t formats: any");
|
|
}
|
|
}
|
|
|
|
if let Ok(audio) = codec.audio() {
|
|
if let Some(rates) = audio.rates() {
|
|
println!("\t rates: {:?}", rates.collect::<Vec<_>>());
|
|
} else {
|
|
println!("\t rates: any");
|
|
}
|
|
|
|
if let Some(formats) = audio.formats() {
|
|
println!("\t formats: {:?}", formats.collect::<Vec<_>>());
|
|
} else {
|
|
println!("\t formats: any");
|
|
}
|
|
|
|
#[cfg(feature = "ffmpeg_5_1")]
|
|
if let Some(layouts) = audio.ch_layouts() {
|
|
println!("\t channel_layouts: {:?}", layouts.collect::<Vec<_>>());
|
|
} else {
|
|
println!("\t channel_layouts: any");
|
|
}
|
|
}
|
|
|
|
println!("\t max_lowres: {:?}", codec.max_lowres());
|
|
}
|
|
}
|
|
}
|