【Swift】フレームレート設定はcaptureDevice設定とsessionPreset設定でリセットされてしまう

●現象
captureDeviceをvideoInputに設定すると、FPSはデフォルトにリセットされてしまった
captureSession.sessionPresetを変えてもFPSはデフォルトにリセットされてしまった

●原因
ビデオ入力ソースと、画質を設定するとFPSがリセットされてしまうらしい

●対策
ビデオ入力ソースと、画質を設定後にFPS設定すれば効く

// 入力ソース設定
let videoInput = try! AVCaptureDeviceInput.init(device: captureDevice!)
self.captureSession.addInput(videoInput)

// 画質調整
self.captureSession.beginConfiguration()
if self.captureSession.canSetSessionPreset(AVCaptureSession.Preset.vga640x480) {
     self.captureSession.sessionPreset = AVCaptureSession.Preset.vga640x480
}
else{
     self.captureSession.sessionPreset = AVCaptureSession.Preset.vga640x480
}
    self.captureSession.commitConfiguration()

//のあとに、FPS設定 ★★★
let frameDuration = CMTimeMake(1, Int32(self.fps))
var desiredFormat :AVCaptureDevice.Format? = nil
 
for format in (captureDevice?.formats)!{
     for range in format.videoSupportedFrameRateRanges{
          if(range.maxFrameRate >= Float64(self.fps) && range.minFrameRate <= Float64(self.fps)){
              desiredFormat = format
          }
    }
}

if(desiredFormat != nil){
    do {
         try captureDevice?.lockForConfiguration()
         // フレームレート設定★★★
         // デフォルトは1/30
         captureDevice?.activeFormat = desiredFormat!
         captureDevice?.activeVideoMinFrameDuration = frameDuration
         captureDevice?.activeVideoMaxFrameDuration = frameDuration
         captureDevice?.unlockForConfiguration()
     } catch _ {
     }
 }

コメント

タイトルとURLをコピーしました