examples/transcode-audio: avoid packet reallocation
This commit is contained in:
parent
71d23d0f92
commit
a7fcbd81fa
@ -97,29 +97,26 @@ fn main() {
|
|||||||
octx.set_metadata(ictx.metadata().to_owned());
|
octx.set_metadata(ictx.metadata().to_owned());
|
||||||
octx.write_header().unwrap();
|
octx.write_header().unwrap();
|
||||||
|
|
||||||
let time_base = (1, 1000000);
|
let in_time_base = (1, 1000000);
|
||||||
let mut frame = frame::Audio::empty();
|
let out_time_base = octx.stream(0).unwrap().time_base();
|
||||||
|
|
||||||
let (os_index, os_time_base) = {
|
let mut decoded = frame::Audio::empty();
|
||||||
let os = octx.stream(0).unwrap();
|
let mut encoded = ffmpeg::Packet::empty();
|
||||||
(os.index(), os.time_base())
|
|
||||||
};
|
|
||||||
|
|
||||||
for (stream, mut packet) in ictx.packets() {
|
for (stream, mut packet) in ictx.packets() {
|
||||||
if stream.index() == transcoder.stream {
|
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() {
|
if transcoder.decoder.decode(&packet, &mut decoded).unwrap() {
|
||||||
let timestamp = frame.timestamp();
|
let timestamp = decoded.timestamp();
|
||||||
frame.set_pts(timestamp);
|
decoded.set_pts(timestamp);
|
||||||
transcoder.filter.get("in").unwrap().source().add(&frame).unwrap();
|
|
||||||
|
|
||||||
while let Ok(..) = transcoder.filter.get("out").unwrap().sink().frame(&mut frame) {
|
transcoder.filter.get("in").unwrap().source().add(&decoded).unwrap();
|
||||||
let mut encoded = ffmpeg::Packet::empty();
|
|
||||||
|
|
||||||
if let Ok(true) = transcoder.encoder.encode(&frame, &mut encoded) {
|
while let Ok(..) = transcoder.filter.get("out").unwrap().sink().frame(&mut decoded) {
|
||||||
encoded.set_stream(os_index);
|
if let Ok(true) = transcoder.encoder.encode(&decoded, &mut encoded) {
|
||||||
encoded.rescale_ts(time_base, os_time_base);
|
encoded.set_stream(0);
|
||||||
|
encoded.rescale_ts(in_time_base, out_time_base);
|
||||||
encoded.write_interleaved(&mut octx).unwrap();
|
encoded.write_interleaved(&mut octx).unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user