Index: webrtc/sdk/objc/Framework/Classes/avfoundationvideocapturer.mm |
diff --git a/webrtc/sdk/objc/Framework/Classes/avfoundationvideocapturer.mm b/webrtc/sdk/objc/Framework/Classes/avfoundationvideocapturer.mm |
index 625f83dccaca12e88be1c25b1f6886ca55e3c393..7392ca5cd71f4b4c80db585fb35201356e7daf91 100644 |
--- a/webrtc/sdk/objc/Framework/Classes/avfoundationvideocapturer.mm |
+++ b/webrtc/sdk/objc/Framework/Classes/avfoundationvideocapturer.mm |
@@ -784,17 +784,20 @@ void AVFoundationVideoCapturer::OnFrameMessage(CVImageBufferRef image_buffer, |
} else { |
// Applying rotation is only supported for legacy reasons and performance |
// is not critical here. |
- buffer = (rotation == webrtc::kVideoRotation_180) |
- ? I420Buffer::Create(adapted_width, adapted_height) |
- : I420Buffer::Create(adapted_height, adapted_width); |
- libyuv::I420Rotate(scaled_buffer->DataY(), scaled_buffer->StrideY(), |
- scaled_buffer->DataU(), scaled_buffer->StrideU(), |
- scaled_buffer->DataV(), scaled_buffer->StrideV(), |
- buffer->MutableDataY(), buffer->StrideY(), |
- buffer->MutableDataU(), buffer->StrideU(), |
- buffer->MutableDataV(), buffer->StrideV(), |
- crop_width, crop_height, |
- static_cast<libyuv::RotationMode>(rotation)); |
+ rtc::scoped_refptr<webrtc::I420Buffer> rotated_buffer( |
+ (rotation == webrtc::kVideoRotation_180) |
+ ? I420Buffer::Create(adapted_width, adapted_height) |
+ : I420Buffer::Create(adapted_height, adapted_width)); |
+ libyuv::I420Rotate( |
+ scaled_buffer->DataY(), scaled_buffer->StrideY(), |
+ scaled_buffer->DataU(), scaled_buffer->StrideU(), |
+ scaled_buffer->DataV(), scaled_buffer->StrideV(), |
+ rotated_buffer->MutableDataY(), rotated_buffer->StrideY(), |
+ rotated_buffer->MutableDataU(), rotated_buffer->StrideU(), |
+ rotated_buffer->MutableDataV(), rotated_buffer->StrideV(), |
+ crop_width, crop_height, |
+ static_cast<libyuv::RotationMode>(rotation)); |
+ buffer = rotated_buffer; |
} |
} |