gpt4 book ai didi

ios - AVCaptureDevice:比较样本缓冲区时间戳

转载 作者:可可西里 更新时间:2023-11-01 05:51:14 25 4
gpt4 key购买 nike

我有一个视频 AVCaptureDevice (AVMediaTypeVideo),我正在使用 setExposureTargetBias:completionHandler 暂时减少曝光,然后再次恢复它。我需要确切地知道 captureOutput:didOutputSampleBuffer:fromConnection: 中的哪个缓冲区对应于曝光减少的第一帧。

文档说:

该 block 收到一个时间戳,该时间戳与应用该设置的第一个缓冲区的时间戳相匹配。时间戳与设备时钟同步,因此在与通过 AVCaptureVideoDataOutput 实例传送的缓冲区时间戳进行比较之前,必须将其转换为主时钟。

https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVCaptureDevice_Class/#//apple_ref/occ/instm/AVCaptureDevice/setExposureTargetBias:completionHandler :

如何获取“设备时钟”?我在 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;

我走在正确的轨道上吗?

最佳答案

在定义了 CMClockRef masterClockAVCaptureSession.h 中,我找到了一个在另一个方向上起作用的解决方案:

例如,如果你想将输出的时间戳反向同步为原始时间戳,你可以这样做:

captureOutput:didOutputSampleBuffer:fromConnection:

AVCaptureInputPort *port = [[connection inputPorts] objectAtIndex:0];
CMClockRef originalClock = [port clock];
CMTime syncedPTS = CMSampleBufferGetPresentationTime( sampleBuffer );
CMTime originalPTS = CMSyncConvertTime( syncedPTS, [session masterClock], originalClock );

关于ios - AVCaptureDevice:比较样本缓冲区时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34924476/

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