From 0e7e27f99dfb6c470a0080f6bf011814f299bbe3 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 25 Apr 2024 20:16:48 +0800 Subject: [PATCH] update hwcodec, fix gpu/cpu stuck caused by nv codec (#7826) * Disable all nv codec encoding on windows except nv sdk encoding, because it doesn't use CUContext * Keep nv codec on linux, because I didn't reproduce the stuck on it * Add ffmpeg d3d11 vram decoding Signed-off-by: 21pages --- Cargo.lock | 4 ++-- libs/scrap/src/common/vram.rs | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 340dc52f5..881ce84fd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3038,8 +3038,8 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hwcodec" -version = "0.3.3" -source = "git+https://github.com/21pages/hwcodec#eeebf980d4eb41daaf05090b097d5a59d688d3d8" +version = "0.4.1" +source = "git+https://github.com/21pages/hwcodec#17870c015a3f371339a91c5305d1e920bd8284e3" dependencies = [ "bindgen 0.59.2", "cc", diff --git a/libs/scrap/src/common/vram.rs b/libs/scrap/src/common/vram.rs index daeece519..157047ec2 100644 --- a/libs/scrap/src/common/vram.rs +++ b/libs/scrap/src/common/vram.rs @@ -17,7 +17,7 @@ use hbb_common::{ }; use hwcodec::{ common::{DataFormat, Driver, MAX_GOP}, - native::{ + vram::{ decode::{self, DecodeFrame, Decoder}, encode::{self, EncodeFrame, Encoder}, Available, DecodeContext, DynamicContext, EncodeContext, FeatureContext, @@ -294,6 +294,10 @@ impl VRamDecoder { pub fn try_get(format: CodecFormat, luid: Option) -> Option { let v: Vec<_> = Self::available(format, luid); 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