refactor(hwcodec): 精简FFmpeg编译配置并移除解码器

- 优化FFmpeg编译选项,禁用不需要的库(avformat/swscale/swresample/avfilter等)
- 禁用所有解码器和大部分编码器,只保留实际使用的H264/H265/VP8/VP9编码器
- 移除hwcodec解码器模块,MJPEG解码改用libyuv实现
- 移除MJPEG编码器支持
- x86_64添加libmfx支持QSV编码器
- 修复H265 RKMPP编码器支持YUYV直接输入
This commit is contained in:
mofeng-git
2026-01-02 12:31:11 +08:00
parent 04e62d1e3f
commit be4de59f3b
13 changed files with 258 additions and 794 deletions

View File

@@ -101,7 +101,8 @@ mod ffmpeg {
fn link_system_ffmpeg(builder: &mut Build) {
use std::process::Command;
let libs = ["libavcodec", "libavutil", "libavformat", "libswscale"];
// Only need libavcodec and libavutil for encoding
let libs = ["libavcodec", "libavutil"];
for lib in &libs {
// Get cflags
@@ -134,7 +135,7 @@ mod ffmpeg {
}
}
} else {
panic!("pkg-config failed for {}. Install FFmpeg development libraries: sudo apt install libavcodec-dev libavformat-dev libavutil-dev libswscale-dev", lib);
panic!("pkg-config failed for {}. Install FFmpeg development libraries: sudo apt install libavcodec-dev libavutil-dev", lib);
}
} else {
panic!("pkg-config not found. Install pkg-config and FFmpeg development libraries.");
@@ -178,7 +179,8 @@ mod ffmpeg {
)
);
{
let mut static_libs = vec!["avcodec", "avutil", "avformat"];
// Only need avcodec and avutil for encoding
let mut static_libs = vec!["avcodec", "avutil"];
if target_os == "windows" {
static_libs.push("libmfx");
}
@@ -251,7 +253,7 @@ mod ffmpeg {
.unwrap();
builder.files(
["ffmpeg_ram_encode.cpp", "ffmpeg_ram_decode.cpp"].map(|f| ffmpeg_ram_dir.join(f)),
["ffmpeg_ram_encode.cpp"].map(|f| ffmpeg_ram_dir.join(f)),
);
}
}