From 9caddc3c2d9c356ad076fadea22968556c13df01 Mon Sep 17 00:00:00 2001 From: tilpner Date: Sat, 22 Apr 2023 12:10:07 +0200 Subject: [PATCH] fix: adjust examples for v6.0 API changes --- examples/dump-frames.rs | 2 +- examples/metadata.rs | 17 +++++++++-------- examples/remux.rs | 7 ++++--- examples/transcode-audio.rs | 16 ++++++++-------- examples/transcode-x264.rs | 26 ++++++++++++++------------ 5 files changed, 36 insertions(+), 32 deletions(-) diff --git a/examples/dump-frames.rs b/examples/dump-frames.rs index d99f429..d63a4a6 100644 --- a/examples/dump-frames.rs +++ b/examples/dump-frames.rs @@ -14,7 +14,7 @@ fn main() -> Result<(), ffmpeg::Error> { let input = ictx.streams().best(Type::Video).ok_or(ffmpeg::Error::StreamNotFound)?; let video_stream_index = input.index(); - let mut decoder = input.codec().decoder().video()?; + let mut decoder = input.decoder()?.video()?; let mut scaler = Context::get( decoder.format(), diff --git a/examples/metadata.rs b/examples/metadata.rs index da1fa7a..9f60110 100644 --- a/examples/metadata.rs +++ b/examples/metadata.rs @@ -44,12 +44,14 @@ fn main() { println!("\tdiscard: {:?}", stream.discard()); println!("\tframe rate: {}", stream.frame_rate()); - let codec = stream.codec(); - println!("\tmedium: {:?}", codec.medium()); - println!("\tid: {:?}", codec.id()); + let codec_par = stream.parameters(); + println!("\tmedium: {:?}", codec_par.medium()); + println!("\tid: {:?}", codec_par.id()); - if codec.medium() == ffmpeg::media::Type::Video { - if let Ok(video) = codec.decoder().video() { + let dec = stream.decoder().expect("Unable to open decoder"); + + if codec_par.medium() == ffmpeg::media::Type::Video { + if let Ok(video) = dec.video() { println!("\tbit_rate: {}", video.bit_rate()); println!("\tmax_rate: {}", video.max_bit_rate()); println!("\tdelay: {}", video.delay()); @@ -70,8 +72,8 @@ fn main() { println!("\tvideo.intra_dc_precision: {}", video.intra_dc_precision()); } } - else if codec.medium() == ffmpeg::media::Type::Audio { - if let Ok(audio) = codec.decoder().audio() { + else if codec_par.medium() == ffmpeg::media::Type::Audio { + if let Ok(audio) = dec.audio() { println!("\tbit_rate: {}", audio.bit_rate()); println!("\tmax_rate: {}", audio.max_bit_rate()); println!("\tdelay: {}", audio.delay()); @@ -81,7 +83,6 @@ fn main() { println!("\taudio.frames: {}", audio.frames()); println!("\taudio.align: {}", audio.align()); println!("\taudio.channel_layout: {:?}", audio.channel_layout()); - println!("\taudio.frame_start: {:?}", audio.frame_start()); } } } diff --git a/examples/remux.rs b/examples/remux.rs index fa10784..d3c5edd 100644 --- a/examples/remux.rs +++ b/examples/remux.rs @@ -1,6 +1,6 @@ use std::env; -use ffmpeg::{codec, encoder, format, media, Rational}; +use ffmpeg::{format, media, Rational}; fn main() { let input_file = env::args().nth(1).expect("missing input file"); @@ -15,7 +15,8 @@ fn main() { let mut ist_time_bases = vec![Rational(0, 1); ictx.nb_streams() as _]; let mut ost_index = 0; for (ist_index, ist) in ictx.streams().enumerate() { - let ist_medium = ist.codec().medium(); + let codec_par = ist.parameters(); + let ist_medium = codec_par.medium(); if ist_medium != media::Type::Audio && ist_medium != media::Type::Video && ist_medium != media::Type::Subtitle { stream_mapping[ist_index] = -1; continue; @@ -23,7 +24,7 @@ fn main() { stream_mapping[ist_index] = ost_index; ist_time_bases[ist_index] = ist.time_base(); ost_index += 1; - let mut ost = octx.add_stream(encoder::find(codec::Id::None)).unwrap(); + let mut ost = octx.add_stream().unwrap(); ost.set_parameters(ist.parameters()); // We need to set codec_tag to 0 lest we run into incompatible codec tag // issues when muxing into a different container format. Unfortunately diff --git a/examples/transcode-audio.rs b/examples/transcode-audio.rs index 8c1775f..8f71b7c 100644 --- a/examples/transcode-audio.rs +++ b/examples/transcode-audio.rs @@ -1,6 +1,6 @@ use std::{env, path::Path}; -use ffmpeg::{codec, filter, format, frame, media, rescale, Rescale}; +use ffmpeg::{channel_layout::ChannelLayout, codec, filter, format, frame, media, rescale, Rescale}; fn filter( spec: &str, @@ -10,11 +10,11 @@ fn filter( let mut filter = filter::Graph::new(); let args = format!( - "time_base={}:sample_rate={}:sample_fmt={}:channel_layout=0x{:x}", + "time_base={}:sample_rate={}:sample_fmt={}:channel_layout={}", decoder.time_base(), decoder.sample_rate(), decoder.format().name(), - decoder.channel_layout().bits() + decoder.channel_layout().describe().unwrap() ); filter.add(&filter::find("abuffer").unwrap(), "in", &args)?; @@ -64,7 +64,7 @@ fn transcoder>( .streams() .best(media::Type::Audio) .expect("could not find best audio stream"); - let mut decoder = input.codec().decoder().audio()?; + let mut decoder = input.decoder()?.audio()?; let codec = ffmpeg::encoder::find(octx.format().codec(path, media::Type::Audio)) .expect("failed to find encoder") .audio()?; @@ -75,13 +75,13 @@ fn transcoder>( decoder.set_parameters(input.parameters())?; - let mut output = octx.add_stream(codec)?; - let mut encoder = output.codec().encoder().audio()?; + let mut output = octx.add_stream()?; + let mut encoder = codec::Encoder::new(codec)?.audio()?; let channel_layout = codec .channel_layouts() .map(|cls| cls.best(decoder.channel_layout().channels())) - .unwrap_or(ffmpeg::channel_layout::ChannelLayout::STEREO); + .unwrap_or(ChannelLayout::STEREO); if global { encoder.set_flags(ffmpeg::codec::flag::Flags::GLOBAL_HEADER); @@ -98,7 +98,7 @@ fn transcoder>( output.set_time_base((1, decoder.sample_rate() as i32)); let encoder = encoder.open_as(codec)?; - output.set_parameters(&encoder); + output.set_parameters(encoder.parameters()); let filter = filter(filter_spec, &decoder, &encoder)?; diff --git a/examples/transcode-x264.rs b/examples/transcode-x264.rs index 1d91882..b49788f 100644 --- a/examples/transcode-x264.rs +++ b/examples/transcode-x264.rs @@ -24,7 +24,7 @@ const DEFAULT_X264_OPTS: &str = "preset=medium"; struct Transcoder { ost_index: usize, decoder: decoder::Video, - encoder: encoder::video::Video, + encoder: encoder::Video, logging_enabled: bool, frame_count: usize, last_log_frame_count: usize, @@ -41,9 +41,11 @@ impl Transcoder { enable_logging: bool, ) -> Result { let global_header = octx.format().flags().contains(format::Flags::GLOBAL_HEADER); - let decoder = ist.codec().decoder().video()?; - let mut ost = octx.add_stream(encoder::find(codec::Id::H264))?; - let mut encoder = ost.codec().encoder().video()?; + let decoder = ist.decoder()?.open()?.video()?; + + let mut ost = octx.add_stream()?; + let codec = encoder::find(codec::Id::H264).unwrap(); + let mut encoder = codec::Encoder::new(codec)?.video()?; encoder.set_height(decoder.height()); encoder.set_width(decoder.width()); encoder.set_aspect_ratio(decoder.aspect_ratio()); @@ -53,15 +55,14 @@ impl Transcoder { if global_header { encoder.set_flags(codec::Flags::GLOBAL_HEADER); } - encoder + let encoder = encoder .open_with(x264_opts) .expect("error opening libx264 encoder with supplied settings"); - encoder = ost.codec().encoder().video()?; - ost.set_parameters(encoder); + ost.set_parameters(encoder.parameters()); Ok(Self { ost_index, decoder, - encoder: ost.codec().encoder().video()?, + encoder, logging_enabled: enable_logging, frame_count: 0, last_log_frame_count: 0, @@ -117,7 +118,7 @@ impl Transcoder { return; } eprintln!( - "time elpased: \t{:8.2}\tframe count: {:8}\ttimestamp: {:8.2}", + "time elapsed: \t{:8.2}\tframe count: {:8}\ttimestamp: {:8.2}", self.starting_time.elapsed().as_secs_f64(), self.frame_count, timestamp @@ -163,7 +164,7 @@ fn main() { let mut transcoders = HashMap::new(); let mut ost_index = 0; for (ist_index, ist) in ictx.streams().enumerate() { - let ist_medium = ist.codec().medium(); + let ist_medium = ist.parameters().medium(); if ist_medium != media::Type::Audio && ist_medium != media::Type::Video && ist_medium != media::Type::Subtitle { stream_mapping[ist_index] = -1; continue; @@ -183,9 +184,10 @@ fn main() { ) .unwrap(), ); - } else { + } + else { // Set up for stream copy for non-video stream. - let mut ost = octx.add_stream(encoder::find(codec::Id::None)).unwrap(); + let mut ost = octx.add_stream().unwrap(); ost.set_parameters(ist.parameters()); // We need to set codec_tag to 0 lest we run into incompatible codec tag // issues when muxing into a different container format. Unfortunately