XLScanBaseManager.m 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. //
  2. // XLScanBaseManager.m
  3. // IDAndBankCard
  4. //
  5. // Created by mxl on 2017/3/28.
  6. // Copyright © 2017年 mxl. All rights reserved.
  7. //
  8. #import "XLScanBaseManager.h"
  9. @implementation XLScanBaseManager
  10. - (AVCaptureSession *)captureSession {
  11. if (!_captureSession) {
  12. _captureSession = [[AVCaptureSession alloc] init];
  13. [self.captureSession beginConfiguration];
  14. }
  15. return _captureSession;
  16. }
  17. - (NSString *)sessionPreset {
  18. if (!_sessionPreset) {
  19. _sessionPreset = AVCaptureSessionPreset1280x720;
  20. }
  21. return _sessionPreset;
  22. }
  23. - (AVCaptureVideoDataOutput *)videoDataOutput {
  24. if (!_videoDataOutput) {
  25. _videoDataOutput = [[AVCaptureVideoDataOutput alloc] init];
  26. _videoDataOutput.alwaysDiscardsLateVideoFrames = YES;
  27. _videoDataOutput.videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange], (id)kCVPixelBufferPixelFormatTypeKey, nil];
  28. }
  29. return _videoDataOutput;
  30. }
  31. - (RACSubject *)receiveSubject {
  32. if (!_receiveSubject) {
  33. _receiveSubject = [RACSubject subject];
  34. }
  35. return _receiveSubject;
  36. }
  37. - (RACSubject *)bankScanSuccess {
  38. if (!_bankScanSuccess) {
  39. _bankScanSuccess = [RACSubject subject];
  40. }
  41. return _bankScanSuccess;
  42. }
  43. - (RACSubject *)idCardScanSuccess {
  44. if (!_idCardScanSuccess) {
  45. _idCardScanSuccess = [RACSubject subject];
  46. }
  47. return _idCardScanSuccess;
  48. }
  49. // 能否切换前置后置
  50. - (BOOL)canSwitchCameras {
  51. return [[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo] count] > 1;
  52. }
  53. - (AVCaptureDevice *)activeCamera {
  54. return self.activeVideoInput.device;
  55. }
  56. - (AVCaptureDevice *)inactiveCamera {
  57. AVCaptureDevice *device = nil;
  58. if ([self canSwitchCameras]) {
  59. if ([self activeCamera].position == AVCaptureDevicePositionBack) {
  60. device = [self cameraWithPosition:AVCaptureDevicePositionFront];
  61. }
  62. else {
  63. device = [self cameraWithPosition:AVCaptureDevicePositionBack];
  64. }
  65. }
  66. return device;
  67. }
  68. - (AVCaptureDevice *)cameraWithPosition:(AVCaptureDevicePosition)position {
  69. NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
  70. for (AVCaptureDevice *device in devices) {
  71. if (device.position == position) {
  72. return device;
  73. }
  74. }
  75. return nil;
  76. }
  77. #pragma mark - Flash 闪光灯
  78. - (AVCaptureFlashMode)flashMode{
  79. return [[self activeCamera] flashMode];
  80. }
  81. #pragma mark - Torch 手电筒
  82. - (BOOL)cameraHasTorch {
  83. return [[self activeCamera] hasTorch];
  84. }
  85. - (AVCaptureTorchMode)torchMode{
  86. return [[self activeCamera] torchMode];
  87. }
  88. #pragma mark - Focus 焦距
  89. - (BOOL)cameraSupportsTapToFocus {
  90. return [[self activeCamera] isFocusPointOfInterestSupported];
  91. }
  92. @end