gpt4 book ai didi

ios - 如何在 IOS 相机中启用稳定和 HDR?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:08:25 28 4
gpt4 key购买 nike

我做了什么:-

我尝试启用stabilizationHDR 但它不起作用。我认为我走对了路。当我尝试检查当前设备是否支持稳定时和 HDR 在这两种情况下我在所有设备中都只有错误的情况。

如果下面的代码片段有任何错误,请指导我。

提前致谢!

我的代码片段:-

func createAVSession() throws -> AVCaptureSession {
AppLog.LogFunction(object: LOG_Start)

// Start out with low quality
let session = AVCaptureSession()
session.sessionPreset = AVCaptureSessionPresetPhoto

// Input from video camera
let device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
let currentFormat = device?.activeFormat.isVideoHDRSupported
try device?.lockForConfiguration()
if device?.activeFormat.isVideoHDRSupported == true {
device?.automaticallyAdjustsVideoHDREnabled = false
device?.isVideoHDREnabled = true
print("device?.isVideoHDREnabled\(device?.isVideoHDREnabled)")
}

if (device?.isFocusModeSupported(.continuousAutoFocus))! {
device?.focusMode = AVCaptureFocusMode.continuousAutoFocus
print("device?.focusMode\(device?.focusMode.rawValue)")
}
if (device?.isSmoothAutoFocusSupported)! {
device?.isSmoothAutoFocusEnabled = true
print("device?.isSmoothAutoFocusEnabled\(device?.isSmoothAutoFocusEnabled)")
}

if (device?.isExposureModeSupported(.continuousAutoExposure))! {
device?.exposureMode = .continuousAutoExposure
print("device?.exposureMode\(device?.exposureMode.rawValue)")
}
device?.unlockForConfiguration()

let input = try AVCaptureDeviceInput(device: device)
do {
try input.device.lockForConfiguration()
input.device.activeVideoMaxFrameDuration = CMTimeMake(1, 30)
input.device.activeVideoMinFrameDuration = CMTimeMake(1, 30)
input.device.unlockForConfiguration()
}
catch {
print("Failed to set FPS")
}

// Output
let videoOutput = AVCaptureVideoDataOutput()

videoOutput.videoSettings = [ kCVPixelBufferPixelFormatTypeKey as AnyHashable: kCVPixelFormatType_32BGRA]
videoOutput.alwaysDiscardsLateVideoFrames = true
videoOutput.setSampleBufferDelegate(self, queue: sessionQueue)

let stillImageOutput: AVCaptureStillImageOutput = AVCaptureStillImageOutput()
stillImageOutput.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]

//stillImageOutput.isHighResolutionStillImageOutputEnabled = true

if stillImageOutput.isStillImageStabilizationSupported {
stillImageOutput.automaticallyEnablesStillImageStabilizationWhenAvailable = true
print("stillImageOutput.isStillImageStabilizationActive\(stillImageOutput.isStillImageStabilizationActive)")
}

// Join it all together
session.addInput(input)
session.addOutput(videoOutput)

if session.canAddOutput(stillImageOutput) {
session.addOutput(stillImageOutput)
self.stillImageOutput = stillImageOutput

}



if let connection = videoOutput.connection(withMediaType: AVMediaTypeVideo) {
if connection.isVideoOrientationSupported {
connection.videoOrientation = .portrait
}
if connection.isVideoStabilizationSupported {
connection.preferredVideoStabilizationMode = .standard
print("connection.activeVideoStabilizationMode\(connection.activeVideoStabilizationMode.rawValue)")
}
}


AppLog.LogFunction(object: LOG_End)
return session
}

最佳答案

在稳定问题上对我有用的是在委托(delegate)中对其进行测试。在我的项目中,我使用 AVCaptureVideoDataOutputSampleBufferDelegate 写入我的文件,因为我在决定写入之前测试像素缓冲区中的某些内容。这是我找到的一个地方,它会说允许稳定。无论如何,这就是我为稳定性问题所做的。希望对您有所帮助。

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!){
self.lockQueue.sync {
if !self.isCapturing || self.isPaused {
return
}

let isVideo = captureOutput is AVCaptureVideoDataOutput

if isVideo && self.videoWriter == nil {
// testing to make sure dealing with video and not audio

let connection = captureOutput.connection(withMediaType: AVMediaTypeVideo)

if (connection?.isVideoStabilizationSupported)! {
connection?.preferredVideoStabilizationMode = AVCaptureVideoStabilizationMode.cinematic
}

//other work excluded as irrelevant
}
}
}

关于ios - 如何在 IOS 相机中启用稳定和 HDR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45790345/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com