@@ -118,10 +118,24 @@ pub enum NewCapturerError {
118
118
CursorNotSupported ,
119
119
#[ error( "UpdateIntervalNotSupported" ) ]
120
120
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 ) ,
125
139
#[ error( "RecvTimeout" ) ]
126
140
RecvTimeout ( #[ from] RecvError ) ,
127
141
#[ error( "Other: {0}" ) ]
@@ -176,13 +190,13 @@ impl Capturer {
176
190
None ,
177
191
)
178
192
}
179
- . map_err ( StartRunnerError :: D3DDevice ) ?;
193
+ . map_err ( NewCapturerError :: CreateDevice ) ?;
180
194
}
181
195
182
196
let ( d3d_device, d3d_context) = d3d_device
183
197
. map ( |d| unsafe { d. GetImmediateContext ( ) } . map ( |v| ( d, v) ) )
184
198
. transpose ( )
185
- . unwrap ( )
199
+ . map_err ( NewCapturerError :: Context ) ?
186
200
. unwrap ( ) ;
187
201
188
202
let item = item. clone ( ) ;
@@ -194,20 +208,19 @@ impl Capturer {
194
208
let inspectable = unsafe { CreateDirect3D11DeviceFromDXGIDevice ( & dxgi_device) } ?;
195
209
inspectable. cast :: < IDirect3DDevice > ( )
196
210
} ) ( )
197
- . unwrap ( ) ;
198
- // .map_err(StartRunnerError::Direct3DDevice)?;
211
+ . map_err ( NewCapturerError :: Direct3DDevice ) ?;
199
212
200
213
let frame_pool = Direct3D11CaptureFramePool :: CreateFreeThreaded (
201
214
& direct3d_device,
202
215
settings. pixel_format . as_directx ( ) ,
203
216
1 ,
204
- item. Size ( ) . unwrap ( ) ,
217
+ item. Size ( ) . map_err ( NewCapturerError :: ItemSize ) ? ,
205
218
)
206
- . unwrap ( ) ;
207
- // .map_err(StartRunnerError::FramePool)?;
219
+ . map_err ( NewCapturerError :: FramePool ) ?;
208
220
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 ) ?;
211
224
212
225
if let Some ( border_required) = settings. is_border_required {
213
226
session. SetIsBorderRequired ( border_required) . unwrap ( ) ;
@@ -246,12 +259,11 @@ impl Capturer {
246
259
247
260
let mut texture = None ;
248
261
unsafe { d3d_device. CreateTexture2D ( & desc, None , Some ( & mut texture) ) }
249
- . map_err ( StartRunnerError :: CropTexture ) ?;
262
+ . map_err ( NewCapturerError :: CropTexture ) ?;
250
263
251
- Ok :: < _ , StartRunnerError > ( ( texture. unwrap ( ) , crop) )
264
+ Ok :: < _ , NewCapturerError > ( ( texture. unwrap ( ) , crop) )
252
265
} )
253
- . transpose ( )
254
- . unwrap ( ) ;
266
+ . transpose ( ) ?;
255
267
256
268
frame_pool
257
269
. FrameArrived (
@@ -314,15 +326,14 @@ impl Capturer {
314
326
}
315
327
} ) ,
316
328
)
317
- . unwrap ( ) ;
318
- // .map_err(StartRunnerError::RegisterFrameArrived)?;
329
+ . map_err ( NewCapturerError :: RegisterFrameArrived ) ?;
319
330
320
331
item. Closed (
321
332
& TypedEventHandler :: < GraphicsCaptureItem , IInspectable > :: new ( move |_, _| {
322
333
closed_callback ( )
323
334
} ) ,
324
335
)
325
- . unwrap ( ) ;
336
+ . map_err ( NewCapturerError :: RegisterClosed ) ? ;
326
337
327
338
Ok ( Capturer {
328
339
settings,
@@ -351,15 +362,6 @@ impl Capturer {
351
362
}
352
363
}
353
364
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
- }
363
365
impl Capturer {
364
366
pub fn start ( & mut self ) -> windows:: core:: Result < ( ) > {
365
367
self . session . StartCapture ( )
@@ -377,41 +379,8 @@ pub enum StopCapturerError {
377
379
}
378
380
379
381
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 ( )
415
384
}
416
385
}
417
386
@@ -556,64 +525,3 @@ impl<'a> FrameBuffer<'a> {
556
525
self . pixel_format
557
526
}
558
527
}
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