Skip to content

Commit 962dc71

Browse files
authored
Fix segfault in iOS video renderer (#259)
1 parent 5ef587c commit 962dc71

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

ios/Classes/FlutterRtcVideoRenderer.swift

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -181,21 +181,16 @@ class FlutterRtcVideoRenderer: NSObject, FlutterTexture, RTCVideoRenderer {
181181
rotation = 270
182182
}
183183

184-
let isFrameWidthChanged = self.frameWidth != renderFrame.buffer.width
185-
let isFrameHeightChanged = self.frameHeight != renderFrame.buffer.height
186-
let isFrameRotationChanged = self.frameRotation != rotation
187-
188-
if isFrameWidthChanged
189-
|| isFrameHeightChanged
190-
|| isFrameRotationChanged
184+
if self.frameWidth != renderFrame.buffer.width
185+
|| self.frameHeight != renderFrame.buffer.height
186+
|| self.frameRotation != rotation
191187
{
192188
self.frameWidth = renderFrame.buffer.width
193189
self.frameHeight = renderFrame.buffer.height
194190
self.frameRotation = rotation
195191

196192
let frameWidth = self.frameWidth
197193
let frameHeight = self.frameHeight
198-
199194
DispatchQueue.main.async {
200195
self.broadcastEventObserver().onTextureChange(
201196
id: self.textureId,
@@ -212,8 +207,8 @@ class FlutterRtcVideoRenderer: NSObject, FlutterTexture, RTCVideoRenderer {
212207
let buffer = renderFrame.buffer.toI420()
213208

214209
if self.pixelBuffer == nil
215-
|| self.frameWidth != buffer.width
216-
|| self.frameHeight != buffer.height
210+
|| CVPixelBufferGetWidth(self.pixelBuffer!) != buffer.width
211+
|| CVPixelBufferGetHeight(self.pixelBuffer!) != buffer.height
217212
{
218213
let attrs =
219214
[
@@ -223,15 +218,21 @@ class FlutterRtcVideoRenderer: NSObject, FlutterTexture, RTCVideoRenderer {
223218
] as CFDictionary
224219

225220
var newPB: CVPixelBuffer?
226-
CVPixelBufferCreate(
221+
let status = CVPixelBufferCreate(
227222
kCFAllocatorDefault,
228223
Int(buffer.width),
229224
Int(buffer.height),
230225
kCVPixelFormatType_32BGRA,
231226
attrs,
232-
&self.pixelBuffer
227+
&newPB
233228
)
234-
self.pixelBuffer = newPB
229+
if status == kCVReturnSuccess {
230+
self.pixelBuffer = newPB
231+
} else {
232+
print("CVPixelBufferCreate failed with status \(status)")
233+
self.pixelBuffer = nil
234+
return
235+
}
235236
}
236237

237238
CVPixelBufferLockBaseAddress(

0 commit comments

Comments
 (0)