@@ -10,29 +10,41 @@ import Foundation
10
10
import AVFoundation
11
11
import CoreImage
12
12
13
+ enum FilterType : Int {
14
+ case None
15
+ case Sepia
16
+ case Monochrome
17
+ case ColorControls
18
+
19
+ mutating func next( ) -> FilterType {
20
+ return FilterType ( rawValue: rawValue + 1 ) ?? FilterType ( rawValue: 0 ) !
21
+ }
22
+ }
23
+
13
24
class CameraFilter {
14
25
15
- private let filter : CIFilter
26
+ private var filter : CIFilter
16
27
private let context : CIContext
28
+ var filterType : FilterType = FilterType . None
17
29
18
30
init ( ) {
19
- self . filter = CIFilter ( name : " CISepiaTone " ) !
31
+ self . filter = CIFilter ( )
20
32
self . context = CIContext ( )
21
33
}
22
34
23
35
func apply( _ sampleBuffer: CVPixelBuffer ) -> CVPixelBuffer ? {
24
- let ciimage = CIImage ( cvPixelBuffer: sampleBuffer)
25
- self . filter. setValue ( ciimage, forKey: kCIInputImageKey)
26
- self . filter. setValue ( 0.8 , forKey: " inputIntensity " )
36
+ if self . filterType == . None{ return sampleBuffer }
27
37
38
+ let ciimage = CIImage ( cvPixelBuffer: sampleBuffer)
28
39
let size : CGSize = ciimage. extent. size
40
+ self . filter. setValue ( ciimage, forKey: kCIInputImageKey)
29
41
30
42
let filtered = self . filter. outputImage
31
43
var pixelBuffer : CVPixelBuffer ? = nil
32
44
33
45
let options = [
34
- kCVPixelBufferCGImageCompatibilityKey as String : kCFBooleanTrue,
35
- kCVPixelBufferCGBitmapContextCompatibilityKey as String : kCFBooleanTrue
46
+ kCVPixelBufferCGImageCompatibilityKey as String : kCFBooleanTrue as Any ,
47
+ kCVPixelBufferCGBitmapContextCompatibilityKey as String : kCFBooleanTrue as Any
36
48
] as [ String : Any ]
37
49
38
50
let status : CVReturn = CVPixelBufferCreate ( kCFAllocatorDefault,
@@ -47,4 +59,24 @@ class CameraFilter {
47
59
}
48
60
return pixelBuffer
49
61
}
62
+
63
+ func changeFilter( _ filterType: FilterType ) {
64
+ switch filterType {
65
+ case . Sepia:
66
+ self . filter = CIFilter ( name: " CISepiaTone " ) !
67
+ self . filter. setValue ( 0.8 , forKey: " inputIntensity " )
68
+ case . Monochrome:
69
+ self . filter = CIFilter ( name: " CIColorMonochrome " ) !
70
+ self . filter. setValue ( CIColor ( red: 0.75 , green: 0.75 , blue: 0.75 ) , forKey: " inputColor " )
71
+ self . filter. setValue ( 1.0 , forKey: " inputIntensity " )
72
+ case . ColorControls:
73
+ self . filter = CIFilter ( name: " CIColorControls " ) !
74
+ self . filter. setValue ( 1.0 , forKey: " inputSaturation " )
75
+ self . filter. setValue ( 0.5 , forKey: " inputBrightness " )
76
+ self . filter. setValue ( 3.0 , forKey: " inputContrast " )
77
+ case . None:
78
+ break
79
+ }
80
+ self . filterType = filterType
81
+ }
50
82
}
0 commit comments