fix(examples): adjust for time_base changes

This commit is contained in:
tilpner
2023-08-29 16:09:37 +02:00
parent 825e0d4484
commit 49db1407b6
5 changed files with 24 additions and 20 deletions
+3 -3
View File
@@ -9,7 +9,7 @@ fn main() {
for chapter in ictx.chapters() {
println!("chapter id {}:", chapter.id());
println!("\ttime_base: {}", chapter.time_base());
println!("\ttime_base: {:?}", chapter.time_base());
println!("\tstart: {}", chapter.start());
println!("\tend: {}", chapter.end());
@@ -28,7 +28,7 @@ fn main() {
match octx.add_chapter(
chapter.id(),
chapter.time_base(),
chapter.time_base().expect("Input chapter is missing a time base"),
chapter.start(),
chapter.end(),
&title,
@@ -43,7 +43,7 @@ fn main() {
println!("\nOuput: nb chapters: {}", octx.nb_chapters());
for chapter in octx.chapters() {
println!("chapter id {}:", chapter.id());
println!("\ttime_base: {}", chapter.time_base());
println!("\ttime_base: {:?}", chapter.time_base());
println!("\tstart: {}", chapter.start());
println!("\tend: {}", chapter.end());
for (k, v) in chapter.metadata().iter() {
+5 -2
View File
@@ -32,12 +32,15 @@ fn main() {
for stream in context.streams() {
println!("stream index {}:", stream.index());
println!("\ttime_base: {}", stream.time_base());
println!("\ttime_base: {:?}", stream.time_base());
println!("\tstart_time: {:?}", stream.start_time());
println!("\tduration (stream timebase): {:?}", stream.duration());
println!(
"\tduration (seconds): {:?}",
stream.duration().map(|d| d as f64 * f64::from(stream.time_base()))
stream
.time_base()
.zip(stream.duration())
.map(|(tb, d)| d as f64 * f64::from(tb))
);
println!("\tframes: {}", stream.frames());
println!("\tdisposition: {:?}", stream.disposition());
+3 -3
View File
@@ -1,6 +1,6 @@
use std::env;
use ffmpeg::{format, media, Rational};
use ffmpeg::{format, media};
fn main() {
let input_file = env::args().nth(1).expect("missing input file");
@@ -12,7 +12,7 @@ fn main() {
let mut octx = format::output(&output_file).unwrap();
let mut stream_mapping = vec![0; ictx.nb_streams() as _];
let mut ist_time_bases = vec![Rational(0, 1); ictx.nb_streams() as _];
let mut ist_time_bases = vec![None; ictx.nb_streams() as _];
let mut ost_index = 0;
for (ist_index, ist) in ictx.streams().enumerate() {
let codec_par = ist.parameters();
@@ -45,7 +45,7 @@ fn main() {
continue;
}
let ost = octx.stream(ost_index as _).unwrap();
packet.rescale_ts(ist_time_bases[ist_index], ost.time_base());
packet.rescale_ts(ist_time_bases[ist_index].unwrap(), ost.time_base().unwrap());
packet.set_position(-1);
packet.set_stream(ost_index as _);
packet.write_interleaved(&mut octx).unwrap();
+7 -6
View File
@@ -11,7 +11,7 @@ fn filter(
let args = format!(
"time_base={}:sample_rate={}:sample_fmt={}:channel_layout={}",
decoder.time_base(),
decoder.time_base().unwrap(),
decoder.sample_rate(),
decoder.format().name(),
decoder.channel_layout().describe().unwrap()
@@ -94,16 +94,17 @@ fn transcoder<P: AsRef<Path>>(
encoder.set_bit_rate(decoder.bit_rate());
encoder.set_max_bit_rate(decoder.max_bit_rate());
encoder.set_time_base((1, decoder.sample_rate() as i32));
output.set_time_base((1, decoder.sample_rate() as i32));
let enc_tb = (1, decoder.sample_rate() as i32);
encoder.set_time_base(Some(enc_tb));
output.set_time_base(Some(enc_tb));
let encoder = encoder.open_as(codec)?;
output.set_parameters(encoder.parameters());
let filter = filter(filter_spec, &decoder, &encoder)?;
let in_time_base = decoder.time_base();
let out_time_base = output.time_base();
let in_time_base = decoder.time_base().unwrap();
let out_time_base = output.time_base().unwrap();
Ok(Transcoder {
stream: input.index(),
@@ -207,7 +208,7 @@ fn main() {
for res in ictx.packets() {
let (stream, mut packet) = res.unwrap();
if stream.index() == transcoder.stream {
packet.rescale_ts(stream.time_base(), transcoder.in_time_base);
packet.rescale_ts(stream.time_base().unwrap(), transcoder.in_time_base);
transcoder.send_packet_to_decoder(&packet);
transcoder.receive_and_process_decoded_frames(&mut octx);
}
+6 -6
View File
@@ -51,7 +51,7 @@ impl Transcoder {
encoder.set_aspect_ratio(decoder.aspect_ratio());
encoder.set_format(decoder.format());
encoder.set_frame_rate(decoder.frame_rate());
encoder.set_time_base(decoder.frame_rate().unwrap().invert());
encoder.set_time_base(Some(decoder.frame_rate().unwrap().invert()));
if global_header {
encoder.set_flags(codec::Flags::GLOBAL_HEADER);
}
@@ -85,7 +85,7 @@ impl Transcoder {
self.frame_count += 1;
let timestamp = frame.timestamp();
self.log_progress(f64::from(
Rational(timestamp.unwrap_or(0) as i32, 1) * self.decoder.time_base(),
Rational(timestamp.unwrap_or(0) as i32, 1) * self.decoder.time_base().unwrap(),
));
frame.set_pts(timestamp);
frame.set_kind(picture::Type::None);
@@ -106,7 +106,7 @@ impl Transcoder {
let mut encoded = Packet::empty();
while self.encoder.receive_packet(&mut encoded).is_ok() {
encoded.set_stream(self.ost_index);
encoded.rescale_ts(self.decoder.time_base(), ost_time_base);
encoded.rescale_ts(self.decoder.time_base().unwrap(), ost_time_base);
encoded.write_interleaved(octx).unwrap();
}
}
@@ -170,7 +170,7 @@ fn main() {
continue;
}
stream_mapping[ist_index] = ost_index;
ist_time_bases[ist_index] = ist.time_base();
ist_time_bases[ist_index] = ist.time_base().unwrap();
if ist_medium == media::Type::Video {
// Initialize transcoder for video stream.
transcoders.insert(
@@ -204,7 +204,7 @@ fn main() {
octx.write_header().unwrap();
for (ost_index, _) in octx.streams().enumerate() {
ost_time_bases[ost_index] = octx.stream(ost_index as _).unwrap().time_base();
ost_time_bases[ost_index] = octx.stream(ost_index as _).unwrap().time_base().unwrap();
}
for res in ictx.packets() {
@@ -217,7 +217,7 @@ fn main() {
let ost_time_base = ost_time_bases[ost_index as usize];
match transcoders.get_mut(&ist_index) {
Some(transcoder) => {
packet.rescale_ts(stream.time_base(), transcoder.decoder.time_base());
packet.rescale_ts(stream.time_base().unwrap(), transcoder.decoder.time_base().unwrap());
transcoder.send_packet_to_decoder(&packet);
transcoder.receive_and_process_decoded_frames(&mut octx, ost_time_base);
}