Skip to content

Commit d1a6718

Browse files
Merge pull request #1454 from CapSoftware/windows-playback-optimisation
Windows video playback optimisations
2 parents 68ad6bb + ed8f831 commit d1a6718

File tree

11 files changed

+1771
-573
lines changed

11 files changed

+1771
-573
lines changed

Cargo.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/frame-converter/src/d3d11.rs

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -113,15 +113,15 @@ pub struct D3D11Converter {
113113
fn get_gpu_info(device: &ID3D11Device) -> Result<GpuInfo, ConvertError> {
114114
unsafe {
115115
let dxgi_device: IDXGIDevice = device.cast().map_err(|e| {
116-
ConvertError::HardwareUnavailable(format!("Failed to get DXGI device: {:?}", e))
116+
ConvertError::HardwareUnavailable(format!("Failed to get DXGI device: {e:?}"))
117117
})?;
118118

119119
let adapter: IDXGIAdapter = dxgi_device.GetAdapter().map_err(|e| {
120-
ConvertError::HardwareUnavailable(format!("Failed to get adapter: {:?}", e))
120+
ConvertError::HardwareUnavailable(format!("Failed to get adapter: {e:?}"))
121121
})?;
122122

123123
let desc = adapter.GetDesc().map_err(|e| {
124-
ConvertError::HardwareUnavailable(format!("Failed to get adapter description: {:?}", e))
124+
ConvertError::HardwareUnavailable(format!("Failed to get adapter description: {e:?}"))
125125
})?;
126126

127127
let description = String::from_utf16_lossy(
@@ -165,8 +165,7 @@ impl D3D11Converter {
165165
)
166166
.map_err(|e| {
167167
ConvertError::HardwareUnavailable(format!(
168-
"D3D11CreateDevice failed (no hardware GPU available?): {:?}",
169-
e
168+
"D3D11CreateDevice failed (no hardware GPU available?): {e:?}"
170169
))
171170
})?;
172171

@@ -193,13 +192,12 @@ impl D3D11Converter {
193192

194193
let video_device: ID3D11VideoDevice = device.cast().map_err(|e| {
195194
ConvertError::HardwareUnavailable(format!(
196-
"GPU does not support D3D11 Video API (ID3D11VideoDevice): {:?}",
197-
e
195+
"GPU does not support D3D11 Video API (ID3D11VideoDevice): {e:?}"
198196
))
199197
})?;
200198

201199
let video_context: ID3D11VideoContext = context.cast().map_err(|e| {
202-
ConvertError::HardwareUnavailable(format!("Failed to get ID3D11VideoContext: {:?}", e))
200+
ConvertError::HardwareUnavailable(format!("Failed to get ID3D11VideoContext: {e:?}"))
203201
})?;
204202

205203
let content_desc = D3D11_VIDEO_PROCESSOR_CONTENT_DESC {
@@ -225,8 +223,8 @@ impl D3D11Converter {
225223
.CreateVideoProcessorEnumerator(&content_desc)
226224
.map_err(|e| {
227225
ConvertError::HardwareUnavailable(format!(
228-
"CreateVideoProcessorEnumerator failed (format {:?}->{:?} not supported by GPU?): {:?}",
229-
config.input_format, config.output_format, e
226+
"CreateVideoProcessorEnumerator failed (format {:?}->{:?} not supported by GPU?): {e:?}",
227+
config.input_format, config.output_format
230228
))
231229
})?
232230
};
@@ -235,10 +233,7 @@ impl D3D11Converter {
235233
video_device
236234
.CreateVideoProcessor(&enumerator, 0)
237235
.map_err(|e| {
238-
ConvertError::HardwareUnavailable(format!(
239-
"CreateVideoProcessor failed: {:?}",
240-
e
241-
))
236+
ConvertError::HardwareUnavailable(format!("CreateVideoProcessor failed: {e:?}"))
242237
})?
243238
};
244239

@@ -351,9 +346,7 @@ impl FrameConverter for D3D11Converter {
351346
0,
352347
Some(&mut mapped),
353348
)
354-
.map_err(|e| {
355-
ConvertError::ConversionFailed(format!("Map input failed: {:?}", e))
356-
})?;
349+
.map_err(|e| ConvertError::ConversionFailed(format!("Map input failed: {e:?}")))?;
357350

358351
copy_frame_to_mapped(&input, mapped.pData as *mut u8, mapped.RowPitch as usize);
359352

@@ -385,7 +378,7 @@ impl FrameConverter for D3D11Converter {
385378
Some(&mut input_view),
386379
)
387380
.map_err(|e| {
388-
ConvertError::ConversionFailed(format!("CreateInputView failed: {:?}", e))
381+
ConvertError::ConversionFailed(format!("CreateInputView failed: {e:?}"))
389382
})?;
390383
let input_view = input_view.ok_or_else(|| {
391384
ConvertError::ConversionFailed("CreateInputView returned null".to_string())
@@ -411,7 +404,7 @@ impl FrameConverter for D3D11Converter {
411404
Some(&mut output_view),
412405
)
413406
.map_err(|e| {
414-
ConvertError::ConversionFailed(format!("CreateOutputView failed: {:?}", e))
407+
ConvertError::ConversionFailed(format!("CreateOutputView failed: {e:?}"))
415408
})?;
416409
let output_view = output_view.ok_or_else(|| {
417410
ConvertError::ConversionFailed("CreateOutputView returned null".to_string())
@@ -435,7 +428,7 @@ impl FrameConverter for D3D11Converter {
435428
.video_context
436429
.VideoProcessorBlt(&resources.processor, &output_view, 0, &[stream])
437430
.map_err(|e| {
438-
ConvertError::ConversionFailed(format!("VideoProcessorBlt failed: {:?}", e))
431+
ConvertError::ConversionFailed(format!("VideoProcessorBlt failed: {e:?}"))
439432
})?;
440433

441434
if !self.verified_gpu_usage.swap(true, Ordering::Relaxed) {
@@ -459,9 +452,7 @@ impl FrameConverter for D3D11Converter {
459452
0,
460453
Some(&mut mapped),
461454
)
462-
.map_err(|e| {
463-
ConvertError::ConversionFailed(format!("Map output failed: {:?}", e))
464-
})?;
455+
.map_err(|e| ConvertError::ConversionFailed(format!("Map output failed: {e:?}")))?;
465456

466457
let mut output =
467458
frame::Video::new(self.output_format, self.output_width, self.output_height);
@@ -533,7 +524,7 @@ fn create_texture(
533524
device
534525
.CreateTexture2D(&desc, None, Some(&mut texture))
535526
.map_err(|e| {
536-
ConvertError::HardwareUnavailable(format!("CreateTexture2D failed: {:?}", e))
527+
ConvertError::HardwareUnavailable(format!("CreateTexture2D failed: {e:?}"))
537528
})?;
538529
texture.ok_or_else(|| {
539530
ConvertError::HardwareUnavailable("CreateTexture2D returned null".to_string())

crates/recording/src/output_pipeline/win.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,7 @@ impl Muxer for WindowsMuxer {
212212
Ok(guard) => guard,
213213
Err(poisoned) => {
214214
return fallback(Some(format!(
215-
"Failed to lock output mutex: {}",
216-
poisoned
215+
"Failed to lock output mutex: {poisoned}"
217216
)));
218217
}
219218
};
@@ -541,7 +540,7 @@ impl Muxer for WindowsCameraMuxer {
541540
let mut output_guard = match output.lock() {
542541
Ok(guard) => guard,
543542
Err(poisoned) => {
544-
let msg = format!("Failed to lock output mutex: {}", poisoned);
543+
let msg = format!("Failed to lock output mutex: {poisoned}");
545544
let _ = ready_tx.send(Err(anyhow!("{}", msg)));
546545
return Err(anyhow!("{}", msg));
547546
}

crates/rendering/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ tokio.workspace = true
1818
ffmpeg.workspace = true
1919
futures = { workspace = true }
2020
futures-intrusive = "0.5.0"
21+
rayon = "1.10"
2122
image = "0.25.2"
2223
log = "0.4"
2324
serde = { workspace = true }

0 commit comments

Comments
 (0)