8000 Add method for probing for torch presence · model-lib/flutter-webrtc@66f91b4 · GitHub
[go: up one dir, main page]

Skip to content

Commit 66f91b4

Browse files
committed
Add method for probing for torch presence
1 parent 5fea834 commit 66f91b4

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed

ios/Classes/FlutterRTCMediaStream.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111

1212
-(void)getSources:(FlutterResult)result;
1313

14+
-(void)mediaStreamTrackHasTorch:(RTCMediaStreamTrack *)track
15+
result:(FlutterResult) result;
16+
1417
-(void)mediaStreamTrackSetTorch:(RTCMediaStreamTrack *)track
1518
torch:(BOOL) torch
1619
result:(FlutterResult) result;

ios/Classes/FlutterRTCMediaStream.m

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,23 @@ -(void)mediaStreamTrackSetEnabled:(RTCMediaStreamTrack *)track : (BOOL)enabled
474474
}
475475
}
476476

477+
-(void)mediaStreamTrackHasTorch:(RTCMediaStreamTrack *)track result:(FlutterResult) result
478+
{
479+
if (!self.videoCapturer) {
480+
result(@NO);
481+
return;
482+
}
483+
if (self.videoCapturer.captureSession.inputs.count == 0) {
484+
result(@NO);
485+
return;
486+
}
487+
488+
AVCaptureDeviceInput *deviceInput = [self.videoCapturer.captureSession.inputs objectAtIndex:0];
489+
AVCaptureDevice *device = deviceInput.device;
490+
491+
result(@([device isTorchModeSupported:AVCaptureTorchModeOn]));
492+
}
493+
477494
-(void)mediaStreamTrackSetTorch:(RTCMediaStreamTrack *)track torch:(BOOL)torch result:(FlutterResult)result
478495
{
479496
if (!self.videoCapturer) {

ios/Classes/FlutterWebRTCPlugin.m

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,20 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult) result
353353
[self setStreamId:streamId view:render];
354354
}
355355
result(nil);
356+
}else if ([@"mediaStreamTrackHasTorch" isEqualToString:call.method]) {
357+
NSDictionary* argsMap = call.arguments;
358+
NSString* trackId = argsMap[@"trackId"];
359+
RTCMediaStreamTrack *track = self.localTracks[trackId];
360+
if (track != nil && [track isKindOfClass:[RTCVideoTrack class]]) {
361+
RTCVideoTrack *videoTrack = (RTCVideoTrack *)track;
362+
[self mediaStreamTrackHasTorch:videoTrack result:result];
363+
} else {
364+
if (track == nil) {
365+
result([FlutterError errorWithCode:@"Track is nil" message:nil details:nil]);
366+
} else {
367+
result([FlutterError errorWithCode:[@"Track is class of " stringByAppendingString:[[track class] description]] message:nil details:nil]);
368+
}
369+
}
356370
}else if ([@"mediaStreamTrackSetTorch" isEqualToString:call.method]) {
357371
NSDictionary* argsMap = call.arguments;
358372
NSString* trackId = argsMap[@"trackId"];

lib/media_stream_track.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ class MediaStreamTrack {
2323
String get kind => _kind;
2424
String get id => _trackId;
2525

26+
Future<bool> hasTorch() =>
27+
_channel.invokeMethod(
28+
'mediaStreamTrackHasTorch',
29+
<String, dynamic>{'trackId': _trackId},
30+
);
31+
2632
Future<void> setTorch(bool torch) =>
2733
_channel.invokeMethod(
2834
'mediaStreamTrackSetTorch',

0 commit comments

Comments
 (0)
0