From 93b7f58ebc4ca60ff3b3bb336a999966bd95717c Mon Sep 17 00:00:00 2001 From: Zhiming Wang Date: Sat, 8 Aug 2020 00:57:44 +0800 Subject: [PATCH] examples/avi-to-ppm: reimplement with modern API Avoid decoder.decode. --- examples/avi-to-ppm.rs | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/examples/avi-to-ppm.rs b/examples/avi-to-ppm.rs index 13bf390..ef940d9 100644 --- a/examples/avi-to-ppm.rs +++ b/examples/avi-to-ppm.rs @@ -31,26 +31,27 @@ fn main() -> Result<(), ffmpeg::Error> { )?; let mut frame_index = 0; - for (stream, packet) in ictx.packets() { - if stream.index() != video_stream_index { - continue; - } - let mut frame = Video::empty(); - match decoder.decode(&packet, &mut frame) { - Ok(_) => { + + let mut receive_and_process_decoded_frames = + |decoder: &mut ffmpeg::decoder::Video| -> Result<(), ffmpeg::Error> { + let mut decoded = Video::empty(); + while decoder.receive_frame(&mut decoded).is_ok() { let mut rgb_frame = Video::empty(); - scaler.run(&frame, &mut rgb_frame)?; - match save_file(&rgb_frame, frame_index) { - Ok(_) => {} - Err(e) => println!("Error occurred during file writing - {}", e), - } + scaler.run(&decoded, &mut rgb_frame)?; + save_file(&rgb_frame, frame_index).unwrap(); frame_index += 1; } - _ => { - println!("Error occurred while decoding packet."); - } + Ok(()) + }; + + for (stream, packet) in ictx.packets() { + if stream.index() == video_stream_index { + decoder.send_packet(&packet)?; + receive_and_process_decoded_frames(&mut decoder)?; } } + decoder.send_eof()?; + receive_and_process_decoded_frames(&mut decoder)?; } Ok(())