From 75fc49b301f44a57966845dfecf02ef9de934951 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 29 Jun 2022 09:46:42 +0800 Subject: [PATCH] make hwcodec's bitrate the same as vpx Signed-off-by: 21pages --- Cargo.lock | 2 +- libs/scrap/src/common/codec.rs | 2 +- libs/scrap/src/common/hwcodec.rs | 37 ++++++-------------------------- src/server/video_service.rs | 2 +- 4 files changed, 10 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7a4629e4c..884df3c56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2234,7 +2234,7 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hwcodec" version = "0.1.0" -source = "git+https://github.com/21pages/hwcodec#0b5dbdbf3ef5cd41d27b691ebd00bf7646ad6d78" +source = "git+https://github.com/21pages/hwcodec#bfc558d2375928b0a59336cfc72336415db27066" dependencies = [ "bindgen", "cc", diff --git a/libs/scrap/src/common/codec.rs b/libs/scrap/src/common/codec.rs index f55a4bfd3..1dad08701 100644 --- a/libs/scrap/src/common/codec.rs +++ b/libs/scrap/src/common/codec.rs @@ -33,7 +33,7 @@ pub struct HwEncoderConfig { pub codec_name: String, pub width: usize, pub height: usize, - pub bitrate_ratio: i32, + pub bitrate: i32, } #[derive(Debug, Clone)] diff --git a/libs/scrap/src/common/hwcodec.rs b/libs/scrap/src/common/hwcodec.rs index 076304067..945de6335 100644 --- a/libs/scrap/src/common/hwcodec.rs +++ b/libs/scrap/src/common/hwcodec.rs @@ -49,19 +49,17 @@ impl EncoderApi for HwEncoder { { match cfg { EncoderCfg::HW(config) => { - let (bitrate, timebase, gop, quality, rc) = - HwEncoder::convert_quality(&config.codec_name, config.bitrate_ratio); let ctx = EncodeContext { name: config.codec_name.clone(), width: config.width as _, height: config.height as _, pixfmt: DEFAULT_PIXFMT, align: HW_STRIDE_ALIGN as _, - bitrate, - timebase, - gop, - quality, - rc, + bitrate: config.bitrate * 1000, + timebase: DEFAULT_TIME_BASE, + gop: DEFAULT_GOP, + quality: DEFAULT_HW_QUALITY, + rc: DEFAULT_RC, }; let format = match Encoder::format_from_name(config.codec_name.clone()) { Ok(format) => format, @@ -142,7 +140,8 @@ impl EncoderApi for HwEncoder { } fn set_bitrate(&mut self, bitrate: u32) -> ResultType<()> { - todo!() + self.encoder.set_bitrate((bitrate * 1000) as _).ok(); + Ok(()) } } @@ -218,28 +217,6 @@ impl HwEncoder { Err(_) => Ok(Vec::::new()), } } - - fn convert_quality( - name: &str, - bitrate_ratio: i32, - ) -> (i32, [i32; 2], i32, Quality, RateContorl) { - // TODO - let mut bitrate = if name.contains("qsv") { - 1_000_000 - } else { - 2_000_000 - }; - if bitrate_ratio > 0 && bitrate_ratio <= 200 { - bitrate = bitrate * bitrate_ratio / 100; - }; - ( - bitrate, - DEFAULT_TIME_BASE, - DEFAULT_GOP, - DEFAULT_HW_QUALITY, - DEFAULT_RC, - ) - } } pub struct HwDecoder { diff --git a/src/server/video_service.rs b/src/server/video_service.rs index abc13a54c..10ddf3223 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -553,7 +553,7 @@ fn run(sp: GenericService) -> ResultType<()> { codec_name, width, height, - bitrate_ratio: bitrate as _, + bitrate: bitrate as _, }), None => EncoderCfg::VPX(VpxEncoderConfig { width: width as _,