From a7fcbd81fab434bebc2b65934dc3ec727d4585eb Mon Sep 17 00:00:00 2001 From: meh Date: Sat, 12 Sep 2015 20:39:06 +0200 Subject: [PATCH] examples/transcode-audio: avoid packet reallocation --- examples/transcode-audio.rs | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/examples/transcode-audio.rs b/examples/transcode-audio.rs index c7e3344..6dc54b1 100644 --- a/examples/transcode-audio.rs +++ b/examples/transcode-audio.rs @@ -97,29 +97,26 @@ fn main() { octx.set_metadata(ictx.metadata().to_owned()); octx.write_header().unwrap(); - let time_base = (1, 1000000); - let mut frame = frame::Audio::empty(); + let in_time_base = (1, 1000000); + let out_time_base = octx.stream(0).unwrap().time_base(); - let (os_index, os_time_base) = { - let os = octx.stream(0).unwrap(); - (os.index(), os.time_base()) - }; + let mut decoded = frame::Audio::empty(); + let mut encoded = ffmpeg::Packet::empty(); for (stream, mut packet) in ictx.packets() { if stream.index() == transcoder.stream { - packet.rescale_ts(stream.time_base(), time_base); + packet.rescale_ts(stream.time_base(), in_time_base); - if transcoder.decoder.decode(&packet, &mut frame).unwrap() { - let timestamp = frame.timestamp(); - frame.set_pts(timestamp); - transcoder.filter.get("in").unwrap().source().add(&frame).unwrap(); + if transcoder.decoder.decode(&packet, &mut decoded).unwrap() { + let timestamp = decoded.timestamp(); + decoded.set_pts(timestamp); - while let Ok(..) = transcoder.filter.get("out").unwrap().sink().frame(&mut frame) { - let mut encoded = ffmpeg::Packet::empty(); + transcoder.filter.get("in").unwrap().source().add(&decoded).unwrap(); - if let Ok(true) = transcoder.encoder.encode(&frame, &mut encoded) { - encoded.set_stream(os_index); - encoded.rescale_ts(time_base, os_time_base); + while let Ok(..) = transcoder.filter.get("out").unwrap().sink().frame(&mut decoded) { + if let Ok(true) = transcoder.encoder.encode(&decoded, &mut encoded) { + encoded.set_stream(0); + encoded.rescale_ts(in_time_base, out_time_base); encoded.write_interleaved(&mut octx).unwrap(); } }