perf: Avoid expensive CMSampleBuffer copy (#235)
* Don't copy CMSampleBuffer * Update CameraView+RecordVideo.swift * Update Podfile.lock
This commit is contained in:
parent
cd7235c7a2
commit
7d3b352155
@ -322,7 +322,7 @@ PODS:
|
|||||||
- React
|
- React
|
||||||
- RNVectorIcons (8.1.0):
|
- RNVectorIcons (8.1.0):
|
||||||
- React-Core
|
- React-Core
|
||||||
- VisionCamera (2.4.2-beta.3):
|
- VisionCamera (2.4.2-beta.7):
|
||||||
- React
|
- React
|
||||||
- React-callinvoker
|
- React-callinvoker
|
||||||
- React-Core
|
- React-Core
|
||||||
@ -490,7 +490,7 @@ SPEC CHECKSUMS:
|
|||||||
RNReanimated: 9c13c86454bfd54dab7505c1a054470bfecd2563
|
RNReanimated: 9c13c86454bfd54dab7505c1a054470bfecd2563
|
||||||
RNStaticSafeAreaInsets: 6103cf09647fa427186d30f67b0f5163c1ae8252
|
RNStaticSafeAreaInsets: 6103cf09647fa427186d30f67b0f5163c1ae8252
|
||||||
RNVectorIcons: 31cebfcf94e8cf8686eb5303ae0357da64d7a5a4
|
RNVectorIcons: 31cebfcf94e8cf8686eb5303ae0357da64d7a5a4
|
||||||
VisionCamera: 33eb4044a1bee72eac4e1ad26a64b30b5ffe41a6
|
VisionCamera: d65c038e7a538fbd719f3ff3e7511a2c71111e3a
|
||||||
Yoga: 575c581c63e0d35c9a83f4b46d01d63abc1100ac
|
Yoga: 575c581c63e0d35c9a83f4b46d01d63abc1100ac
|
||||||
|
|
||||||
PODFILE CHECKSUM: 4b093c1d474775c2eac3268011e4b0b80929d3a2
|
PODFILE CHECKSUM: 4b093c1d474775c2eac3268011e4b0b80929d3a2
|
||||||
|
@ -215,23 +215,13 @@ extension CameraView: AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureAud
|
|||||||
if diff > UInt64(nanosecondsPerFrame) {
|
if diff > UInt64(nanosecondsPerFrame) {
|
||||||
if !isRunningFrameProcessor {
|
if !isRunningFrameProcessor {
|
||||||
// we're not in the middle of executing the Frame Processor, so prepare for next call.
|
// we're not in the middle of executing the Frame Processor, so prepare for next call.
|
||||||
var bufferCopy: CMSampleBuffer?
|
CameraQueues.frameProcessorQueue.async {
|
||||||
CMSampleBufferCreateCopy(allocator: kCFAllocatorDefault,
|
self.isRunningFrameProcessor = true
|
||||||
sampleBuffer: sampleBuffer,
|
let frame = Frame(buffer: sampleBuffer, orientation: self.bufferOrientation)
|
||||||
sampleBufferOut: &bufferCopy)
|
frameProcessor(frame)
|
||||||
if let bufferCopy = bufferCopy {
|
self.isRunningFrameProcessor = false
|
||||||
// successfully copied buffer, dispatch frame processor call.
|
|
||||||
CameraQueues.frameProcessorQueue.async {
|
|
||||||
self.isRunningFrameProcessor = true
|
|
||||||
let frame = Frame(buffer: bufferCopy, orientation: self.bufferOrientation)
|
|
||||||
frameProcessor(frame)
|
|
||||||
self.isRunningFrameProcessor = false
|
|
||||||
}
|
|
||||||
lastFrameProcessorCall = DispatchTime.now()
|
|
||||||
} else {
|
|
||||||
// failed to create a buffer copy.
|
|
||||||
ReactLogger.log(level: .error, message: "Failed to copy buffer! Frame Processor cannot be called.", alsoLogToJS: true)
|
|
||||||
}
|
}
|
||||||
|
lastFrameProcessorCall = DispatchTime.now()
|
||||||
} else {
|
} else {
|
||||||
// we're still in the middle of executing a Frame Processor for a previous frame, notify user about dropped frame.
|
// we're still in the middle of executing a Frame Processor for a previous frame, notify user about dropped frame.
|
||||||
if !hasLoggedFrameProcessorFrameDropWarning {
|
if !hasLoggedFrameProcessorFrameDropWarning {
|
||||||
|
Loading…
Reference in New Issue
Block a user