react-native-vision-camera/package/ios/Extensions/AVCaptureSession+synchronizeBuffer.swift
Marc Rousavy 1767e6e881
fix: Fully synchronize buffers in RecordingSession to account for late-running frames (#2206)
* fix: Fully synchronize `RecordingSession` to account for late Frames

* Restructure Code

* Update RecordingSession.swift

* Fix last audio timestamp not being used

* fix: Remove `capture/aborted` error

* Update RecordingSession.swift

* Don't log for every Frame

* Format
2023-11-23 18:17:15 +01:00

33 lines
952 B
Swift

//
// AVCaptureSession+synchronizeBuffer.swift
// VisionCamera
//
// Created by Marc Rousavy on 22.11.23.
// Copyright © 2023 mrousavy. All rights reserved.
//
import AVFoundation
import Foundation
extension AVCaptureSession {
/**
Returns the clock that is used by this AVCaptureSession.
*/
var clock: CMClock {
if #available(iOS 15.4, *), let synchronizationClock {
return synchronizationClock
}
return masterClock ?? CMClockGetHostTimeClock()
}
/**
Synchronizes a Buffer received from this [AVCaptureSession] to the timebase of the other given [AVCaptureSession].
*/
func synchronizeBuffer(_ buffer: CMSampleBuffer, toSession to: AVCaptureSession) {
let timestamp = CMSampleBufferGetPresentationTimeStamp(buffer)
let synchronizedTimestamp = CMSyncConvertTime(timestamp, from: clock, to: to.clock)
CMSampleBufferSetOutputPresentationTimeStamp(buffer, newValue: synchronizedTimestamp)
}
}