Skip to content

Commit c62b0b9

Browse files
committed
feat: add filters and change function
1 parent 59b1269 commit c62b0b9

File tree

3 files changed

+53
-8
lines changed

3 files changed

+53
-8
lines changed

SimpleWebRTC/CameraFilter/CameraFilter.swift

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,41 @@ import Foundation
1010
import AVFoundation
1111
import 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+
1324
class 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
}

SimpleWebRTC/ViewController/ViewController.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,14 @@ class ViewController: UIViewController, WebSocketDelegate, WebRTCClientDelegate,
107107
let localVideoView = webRTCClient.localVideoView()
108108
webRTCClient.setupLocalViewFrame(frame: CGRect(x: 0, y: 0, width: ScreenSizeUtil.width()/3, height: ScreenSizeUtil.height()/3))
109109
localVideoView.center.y = self.view.center.y
110+
localVideoView.subviews.last?.isUserInteractionEnabled = true
110111
self.view.addSubview(localVideoView)
111112

113+
let localVideoViewButton = UIButton(frame: CGRect(x: 0, y: 0, width: localVideoView.frame.width, height: localVideoView.frame.height))
114+
localVideoViewButton.backgroundColor = UIColor.clear
115+
localVideoViewButton.addTarget(self, action: #selector(self.localVideoViewTapped(_:)), for: .touchUpInside)
116+
localVideoView.addSubview(localVideoViewButton)
117+
112118
let likeButton = UIButton(frame: CGRect(x: remoteVideoViewContainter.right - 50, y: remoteVideoViewContainter.bottom - 50, width: 40, height: 40))
113119
likeButton.backgroundColor = UIColor.clear
114120
likeButton.addTarget(self, action: #selector(self.likeButtonTapped(_:)), for: .touchUpInside)
@@ -191,6 +197,13 @@ class ViewController: UIViewController, WebSocketDelegate, WebRTCClientDelegate,
191197
@objc func likeButtonTapped(_ sender: UIButton){
192198
let data = likeStr.data(using: String.Encoding.utf8)
193199
webRTCClient.sendData(data: data!)
200+
self.cameraFilter?.changeFilter((cameraFilter?.filterType.next())!)
201+
}
202+
203+
@objc func localVideoViewTapped(_ sender: UITapGestureRecognizer) {
204+
if let filter = self.cameraFilter {
205+
filter.changeFilter(filter.filterType.next())
206+
}
194207
}
195208

196209
private func startLikeAnimation(){

SimpleWebRTC/WebRTC/WebRTCClient.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ extension WebRTCClient{
470470
}
471471

472472
if(isLandScape){
473-
let ratio = size.width/size.height
473+
let ratio = size.width / size.height
474474
_renderView.frame = CGRect(x: 0, y: 0, width: _parentView.frame.height * ratio, height: _parentView.frame.height)
475475
_renderView.center.x = _parentView.frame.width/2
476476
}else{

0 commit comments

Comments
 (0)