Skip to content

Commit 70a1a9e

Browse files
authored
Remove some unwraps in scap-direct3d (#1129)
* remove some unwraps * remove more unwrap * cleanup
1 parent 5c83606 commit 70a1a9e

File tree

1 file changed

+33
-125
lines changed
  • crates/scap-direct3d/src

1 file changed

+33
-125
lines changed

crates/scap-direct3d/src/lib.rs

Lines changed: 33 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,24 @@ pub enum NewCapturerError {
118118
CursorNotSupported,
119119
#[error("UpdateIntervalNotSupported")]
120120
UpdateIntervalNotSupported,
121-
#[error("D3DDevice: {0}")]
122-
D3DDevice(windows::core::Error),
123-
#[error("CreateRunner/{0}")]
124-
CreateRunner(#[from] StartRunnerError),
121+
#[error("CreateDevice: {0}")]
122+
CreateDevice(windows::core::Error),
123+
#[error("CreateDevice: {0}")]
124+
Context(windows::core::Error),
125+
#[error("Direct3DDevice: {0}")]
126+
Direct3DDevice(windows::core::Error),
127+
#[error("CreateDevice: {0}")]
128+
ItemSize(windows::core::Error),
129+
#[error("FramePool: {0}")]
130+
FramePool(windows::core::Error),
131+
#[error("CaptureSession: {0}")]
132+
CaptureSession(windows::core::Error),
133+
#[error("CropTexture: {0}")]
134+
CropTexture(windows::core::Error),
135+
#[error("RegisterFrameArrived: {0}")]
136+
RegisterFrameArrived(windows::core::Error),
137+
#[error("RegisterClosed: {0}")]
138+
RegisterClosed(windows::core::Error),
125139
#[error("RecvTimeout")]
126140
RecvTimeout(#[from] RecvError),
127141
#[error("Other: {0}")]
@@ -176,13 +190,13 @@ impl Capturer {
176190
None,
177191
)
178192
}
179-
.map_err(StartRunnerError::D3DDevice)?;
193+
.map_err(NewCapturerError::CreateDevice)?;
180194
}
181195

182196
let (d3d_device, d3d_context) = d3d_device
183197
.map(|d| unsafe { d.GetImmediateContext() }.map(|v| (d, v)))
184198
.transpose()
185-
.unwrap()
199+
.map_err(NewCapturerError::Context)?
186200
.unwrap();
187201

188202
let item = item.clone();
@@ -194,20 +208,19 @@ impl Capturer {
194208
let inspectable = unsafe { CreateDirect3D11DeviceFromDXGIDevice(&dxgi_device) }?;
195209
inspectable.cast::<IDirect3DDevice>()
196210
})()
197-
.unwrap();
198-
// .map_err(StartRunnerError::Direct3DDevice)?;
211+
.map_err(NewCapturerError::Direct3DDevice)?;
199212

200213
let frame_pool = Direct3D11CaptureFramePool::CreateFreeThreaded(
201214
&direct3d_device,
202215
settings.pixel_format.as_directx(),
203216
1,
204-
item.Size().unwrap(),
217+
item.Size().map_err(NewCapturerError::ItemSize)?,
205218
)
206-
.unwrap();
207-
// .map_err(StartRunnerError::FramePool)?;
219+
.map_err(NewCapturerError::FramePool)?;
208220

209-
let session = frame_pool.CreateCaptureSession(&item).unwrap();
210-
// .map_err(StartRunnerError::CaptureSession)?;
221+
let session = frame_pool
222+
.CreateCaptureSession(&item)
223+
.map_err(NewCapturerError::CaptureSession)?;
211224

212225
if let Some(border_required) = settings.is_border_required {
213226
session.SetIsBorderRequired(border_required).unwrap();
@@ -246,12 +259,11 @@ impl Capturer {
246259

247260
let mut texture = None;
248261
unsafe { d3d_device.CreateTexture2D(&desc, None, Some(&mut texture)) }
249-
.map_err(StartRunnerError::CropTexture)?;
262+
.map_err(NewCapturerError::CropTexture)?;
250263

251-
Ok::<_, StartRunnerError>((texture.unwrap(), crop))
264+
Ok::<_, NewCapturerError>((texture.unwrap(), crop))
252265
})
253-
.transpose()
254-
.unwrap();
266+
.transpose()?;
255267

256268
frame_pool
257269
.FrameArrived(
@@ -314,15 +326,14 @@ impl Capturer {
314326
}
315327
}),
316328
)
317-
.unwrap();
318-
// .map_err(StartRunnerError::RegisterFrameArrived)?;
329+
.map_err(NewCapturerError::RegisterFrameArrived)?;
319330

320331
item.Closed(
321332
&TypedEventHandler::<GraphicsCaptureItem, IInspectable>::new(move |_, _| {
322333
closed_callback()
323334
}),
324335
)
325-
.unwrap();
336+
.map_err(NewCapturerError::RegisterClosed)?;
326337

