Skip to content

Instantly share code, notes, and snippets.

@bennyty
Last active November 23, 2022 10:34
Show Gist options
  • Save bennyty/ba743b529a51cadcef21285c5fb7797d to your computer and use it in GitHub Desktop.
Save bennyty/ba743b529a51cadcef21285c5fb7797d to your computer and use it in GitHub Desktop.
guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
var copiedPixelBuffer : CVPixelBuffer?
CVPixelBufferCreate(
nil,
CVPixelBufferGetWidth(pixelBuffer),
CVPixelBufferGetHeight(pixelBuffer),
CVPixelBufferGetPixelFormatType(pixelBuffer),
nil,
&copiedPixelBuffer)
CVBufferPropagateAttachments(pixelBuffer, copiedPixelBuffer!)
CVPixelBufferLockBaseAddress(pixelBuffer, kCVPixelBufferLock_ReadOnly)
CVPixelBufferLockBaseAddress(copiedPixelBuffer!, 0)
let size = CVPixelBufferGetDataSize(pixelBuffer)
print("\(size) \(CVPixelBufferGetBaseAddress(copiedPixelBuffer!)) \(CVPixelBufferGetBaseAddress(pixelBuffer))")
memcpy(
CVPixelBufferGetBaseAddress(copiedPixelBuffer!),
CVPixelBufferGetBaseAddress(pixelBuffer),
size)
// Using this inlined code casues a segfault every time
// while using the extracted local variable makes the call
// succeed (though not sure if the memory is actually copied correctly.
// memcpy(
// CVPixelBufferGetBaseAddress(copiedPixelBuffer!),
// CVPixelBufferGetBaseAddress(pixelBuffer),
// CVPixelBufferGetDataSize(pixelBuffer))
CVPixelBufferUnlockBaseAddress(copiedPixelBuffer!, 0)
CVPixelBufferUnlockBaseAddress(pixelBuffer, kCVPixelBufferLock_ReadOnly)
let format = CMSampleBufferGetFormatDescription(sampleBuffer)!
var timing = CMSampleTimingInfo()
CMSampleBufferGetSampleTimingInfo(sampleBuffer, 0, &timing)
var copiedSampleBuffer : CMSampleBuffer?
// Note, both of these segfault and both set status to -12743
let status = CMSampleBufferCreateReadyWithImageBuffer(nil, copiedPixelBuffer!, format, &timing, &copiedSampleBuffer)
// let status = CMSampleBufferCreateForImageBuffer(nil, copiedPixelBuffer!, true, nil, nil, format, &timing, &copiedSampleBuffer)
// Code segfaults here too (probably actually happens with CMSampleBufferCreateReadyWithImageBuffer)
// Status does not print unless it is the first print statement, segfault happens on first statement after either CMSampleBufferCreate)
// Debugger shows that status = -12743, same as before :'(
print("Hello")
print("Hello \(status)")
print(status)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment