I am recording a video using CVPixelBuffer. Recording works well but at the time of saving video rotates.
You can see in below video that recording is in vertical mode but upon saving video gets rotated!
https://drive.google.com/file/d/10hvDu_3LOIaiD-5G4xhG1tZj4jCOxL72/view?usp=sharing
I tried below method to correct orientation of CVPixelBuffer but it stores black a video.
func rotatePixelBuffer(_ pixelBuffer: CVPixelBuffer, degrees: Int) -> CVPixelBuffer? {
let image = CIImage(cvPixelBuffer: pixelBuffer)
let rotationTransform = CGAffineTransform(rotationAngle: CGFloat(degrees) * CGFloat.pi / 180)
let rotatedImage = image.transformed(by: rotationTransform)
return createPixelBuffer(from: rotatedImage)
}
func createPixelBuffer(from ciImage: CIImage) -> CVPixelBuffer? {
let attributes: [String: Any] = [
kCVPixelBufferCGImageCompatibilityKey as String: true,
kCVPixelBufferCGBitmapContextCompatibilityKey as String: true
]
var pixelBuffer: CVPixelBuffer?
let status = CVPixelBufferCreate(
kCFAllocatorDefault,
Int(ciImage.extent.size.height),
Int(ciImage.extent.size.width),
kCVPixelFormatType_32BGRA,
attributes as CFDictionary,
&pixelBuffer
)
guard status == kCVReturnSuccess, let unwrappedPixelBuffer = pixelBuffer else {
return nil
}
CVPixelBufferLockBaseAddress(unwrappedPixelBuffer, CVPixelBufferLockFlags(rawValue: 0))
let context = CIContext()
context.render(ciImage, to: unwrappedPixelBuffer)
CVPixelBufferUnlockBaseAddress(unwrappedPixelBuffer, CVPixelBufferLockFlags(rawValue: 0))
return unwrappedPixelBuffer
}
this create cvpixelbuffer api is
CVPixelBufferCreate( CFAllocatorRef CV_NULLABLE allocator, size_t width, size_t height,but you use Int(ciImage.extent.size.height) and Int(ciImage.extent.size.width)?