我有一个视频AVCaptureDevice
( AVMediaTypeVideo
),正在短暂地减少曝光setExposureTargetBias:completionHandler
,然后再次恢复它。我需要确切地知道哪个缓冲区captureOutput:didOutputSampleBuffer:fromConnection:
对应于曝光减少的第一帧。
文档说:
该块接收一个时间戳,该时间戳与已应用该设置的第一个缓冲区的时间戳相匹配。时间戳与设备时钟同步,因此在与通过 AVCaptureVideoDataOutput 实例传递的缓冲区的时间戳进行比较之前,必须将其转换为主时钟。
如何获得“设备时钟”?completionHandler
尽管主机时钟似乎与主时钟重合,但我已经在 中完成了以下操作。
CMClockRef masterClock = self.captureSession.masterClock;
CMClockRef deviceClock = CMClockGetHostTimeClock();
syncTimeConverted = CMSyncConvertTime( syncTime, deviceClock, masterClock );
我打算执行以下captureOutput:didOutputSampleBuffer:fromConnection:
操作来测试缓冲区是否是我想要的
CMTime bufferTime = CMSampleBufferGetPresentationTimeStamp( sampleBuffer );
bool isDroppedExposureFrame = CMTimeCompare( bufferTime, syncTimeConverted ) == 0;
我在正确的轨道上吗?