Skip to content

Commit e2b677d

Browse files
committed
Merge pull request opencv#5109 from olumby:fix-cvvideocamera-defaultfps
2 parents b6869df + 2de3a24 commit e2b677d

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

modules/videoio/src/cap_ios_video_camera.mm

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -295,13 +295,27 @@ - (void)createVideoDataOutput;
295295

296296

297297
// set default FPS
298-
if ([self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo].supportsVideoMinFrameDuration) {
299-
[self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo].videoMinFrameDuration = CMTimeMake(1, self.defaultFPS);
298+
AVCaptureDeviceInput *currentInput = [self.captureSession.inputs objectAtIndex:0];
299+
AVCaptureDevice *device = currentInput.device;
300+
301+
NSError *error = nil;
302+
[device lockForConfiguration:&error];
303+
304+
float maxRate = ((AVFrameRateRange*) [device.activeFormat.videoSupportedFrameRateRanges objectAtIndex:0]).maxFrameRate;
305+
if (maxRate > self.defaultFPS - 1 && error == nil) {
306+
[device setActiveVideoMinFrameDuration:CMTimeMake(1, self.defaultFPS)];
307+
[device setActiveVideoMaxFrameDuration:CMTimeMake(1, self.defaultFPS)];
308+
NSLog(@"[Camera] FPS set to %d", self.defaultFPS);
309+
} else {
310+
NSLog(@"[Camera] unable to set defaultFPS at %d FPS, max is %f FPS", self.defaultFPS, maxRate);
300311
}
301-
if ([self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo].supportsVideoMaxFrameDuration) {
302-
[self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo].videoMaxFrameDuration = CMTimeMake(1, self.defaultFPS);
312+
313+
if (error != nil) {
314+
NSLog(@"[Camera] unable to set defaultFPS: %@", error);
303315
}
304316

317+
[device unlockForConfiguration];
318+
305319
// set video mirroring for front camera (more intuitive)
306320
if ([self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo].supportsVideoMirroring) {
307321
if (self.defaultAVCaptureDevicePosition == AVCaptureDevicePositionFront) {
@@ -329,7 +343,7 @@ - (void)createVideoDataOutput;
329343
[self.videoDataOutput setSampleBufferDelegate:self queue:videoDataOutputQueue];
330344

331345

332-
NSLog(@"[Camera] created AVCaptureVideoDataOutput at %d FPS", self.defaultFPS);
346+
NSLog(@"[Camera] created AVCaptureVideoDataOutput");
333347
}
334348

335349

0 commit comments

Comments
 (0)