diff --git a/Cargo.lock b/Cargo.lock index 8759b1716..6e17784ce 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2236,7 +2236,7 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hwcodec" version = "0.1.0" -source = "git+https://github.com/21pages/hwcodec#1f8e03c433c1ec73067b4c85026d99f2e9fcf9bf" +source = "git+https://github.com/21pages/hwcodec#1cfe82f08f254e88f18cea1ad7c332f1c28dc1b9" dependencies = [ "bindgen", "cc", diff --git a/libs/scrap/src/common/hwcodec.rs b/libs/scrap/src/common/hwcodec.rs index 6ccc3eb8a..338045526 100644 --- a/libs/scrap/src/common/hwcodec.rs +++ b/libs/scrap/src/common/hwcodec.rs @@ -240,35 +240,15 @@ impl HwDecoder { static ONCE: Once = Once::new(); // TODO: different process ONCE.call_once(|| { - let avaliable = Decoder::avaliable_decoders(); - let mut decoders = vec![]; - for decoder in avaliable { - if let Ok(d) = HwDecoder::new(decoder) { - decoders.push(d); - } - } - + let (h264_info, h265_info) = CodecInfo::score(Decoder::avaliable_decoders()); let mut h264: Option = None; let mut h265: Option = None; - for decoder in decoders { - match decoder.info.format { - DataFormat::H264 => match &h264 { - Some(old) => { - if decoder.info.score > old.info.score { - h264 = Some(decoder) - } - } - None => h264 = Some(decoder), - }, - DataFormat::H265 => match &h265 { - Some(old) => { - if decoder.info.score > old.info.score { - h265 = Some(decoder) - } - } - None => h265 = Some(decoder), - }, - } + + if let Some(info) = h264_info { + h264 = HwDecoder::new(info).ok(); + } + if let Some(info) = h265_info { + h265 = HwDecoder::new(info).ok(); } if h264.is_some() { log::info!("h264 decoder:{:?}", h264.as_ref().unwrap().info);