From 734e1da7966fecd2e03879bf38a25de3437cd356 Mon Sep 17 00:00:00 2001 From: Gerwin van der Lugt Date: Tue, 16 Apr 2024 13:26:09 +0200 Subject: [PATCH] fix AvioContext write_packet callback changed in ffmpeg 7 --- build.rs | 12 ++++++++++++ src/ffi.rs | 9 +++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 build.rs diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..a85e15c --- /dev/null +++ b/build.rs @@ -0,0 +1,12 @@ +use std::env; + +fn main() { + for (name, _value) in env::vars() { + if name.starts_with("DEP_FFMPEG_") { + println!( + r#"cargo:rustc-cfg=feature="{}""#, + name["DEP_FFMPEG_".len()..name.len()].to_lowercase() + ); + } + } +} diff --git a/src/ffi.rs b/src/ffi.rs index 0720147..3c79c62 100644 --- a/src/ffi.rs +++ b/src/ffi.rs @@ -141,7 +141,7 @@ pub fn output_raw_packetized_buf_start( // No `read_packet`. None, // Passthrough for `write_packet`. - Some(output_raw_buf_start_callback as _), + Some(output_raw_buf_start_callback), // No `seek`. None, ); @@ -436,11 +436,16 @@ pub fn init_logging() { } } +#[cfg(feature = "ffmpeg_7_0")] +type __AvioContextWritePacketCbParam2Type = *const u8; +#[cfg(not(feature = "ffmpeg_7_0"))] +type __AvioContextWritePacketCbParam2Type = *mut u8; + /// Passthrough function that is passed to `libavformat` in `avio_alloc_context` and pushes buffers /// from a packetized stream onto the packet buffer held in `opaque`. extern "C" fn output_raw_buf_start_callback( opaque: *mut std::ffi::c_void, - buffer: *mut u8, + buffer: __AvioContextWritePacketCbParam2Type, buffer_size: i32, ) -> i32 { unsafe {