Skip to content

Commit

Permalink
handling torch level > 1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
jaimejiyepark committed Nov 21, 2019
1 parent 95dbbd5 commit 59884d9
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 38 deletions.
13 changes: 9 additions & 4 deletions CardScan/Classes/ScanBaseViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ import Vision
@objc open func showCardNumber(_ number: String, expiry: String?) { }
@objc open func onCameraPermissionDenied(showedPrompt: Bool) { }

//MARK: -Torch Logic
public func toggleTorch() {
self.ocr.scanStats.torchOn = !self.ocr.scanStats.torchOn
self.videoFeed.toggleTorch()
Expand All @@ -64,12 +65,16 @@ import Vision
return self.videoFeed.isTorchOn()
}

public func hasTorch() -> Bool {
return self.videoFeed.hasTorch()
public func hasTorchAndIsAvailable() -> Bool {
return self.videoFeed.hasTorchAndIsAvailable()
}

public func setTorchLevel(level: Float) {
self.videoFeed.setTorchLevel(level: level)
if 0.0...1.0 ~= level {
self.videoFeed.setTorchLevel(level: level)
} else {
print("Not a valid torch level")
}
}

@objc static public func configure(apiKey: String? = nil) {
Expand Down Expand Up @@ -184,7 +189,7 @@ import Vision
self.videoFeed.requestCameraAccess(permissionDelegate: self)
}

public func setupOnViewDidLoad(regionOfInterestLabel: UILabel, blurView: BlurView, previewView: PreviewView, cornerView: CornerView, debugImageView: UIImageView?, torchLevel: Float? = nil) {
public func setupOnViewDidLoad(regionOfInterestLabel: UILabel, blurView: BlurView, previewView: PreviewView, cornerView: CornerView, debugImageView: UIImageView?, torchLevel: Float?) {

self.regionOfInterestLabel = regionOfInterestLabel
self.blurView = blurView
Expand Down
3 changes: 2 additions & 1 deletion CardScan/Classes/ScanViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ import UIKit
public weak var scanDelegate: ScanDelegate?
@objc public weak var stringDataSource: ScanStringsDataSource?
@objc public var allowSkip = false
public var torchLevel: Float?
public var scanQrCode = false
@objc public var hideBackButtonImage = false
@IBOutlet weak var backButtonImageToTextConstraint: NSLayoutConstraint!
Expand Down Expand Up @@ -272,7 +273,7 @@ import UIKit
}

let debugImageView = self.showDebugImageView ? self.debugImageView : nil
self.setupOnViewDidLoad(regionOfInterestLabel: self.regionOfInterestLabel, blurView: self.blurView, previewView: self.previewView, cornerView: self.cornerView, debugImageView: debugImageView, torchLevel: 0.7)
self.setupOnViewDidLoad(regionOfInterestLabel: self.regionOfInterestLabel, blurView: self.blurView, previewView: self.previewView, cornerView: self.cornerView, debugImageView: debugImageView, torchLevel: self.torchLevel)
self.startCameraPreview()
}

Expand Down
32 changes: 2 additions & 30 deletions CardScan/Classes/Torch.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,7 @@ struct Torch {
let device: AVCaptureDevice?
var state: State
var lastStateChange: Date
var level: Float {
didSet {
self.setTorchMode()
}
}
var level: Float

init(device: AVCaptureDevice) {
self.state = .off
Expand All @@ -29,34 +25,10 @@ struct Torch {

mutating func toggle() {
self.state = self.state == .on ? .off : .on
self.setTorchMode()
}

mutating func luma(_ value: Double) {
let duration: Double = self.lastStateChange.timeIntervalSinceNow * -1.0
var newState = self.state
switch (self.state, value, duration) {
case (.off, ..<0.4, 3.0...):
newState = .on
case (.on, _, 20.0...):
newState = .off
default:
newState = self.state
}

if self.state != newState {
self.lastStateChange = Date()
self.state = newState
self.setTorchMode(level: 0.005)
}
}

func setTorchMode(level: Float? = nil) {
let setLevel = level ?? self.level
do {
try self.device?.lockForConfiguration()
if self.state == .on {
do { try self.device?.setTorchModeOn(level: setLevel) } catch { print("could not set torch mode on") }
do { try self.device?.setTorchModeOn(level: self.level) } catch { print("could not set torch mode on") }
} else {
self.device?.torchMode = .off
}
Expand Down
10 changes: 7 additions & 3 deletions CardScan/Classes/VideoFeed.swift
Original file line number Diff line number Diff line change
Expand Up @@ -182,11 +182,15 @@ class VideoFeed {
}

func isTorchOn() -> Bool {
return self.torch?.state == Torch.State.on ? true : false
return self.torch?.state == Torch.State.on
}

func hasTorch() -> Bool {
return self.torch?.device?.hasTorch ?? false
func hasTorchAndIsAvailable() -> Bool {
if let _ = self.torch?.device?.hasTorch, let _ = self.torch?.device?.isTorchAvailable {
return true
} else {
return false
}
}

func setTorchLevel(level: Float) {
Expand Down

0 comments on commit 59884d9

Please sign in to comment.