examples/avi-to-ppm: reimplement with modern API

Avoid decoder.decode.
This commit is contained in:
Zhiming Wang 2020-08-08 00:57:44 +08:00
parent e1cabad5c9
commit 93b7f58ebc
No known key found for this signature in database
GPG Key ID: 5B58F95EC95965D8

View File

@ -31,26 +31,27 @@ fn main() -> Result<(), ffmpeg::Error> {
)?; )?;
let mut frame_index = 0; let mut frame_index = 0;
for (stream, packet) in ictx.packets() {
if stream.index() != video_stream_index { let mut receive_and_process_decoded_frames =
continue; |decoder: &mut ffmpeg::decoder::Video| -> Result<(), ffmpeg::Error> {
} let mut decoded = Video::empty();
let mut frame = Video::empty(); while decoder.receive_frame(&mut decoded).is_ok() {
match decoder.decode(&packet, &mut frame) {
Ok(_) => {
let mut rgb_frame = Video::empty(); let mut rgb_frame = Video::empty();
scaler.run(&frame, &mut rgb_frame)?; scaler.run(&decoded, &mut rgb_frame)?;
match save_file(&rgb_frame, frame_index) { save_file(&rgb_frame, frame_index).unwrap();
Ok(_) => {}
Err(e) => println!("Error occurred during file writing - {}", e),
}
frame_index += 1; frame_index += 1;
} }
_ => { Ok(())
println!("Error occurred while decoding packet."); };
}
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(()) Ok(())