update hwcodec, add windows ffmpeg vram encoding (#7876)

* windows add ffmpeg vram encoding
* windows add missing nvenc and qsv ram encoding, linux add vaapi, current codec table:  https://github.com/21pages/hwcodec?tab=readme-ov-file#codec

Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
21pages
2024-05-01 00:07:09 +08:00
committed by GitHub
parent f74374e759
commit 34c7c25908
6 changed files with 99 additions and 79 deletions

View File

@@ -179,7 +179,7 @@ impl EncoderApi for VRamEncoder {
}
fn support_abr(&self) -> bool {
self.ctx.f.driver != Driver::VPL
self.ctx.f.driver != Driver::MFX
}
}
@@ -190,6 +190,10 @@ impl VRamEncoder {
.filter(|e| e.luid == device.luid)
.collect();
if v.len() > 0 {
// prefer ffmpeg
if let Some(ctx) = v.iter().find(|c| c.driver == Driver::FFMPEG) {
return Some(ctx.clone());
}
Some(v[0].clone())
} else {
None
@@ -250,21 +254,21 @@ impl VRamEncoder {
pub fn convert_quality(quality: Quality, f: &FeatureContext) -> u32 {
match quality {
Quality::Best => {
if f.driver == Driver::VPL && f.data_format == DataFormat::H264 {
if f.driver == Driver::MFX && f.data_format == DataFormat::H264 {
200
} else {
150
}
}
Quality::Balanced => {
if f.driver == Driver::VPL && f.data_format == DataFormat::H264 {
if f.driver == Driver::MFX && f.data_format == DataFormat::H264 {
150
} else {
100
}
}
Quality::Low => {
if f.driver == Driver::VPL && f.data_format == DataFormat::H264 {
if f.driver == Driver::MFX && f.data_format == DataFormat::H264 {
75
} else {
50