@@ -10,29 +10,41 @@ import Foundation
1010import AVFoundation
1111import CoreImage
1212
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+
1324class CameraFilter {
1425
15- private let filter : CIFilter
26+ private var filter : CIFilter
1627 private let context : CIContext
28+ var filterType : FilterType = FilterType . None
1729
1830 init ( ) {
19- self . filter = CIFilter ( name : " CISepiaTone " ) !
31+ self . filter = CIFilter ( )
2032 self . context = CIContext ( )
2133 }
2234
2335 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 }
2737
38+ let ciimage = CIImage ( cvPixelBuffer: sampleBuffer)
2839 let size : CGSize = ciimage. extent. size
40+ self . filter. setValue ( ciimage, forKey: kCIInputImageKey)
2941
3042 let filtered = self . filter. outputImage
3143 var pixelBuffer : CVPixelBuffer ? = nil
3244
3345 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
3648 ] as [ String : Any ]
3749
3850 let status : CVReturn = CVPixelBufferCreate ( kCFAllocatorDefault,
@@ -47,4 +59,24 @@ class CameraFilter {
4759 }
4860 return pixelBuffer
4961 }
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+ }
5082}
0 commit comments