From dcc44bd1e5ba3f91ef5aa8edac93fab965634ee1 Mon Sep 17 00:00:00 2001 From: Dominik Winecki Date: Sun, 22 Jun 2025 18:19:54 +0000 Subject: [PATCH] Bump rusty_ffmpeg to 0.16.3 --- scripts/deps_ffmpeg.sh | 4 ++-- vidformer/Cargo.toml | 2 +- vidformer/src/av/demuxer.rs | 4 ++-- vidformer/src/av/encoder.rs | 6 ++--- vidformer/src/filter/builtin.rs | 22 ++++++++--------- vidformer/src/filter/cv2.rs | 36 ++++++++++++++-------------- vidformer/src/filter/filter_utils.rs | 26 +++++++++----------- vidformer/src/util.rs | 4 ++-- 8 files changed, 50 insertions(+), 54 deletions(-) diff --git a/scripts/deps_ffmpeg.sh b/scripts/deps_ffmpeg.sh index d9660250..2a3c8be7 100755 --- a/scripts/deps_ffmpeg.sh +++ b/scripts/deps_ffmpeg.sh @@ -4,8 +4,8 @@ set -e if [ ! -f ffmpeg/build/bin/ffmpeg ]; then rm -rf ffmpeg - curl https://ffmpeg.org/releases/ffmpeg-7.0.tar.xz | tar xJ - mv ffmpeg-7.0 ffmpeg + curl https://ffmpeg.org/releases/ffmpeg-7.1.tar.xz | tar xJ + mv ffmpeg-7.1 ffmpeg pushd ffmpeg mkdir build ./configure --prefix=${PWD}/build --pkg-config-flags="--static" --enable-debug --extra-cflags="-g" --enable-nonfree --enable-gpl --enable-libx264 --enable-libvpx --enable-libfdk-aac --disable-stripping --disable-decoder=exr,phm diff --git a/vidformer/Cargo.toml b/vidformer/Cargo.toml index b6b323fc..aa9baf6d 100644 --- a/vidformer/Cargo.toml +++ b/vidformer/Cargo.toml @@ -11,7 +11,7 @@ repository = "https://github.com/ixlab/vidformer" categories = ["multimedia", "multimedia::video"] [dependencies] -rusty_ffmpeg = {version = "0.13.3", features = ["link_system_ffmpeg"]} +rusty_ffmpeg = {version = "0.16.3", features = ["link_system_ffmpeg"]} log = "0.4.20" "num-traits" = "0.2" "num-rational" = { version = "0.4", features=["serde"] } diff --git a/vidformer/src/av/demuxer.rs b/vidformer/src/av/demuxer.rs index 280e5841..2bd67583 100644 --- a/vidformer/src/av/demuxer.rs +++ b/vidformer/src/av/demuxer.rs @@ -218,7 +218,7 @@ impl Demuxer { .enumerate() { if i != stream_idx { - stream.discard = ffi::AVDiscard_AVDISCARD_ALL; + stream.discard = ffi::AVDISCARD_ALL; continue; } @@ -227,7 +227,7 @@ impl Demuxer { unsafe { ffi::avcodec_find_decoder(local_codec_params.codec_id).as_ref() } .expect("ERROR unsupported codec!"); - if local_codec_params.codec_type == ffi::AVMediaType_AVMEDIA_TYPE_VIDEO { + if local_codec_params.codec_type == ffi::AVMEDIA_TYPE_VIDEO { if video_stream_index.is_none() { video_stream_index = Some(i); codec_ptr = local_codec; diff --git a/vidformer/src/av/encoder.rs b/vidformer/src/av/encoder.rs index d2ad6c1d..effa8114 100644 --- a/vidformer/src/av/encoder.rs +++ b/vidformer/src/av/encoder.rs @@ -20,7 +20,7 @@ impl Encoder { let codec = match &config.encoder { Some(enc_cfg) => enc_cfg.avcodec()?, None => { - let codec = unsafe { ffi::avcodec_find_encoder(ffi::AVCodecID_AV_CODEC_ID_H264) }; + let codec = unsafe { ffi::avcodec_find_encoder(ffi::AV_CODEC_ID_H264) }; match unsafe { codec.as_ref() } { Some(codec) => codec, None => panic!("Failed to find default h264 encoder"), @@ -66,7 +66,7 @@ impl Encoder { let pix_fmt_name = CString::new(config.output_pix_fmt.clone()).unwrap(); let output_pix_fmt = unsafe { ffi::av_get_pix_fmt(pix_fmt_name.as_ptr()) }; - if output_pix_fmt == ffi::AVPixelFormat_AV_PIX_FMT_NONE { + if output_pix_fmt == ffi::AV_PIX_FMT_NONE { return Err(crate::Error::ConfigError(format!( "Failed to find output pix fmt `{}`", config.output_pix_fmt @@ -133,7 +133,7 @@ impl Encoder { unsafe { // It's none of our business what the input frame type is // Also, we don't want the encoder to complain if something looks weird - (*frame.inner).pict_type = ffi::AVPictureType_AV_PICTURE_TYPE_NONE; + (*frame.inner).pict_type = ffi::AV_PICTURE_TYPE_NONE; } let time_scaled = pts / self.time_base; diff --git a/vidformer/src/filter/builtin.rs b/vidformer/src/filter/builtin.rs index 1dbecf6f..323dd074 100644 --- a/vidformer/src/filter/builtin.rs +++ b/vidformer/src/filter/builtin.rs @@ -41,7 +41,7 @@ impl super::Filter for PlaceholderFrame { unsafe { (*f).width = width as i32; (*f).height = height as i32; - (*f).format = ffi::AVPixelFormat_AV_PIX_FMT_YUV420P; + (*f).format = ffi::AV_PIX_FMT_YUV420P; if ffi::av_frame_get_buffer(f, 0) < 0 { panic!("ERROR could not allocate frame data"); @@ -79,7 +79,7 @@ impl super::Filter for PlaceholderFrame { Ok(FrameType::new( width as usize, height as usize, - ffi::AVPixelFormat_AV_PIX_FMT_YUV420P, + ffi::AV_PIX_FMT_YUV420P, )) } } @@ -124,7 +124,7 @@ impl super::Filter for Scale { Val::String(s) => { let format_cstr = CString::new(s.as_str()).unwrap(); let format = unsafe { ffi::av_get_pix_fmt(format_cstr.as_ptr()) }; - if format == ffi::AVPixelFormat_AV_PIX_FMT_NONE { + if format == ffi::AV_PIX_FMT_NONE { return Err(Error::InvalidFilterArgValue( s.clone(), "Invalid pixel format".to_string(), @@ -228,7 +228,7 @@ impl super::Filter for Scale { Val::String(s) => { let format_cstr = CString::new(s.as_str()).unwrap(); let format = unsafe { ffi::av_get_pix_fmt(format_cstr.as_ptr()) }; - if format == ffi::AVPixelFormat_AV_PIX_FMT_NONE { + if format == ffi::AV_PIX_FMT_NONE { return Err(Error::InvalidFilterArgValue( s.clone(), "Invalid pixel format".to_string(), @@ -318,7 +318,7 @@ impl super::Filter for InlineMat { unsafe { (*f).width = width as i32; (*f).height = height as i32; - (*f).format = ffi::AVPixelFormat_AV_PIX_FMT_RGB24; + (*f).format = ffi::AV_PIX_FMT_RGB24; if ffi::av_frame_get_buffer(f, 0) < 0 { panic!("ERROR could not allocate frame data"); @@ -417,7 +417,7 @@ impl super::Filter for InlineMat { Ok(FrameType { width: width as usize, height: height as usize, - format: ffi::AVPixelFormat_AV_PIX_FMT_RGB24, + format: ffi::AV_PIX_FMT_RGB24, }) } } @@ -550,7 +550,7 @@ impl super::Filter for SliceMat { unsafe { (*f).width = (maxx - minx) as i32; (*f).height = (maxy - miny) as i32; - (*f).format = ffi::AVPixelFormat_AV_PIX_FMT_RGB24; + (*f).format = ffi::AV_PIX_FMT_RGB24; if ffi::av_frame_get_buffer(f, 0) < 0 { panic!("ERROR could not allocate frame data"); @@ -597,7 +597,7 @@ impl super::Filter for SliceMat { _ => return Err(Error::MissingFilterArg), }; - if frame.format != ffi::AVPixelFormat_AV_PIX_FMT_RGB24 { + if frame.format != ffi::AV_PIX_FMT_RGB24 { return Err(Error::InvalidFilterArgValue( format!("{:?}", frame.format), "Invalid pixel format".to_string(), @@ -681,7 +681,7 @@ impl super::Filter for SliceWriteMat { unsafe { (*f).width = f1.width; (*f).height = f1.height; - (*f).format = ffi::AVPixelFormat_AV_PIX_FMT_RGB24; + (*f).format = ffi::AV_PIX_FMT_RGB24; if ffi::av_frame_get_buffer(f, 0) < 0 { panic!("ERROR could not allocate frame data"); @@ -743,14 +743,14 @@ impl super::Filter for SliceWriteMat { _ => return Err(Error::MissingFilterArg), }; - if f1.format != ffi::AVPixelFormat_AV_PIX_FMT_RGB24 { + if f1.format != ffi::AV_PIX_FMT_RGB24 { return Err(Error::InvalidFilterArgValue( format!("{:?}", f1.format), "Invalid pixel format".to_string(), )); } - if f2.format != ffi::AVPixelFormat_AV_PIX_FMT_RGB24 { + if f2.format != ffi::AV_PIX_FMT_RGB24 { return Err(Error::InvalidFilterArgValue( format!("{:?}", f2.format), "Invalid pixel format".to_string(), diff --git a/vidformer/src/filter/cv2.rs b/vidformer/src/filter/cv2.rs index 5b10126f..f0de44ef 100644 --- a/vidformer/src/filter/cv2.rs +++ b/vidformer/src/filter/cv2.rs @@ -130,7 +130,7 @@ impl filter::Filter for Rectangle { let img = opts.img.unwrap_frame(); let (width, height) = (img.width, img.height); - debug_assert_eq!(img.format, ffi::AVPixelFormat_AV_PIX_FMT_RGB24); + debug_assert_eq!(img.format, ffi::AV_PIX_FMT_RGB24); let mut mat = filter_utils::frame_to_mat_rgb24(&img, width, height); @@ -169,7 +169,7 @@ impl filter::Filter for Rectangle { Err(err) => return Err(dve::Error::AVError(err)), }; - if opts.img.unwrap_frame_type().format != ffi::AVPixelFormat_AV_PIX_FMT_RGB24 { + if opts.img.unwrap_frame_type().format != ffi::AV_PIX_FMT_RGB24 { return Err(dve::Error::AVError("Expected RGB24 frame".into())); } @@ -303,7 +303,7 @@ impl filter::Filter for PutText { let img = opts.img.unwrap_frame(); let (width, height) = (img.width, img.height); - debug_assert_eq!(img.format, ffi::AVPixelFormat_AV_PIX_FMT_RGB24); + debug_assert_eq!(img.format, ffi::AV_PIX_FMT_RGB24); let mut mat = filter_utils::frame_to_mat_rgb24(&img, width, height); @@ -342,7 +342,7 @@ impl filter::Filter for PutText { Err(err) => return Err(dve::Error::AVError(err)), }; - if opts.img.unwrap_frame_type().format != ffi::AVPixelFormat_AV_PIX_FMT_RGB24 { + if opts.img.unwrap_frame_type().format != ffi::AV_PIX_FMT_RGB24 { return Err(dve::Error::AVError("Expected RGB24 frame".into())); } @@ -465,7 +465,7 @@ impl filter::Filter for ArrowedLine { let img = opts.img.unwrap_frame(); let (width, height) = (img.width, img.height); - debug_assert_eq!(img.format, ffi::AVPixelFormat_AV_PIX_FMT_RGB24); + debug_assert_eq!(img.format, ffi::AV_PIX_FMT_RGB24); let mut mat = frame_to_mat_rgb24(&img, width, height); @@ -504,7 +504,7 @@ impl filter::Filter for ArrowedLine { Err(err) => return Err(dve::Error::AVError(err)), }; - if opts.img.unwrap_frame_type().format != ffi::AVPixelFormat_AV_PIX_FMT_RGB24 { + if opts.img.unwrap_frame_type().format != ffi::AV_PIX_FMT_RGB24 { return Err(dve::Error::AVError("Expected RGB24 frame".into())); } @@ -615,7 +615,7 @@ impl filter::Filter for Line { let img = opts.img.unwrap_frame(); let (width, height) = (img.width, img.height); - debug_assert_eq!(img.format, ffi::AVPixelFormat_AV_PIX_FMT_RGB24); + debug_assert_eq!(img.format, ffi::AV_PIX_FMT_RGB24); let mut mat = filter_utils::frame_to_mat_rgb24(&img, width, height); @@ -653,7 +653,7 @@ impl filter::Filter for Line { Err(err) => return Err(dve::Error::AVError(err)), }; - if opts.img.unwrap_frame_type().format != ffi::AVPixelFormat_AV_PIX_FMT_RGB24 { + if opts.img.unwrap_frame_type().format != ffi::AV_PIX_FMT_RGB24 { return Err(dve::Error::AVError("Expected RGB24 frame".into())); } @@ -769,7 +769,7 @@ impl filter::Filter for Circle { let img = opts.img.unwrap_frame(); let (width, height) = (img.width, img.height); - debug_assert_eq!(img.format, ffi::AVPixelFormat_AV_PIX_FMT_RGB24); + debug_assert_eq!(img.format, ffi::AV_PIX_FMT_RGB24); let mut mat = filter_utils::frame_to_mat_rgb24(&img, width, height); @@ -806,7 +806,7 @@ impl filter::Filter for Circle { Err(err) => return Err(dve::Error::AVError(err)), }; - if opts.img.unwrap_frame_type().format != ffi::AVPixelFormat_AV_PIX_FMT_RGB24 { + if opts.img.unwrap_frame_type().format != ffi::AV_PIX_FMT_RGB24 { return Err(dve::Error::AVError("Expected RGB24 frame".into())); } @@ -957,7 +957,7 @@ impl Filter for Ellipse { let img = opts.img.unwrap_frame(); let (width, height) = (img.width, img.height); - debug_assert_eq!(img.format, ffi::AVPixelFormat_AV_PIX_FMT_RGB24); + debug_assert_eq!(img.format, ffi::AV_PIX_FMT_RGB24); let mut mat = filter_utils::frame_to_mat_rgb24(&img, width, height); @@ -998,7 +998,7 @@ impl Filter for Ellipse { Err(err) => return Err(crate::dve::Error::AVError(err)), }; - if opts.img.unwrap_frame_type().format != ffi::AVPixelFormat_AV_PIX_FMT_RGB24 { + if opts.img.unwrap_frame_type().format != ffi::AV_PIX_FMT_RGB24 { return Err(crate::dve::Error::FilterInternalError( "Expected RGB24 frame".into(), )); @@ -1103,14 +1103,14 @@ impl Filter for SetTo { }; // check img is RGB24 - if opts.img.unwrap_frame_type().format != ffi::AVPixelFormat_AV_PIX_FMT_RGB24 { + if opts.img.unwrap_frame_type().format != ffi::AV_PIX_FMT_RGB24 { return Err(crate::dve::Error::FilterInternalError( "Expected img to be an RGB24 frame".into(), )); } // check mask is grayscale - if opts.mask.unwrap_frame_type().format != ffi::AVPixelFormat_AV_PIX_FMT_GRAY8 { + if opts.mask.unwrap_frame_type().format != ffi::AV_PIX_FMT_GRAY8 { return Err(crate::dve::Error::FilterInternalError( "Expected mask to be a grayscale frame".into(), )); @@ -1220,8 +1220,8 @@ impl Filter for AddWeighted { let src2 = opts.src2.unwrap_frame(); let (width, height) = (src1.width, src1.height); - debug_assert_eq!(src1.format, ffi::AVPixelFormat_AV_PIX_FMT_RGB24); - debug_assert_eq!(src2.format, ffi::AVPixelFormat_AV_PIX_FMT_RGB24); + debug_assert_eq!(src1.format, ffi::AV_PIX_FMT_RGB24); + debug_assert_eq!(src2.format, ffi::AV_PIX_FMT_RGB24); let src1_mat = filter_utils::frame_to_mat_rgb24(&src1, width, height); let src2_mat = filter_utils::frame_to_mat_rgb24(&src2, width, height); @@ -1267,14 +1267,14 @@ impl Filter for AddWeighted { }; // check src1 is RGB24 - if opts.src1.unwrap_frame_type().format != ffi::AVPixelFormat_AV_PIX_FMT_RGB24 { + if opts.src1.unwrap_frame_type().format != ffi::AV_PIX_FMT_RGB24 { return Err(crate::dve::Error::FilterInternalError( "Expected src1 to be an RGB24 frame".into(), )); } // check src2 is RGB24 - if opts.src2.unwrap_frame_type().format != ffi::AVPixelFormat_AV_PIX_FMT_RGB24 { + if opts.src2.unwrap_frame_type().format != ffi::AV_PIX_FMT_RGB24 { return Err(crate::dve::Error::FilterInternalError( "Expected src2 to be an RGB24 frame".into(), )); diff --git a/vidformer/src/filter/filter_utils.rs b/vidformer/src/filter/filter_utils.rs index eeec6c6d..512984e8 100644 --- a/vidformer/src/filter/filter_utils.rs +++ b/vidformer/src/filter/filter_utils.rs @@ -203,7 +203,7 @@ pub(crate) fn mat_to_frame_rgb24( unsafe { (*f).width = width; (*f).height = height; - (*f).format = ffi::AVPixelFormat_AV_PIX_FMT_RGB24; + (*f).format = ffi::AV_PIX_FMT_RGB24; if ffi::av_frame_get_buffer(f, 0) < 0 { panic!("ERROR could not allocate frame data"); @@ -234,12 +234,12 @@ pub(crate) fn mat_to_frame_rgb24( } pub(crate) fn frame_to_mat_rgb24(img: &Frame, width: i32, height: i32) -> opencv::prelude::Mat { - debug_assert!(img.format == ffi::AVPixelFormat_AV_PIX_FMT_RGB24); + debug_assert!(img.format == ffi::AV_PIX_FMT_RGB24); debug_assert_eq!(img.height, height); debug_assert_eq!(img.width, width); debug_assert_eq!( unsafe { (*(img.inner.inner)).format }, - ffi::AVPixelFormat_AV_PIX_FMT_RGB24 + ffi::AV_PIX_FMT_RGB24 ); debug_assert_eq!(unsafe { (*(img.inner.inner)).width }, width); debug_assert_eq!(unsafe { (*(img.inner.inner)).height }, height); @@ -280,12 +280,12 @@ pub(crate) fn frame_to_mat_rgb24(img: &Frame, width: i32, height: i32) -> opencv } pub(crate) fn frame_to_mat_gray8(img: &Frame, width: i32, height: i32) -> opencv::prelude::Mat { - debug_assert!(img.format == ffi::AVPixelFormat_AV_PIX_FMT_GRAY8); + debug_assert!(img.format == ffi::AV_PIX_FMT_GRAY8); debug_assert_eq!(img.height, height); debug_assert_eq!(img.width, width); debug_assert_eq!( unsafe { (*(img.inner.inner)).format }, - ffi::AVPixelFormat_AV_PIX_FMT_GRAY8 + ffi::AV_PIX_FMT_GRAY8 ); debug_assert_eq!(unsafe { (*(img.inner.inner)).width }, width); debug_assert_eq!(unsafe { (*(img.inner.inner)).height }, height); @@ -337,17 +337,15 @@ mod tests { // we do some sharing of buffers between libav and opencv so we need to make sure that // the layout of the data is the same - let num_planes = - unsafe { ffi::av_pix_fmt_count_planes(ffi::AVPixelFormat_AV_PIX_FMT_RGB24) }; + let num_planes = unsafe { ffi::av_pix_fmt_count_planes(ffi::AV_PIX_FMT_RGB24) }; assert_eq!(num_planes, 1); let width = 1920; let height = 1080; let size = (width as usize) * (height as usize) * 3; - let frame_encoded_size_all_planes = unsafe { - ffi::av_image_get_buffer_size(ffi::AVPixelFormat_AV_PIX_FMT_RGB24, width, height, 1) - }; + let frame_encoded_size_all_planes = + unsafe { ffi::av_image_get_buffer_size(ffi::AV_PIX_FMT_RGB24, width, height, 1) }; assert_eq!(size, frame_encoded_size_all_planes as usize); @@ -362,17 +360,15 @@ mod tests { #[test] fn test_packed_layout_gray8() { - let num_planes = - unsafe { ffi::av_pix_fmt_count_planes(ffi::AVPixelFormat_AV_PIX_FMT_GRAY8) }; + let num_planes = unsafe { ffi::av_pix_fmt_count_planes(ffi::AV_PIX_FMT_GRAY8) }; assert_eq!(num_planes, 1); let width = 1920; let height = 1080; let size = (width as usize) * (height as usize); - let frame_encoded_size_all_planes = unsafe { - ffi::av_image_get_buffer_size(ffi::AVPixelFormat_AV_PIX_FMT_GRAY8, width, height, 1) - }; + let frame_encoded_size_all_planes = + unsafe { ffi::av_image_get_buffer_size(ffi::AV_PIX_FMT_GRAY8, width, height, 1) }; assert_eq!(size, frame_encoded_size_all_planes as usize); diff --git a/vidformer/src/util.rs b/vidformer/src/util.rs index c5e83028..3d1ba83e 100644 --- a/vidformer/src/util.rs +++ b/vidformer/src/util.rs @@ -45,7 +45,7 @@ pub fn codecs() -> Vec { !codec.is_null() } { let codec = &*codec; - if codec.type_ != ffi::AVMediaType_AVMEDIA_TYPE_VIDEO { + if codec.type_ != ffi::AVMEDIA_TYPE_VIDEO { continue; } @@ -91,7 +91,7 @@ pub(crate) fn fmt_av_codec(format: &ffi::AVCodec) -> String { pub(crate) fn pixel_fmt_str_to_av_pix_fmt(s: &str) -> Result { let s = CString::new(s).unwrap(); let fmt = unsafe { ffi::av_get_pix_fmt(s.as_ptr()) }; - if fmt == ffi::AVPixelFormat_AV_PIX_FMT_NONE { + if fmt == ffi::AV_PIX_FMT_NONE { Err(format!("Invalid pixel format: {}", s.to_str().unwrap())) } else { Ok(fmt)