| 261 | } |
| 262 | |
| 263 | fn test_encoder( |
| 264 | width: usize, |
| 265 | height: usize, |
| 266 | quality: Q, |
| 267 | info: CodecInfo, |
| 268 | c: &mut Capturer, |
| 269 | yuv_count: usize, |
| 270 | h26xs: &mut Vec<Vec<u8>>, |
| 271 | ) { |
| 272 | let mut encoder = HwRamEncoder::new( |
| 273 | EncoderCfg::HWRAM(HwRamEncoderConfig { |
| 274 | name: info.name.clone(), |
| 275 | mc_name: None, |
| 276 | width, |
| 277 | height, |
| 278 | quality, |
| 279 | keyframe_interval: None, |
| 280 | }), |
| 281 | false, |
| 282 | ) |
| 283 | .unwrap(); |
| 284 | let mut size = 0; |
| 285 | |
| 286 | let mut yuv = Vec::new(); |
| 287 | let mut mid_data = Vec::new(); |
| 288 | let mut counter = 0; |
| 289 | let mut time_sum = Duration::ZERO; |
| 290 | loop { |
| 291 | match c.frame(std::time::Duration::from_millis(30)) { |
| 292 | Ok(frame) => { |
| 293 | let tmp_timer = Instant::now(); |
| 294 | let frame = frame.to(encoder.yuvfmt(), &mut yuv, &mut mid_data).unwrap(); |
| 295 | let yuv = frame.yuv().unwrap(); |
| 296 | for ref frame in encoder.encode(&yuv).unwrap() { |
| 297 | size += frame.data.len(); |
| 298 | |
| 299 | h26xs.push(frame.data.to_vec()); |
| 300 | counter += 1; |
| 301 | print!("\r{:?} {}/{}", info.name, counter, yuv_count); |
| 302 | std::io::stdout().flush().ok(); |
| 303 | } |
| 304 | time_sum += tmp_timer.elapsed(); |
| 305 | } |
| 306 | Err(e) => { |
| 307 | log::error!("{e:?}"); |
| 308 | } |
| 309 | } |
| 310 | if counter >= yuv_count { |
| 311 | println!(); |
| 312 | break; |
| 313 | } |
| 314 | } |
| 315 | println!( |
| 316 | "{}: {:?}, {} byte", |
| 317 | info.name, |
| 318 | time_sum / yuv_count as u32, |
| 319 | size / yuv_count, |
| 320 | ); |