327338
Ok(Capturer {
328339
settings,
@@ -351,15 +362,6 @@ impl Capturer {
351362
}
352363
}
353364

354-
#[derive(Clone, Debug, thiserror::Error)]
355-
pub enum StartCapturerError {
356-
#[error("AlreadyStarted")]
357-
AlreadyStarted,
358-
#[error("StartFailed/{0}")]
359-
StartFailed(StartRunnerError),
360-
#[error("RecvFailed")]
361-
RecvFailed(RecvError),
362-
}
363365
impl Capturer {
364366
pub fn start(&mut self) -> windows::core::Result<()> {
365367
self.session.StartCapture()
@@ -377,41 +379,8 @@ pub enum StopCapturerError {
377379
}
378380

379381
impl Capturer {
380-
pub fn stop(&mut self) -> Result<(), StopCapturerError> {
381-
// let Some(thread_handle) = self.thread_handle.take() else {
382-
// return Err(StopCapturerError::NotStarted);
383-
// };
384-
385-
// let Some(runner) = self.runner.take() else {
386-
// return Err(StopCapturerError::NotStarted);
387-
// };
388-
389-
// runner._session.Close().unwrap();
390-
391-
self.session.Close().unwrap();
392-
393-
// self.runner.self.stop_flag.store(true, Ordering::Relaxed);
394-
395-
// let handle = HANDLE(thread_handle.as_raw_handle());
396-
// let thread_id = unsafe { GetThreadId(handle) };
397-
398-
// while let Err(e) =
399-
// unsafe { PostThreadMessageW(thread_id, WM_QUIT, WPARAM::default(), LPARAM::default()) }
400-
// {
401-
// if thread_handle.is_finished() {
402-
// break;
403-
// }
404-
405-
// if e.code().0 != -2147023452 {
406-
// return Err(StopCapturerError::PostMessageFailed);
407-
// }
408-
// }
409-
410-
// thread_handle
411-
// .join()
412-
// .map_err(|_| StopCapturerError::ThreadJoinFailed)
413-
414-
Ok(())
382+
pub fn stop(&mut self) -> windows::core::Result<()> {
383+
self.session.Close()
415384
}
416385
}
417386

@@ -556,64 +525,3 @@ impl<'a> FrameBuffer<'a> {
556525
self.pixel_format
557526
}
558527
}
559-
560-
#[derive(Clone, Debug, thiserror::Error)]
561-
pub enum StartRunnerError {
562-
#[error("Failed to initialize WinRT")]
563-
FailedToInitializeWinRT,
564-
#[error("DispatchQueue: {0}")]
565-
DispatchQueue(windows::core::Error),
566-
#[error("D3DDevice: {0}")]
567-
D3DDevice(windows::core::Error),
568-
#[error("Direct3DDevice: {0}")]
569-
Direct3DDevice(windows::core::Error),
570-
#[error("FramePool: {0}")]
571-
FramePool(windows::core::Error),
572-
#[error("CaptureSession: {0}")]
573-
CaptureSession(windows::core::Error),
574-
#[error("CropTexture: {0}")]
575-
CropTexture(windows::core::Error),
576-
#[error("RegisterFrameArrived: {0}")]
577-
RegisterFrameArrived(windows::core::Error),
578-
#[error("RegisterClosed: {0}")]
579-
RegisterClosed(windows::core::Error),
580-
#[error("StartCapture: {0}")]
581-
StartCapture(windows::core::Error),
582-
#[error("Other: {0}")]
583-
Other(#[from] windows::core::Error),
584-
}
585-
586-
// #[derive(Clone)]
587-
// struct Runner {
588-
// _session: GraphicsCaptureSession,
589-
// _frame_pool: Direct3D11CaptureFramePool,
590-
// }
591-
592-
// impl Runner {
593-
// fn start(
594-
// item: GraphicsCaptureItem,
595-
// settings: Settings,
596-
// mut callback: impl FnMut(Frame) -> windows::core::Result<()> + Send + 'static,
597-
// mut closed_callback: impl FnMut() -> windows::core::Result<()> + Send + 'static,
598-
// stop_flag: Arc<AtomicBool>,
599-
// d3d_device: ID3D11Device,
600-
// d3d_context: ID3D11DeviceContext,
601-
// ) -> Result<Self, StartRunnerError> {
602-
// session
603-
// .StartCapture()
604-
// .map_err(StartRunnerError::StartCapture)?;
605-
606-
// Ok(Self {
607-
// _session: session,
608-
// _frame_pool: frame_pool,
609-
// })
610-
// }
611-
612-
// // fn run(self) {
613-
// // let mut message = MSG::default();
614-
// // while unsafe { GetMessageW(&mut message, None, 0, 0) }.as_bool() {
615-
// // let _ = unsafe { TranslateMessage(&message) };
616-
// // unsafe { DispatchMessageW(&message) };
617-
// // }
618-
// // }
619-
// }

0 commit comments

Comments
 (0)