AppleのAVCamのサンプルでmaxPhotoDimensionsプロパティについて調べておく
はじめに
AVCapturePhotoOutput
のisHighResolutionCaptureEnabled
が非推奨になり、警告としてmaxPhotoDimensions
を使えというメッセージが出るようになっていた。
Appleの公式でカメラアプリ用のサンプルからそれが何かを考えてみる。
最初に結論
AppleのサンプルはconfigurePhotoOutputメソッドでInputのlastをOutputに指定しているが、
これはInputの設定によって変わり、Outputに指定しても絶対反映されるわけでもない。
たとえば設定によっては8064x6048のサイズがInputのsupportedMaxPhotoDimensionsとして取得できる。
それをOutputに指定しても、そのまま8064x6048のサイズにはならない(できるやり方はあるとは思う)。
つまり、maxはあくまで最大値を決めていて、Output側で適切にやる方法が必要だと "思う"。
ちなみに最大値だからなんでも設定できるわけじゃなく、適当に指定できるわけじゃない。エラー出る。
特にこだわりがなければInputとOutputをsessionにつないだら適切な値がデフォルトで設定もされる。
ここはあくまでサンプルとしてこの値を変更できるよ、ということだけを示すサンプルとして受け取るのが良さそう。
private func configurePhotoOutput() {
let supportedMaxPhotoDimensions = self.videoDeviceInput.device.activeFormat.supportedMaxPhotoDimensions
let largestDimesnion = supportedMaxPhotoDimensions.last
// ここ! ここでlast指定してるのはもうちょっと説明が欲しいよね!!!
self.photoOutput.maxPhotoDimensions = largestDimesnion!
self.photoOutput.isLivePhotoCaptureEnabled = self.photoOutput.isLivePhotoCaptureSupported
self.photoOutput.maxPhotoQualityPrioritization = .quality
self.photoOutput.isResponsiveCaptureEnabled = self.photoOutput.isResponsiveCaptureSupported
self.photoOutput.isFastCapturePrioritizationEnabled = self.photoOutput.isFastCapturePrioritizationSupported
self.photoOutput.isAutoDeferredPhotoDeliveryEnabled = self.photoOutput.isAutoDeferredPhotoDeliverySupported
let photoSettings = self.setUpPhotoSettings()
DispatchQueue.main.async {
self.photoSettings = photoSettings
}
}
maxPhotoDimensionsとは
関連する奴ら
- Input
-
AVCaptureDevice.Format
のsupportedMaxPhotoDimensions
- Input側が対応しているw,hを配列で返す
- 予想
- maxなのになぜ配列?
- Input側の設定でアスペクト比が一緒でも異なるmaxがある
- おそらくProRawのときに極大のw,hが選べる
- 極大のw,hを選んでもCaputre側で対応してなければ出力されないしエラーにならないからそれは安心
- サンプルでは
last!
を指定している
- おそらくProRawのときに極大のw,hが選べる
- Input側の設定でアスペクト比が一緒でも異なるmaxがある
- maxなのになぜ配列?
- 予想
- Input側が対応しているw,hを配列で返す
-
- Output
-
AVCapturePhotoOutput
のmaxPhotoDimensions
- Input側の
supportedMaxPhotoDimensions
と同じじゃないといけない
- Input側の
-
- PhotoOutput(キャプチャ)
-
AVCapturePhotoSettings
のmaxPhotoDimensions
- キャプチャして写真データにする際に利用される
- これは
AVCapturePhotoOutput
のmaxPhotoDimensions
にある設定がデフォルトで指定されるはず- ドキュメントによると同じか小さいか
- 試した感じ、
AVCapturePhotoOutput
のmaxPhotoDimensions
と全く同じじゃないとエラー- だったらもう設定させないでくれよ!!
- 試した感じ、
- ドキュメントによると同じか小さいか
- これは
- キャプチャして写真データにする際に利用される
-
結論としてInputのw,hしかOutput側のw,hとして設定できず、写真として出力する際もw,hはそのOutputと同じものじゃないとエラーになる。
たとえば、Outputと比率が同じでPhotoOutputを1/2に小さくするというのはできない。正直、現状自分で設定する必要性を感じないが(デフォルトで最大値が勝手に選択される)、もしかしたらInput側をカスタムして設定していく際に、おそらく出力する際にでかいサイズが反映されることもあるんだと思う。
Discussion