25 lines
1.1 KiB
Text
25 lines
1.1 KiB
Text
//
|
|
// CMSampleBufferUtils.m
|
|
// dal-plugin
|
|
//
|
|
// Created by John Boiles on 5/8/20.
|
|
//
|
|
|
|
#import "CMSampleBufferUtils.h"
|
|
|
|
CMSampleTimingInfo CMSampleTimingInfoForTimestamp(uint64_t timestampNanos, uint32_t fpsNumerator,
|
|
uint32_t fpsDenominator)
|
|
{
|
|
// The timing here is quite important. For frames to be delivered correctly and successfully be recorded by apps
|
|
// like QuickTime Player, we need to be accurate in both our timestamps _and_ have a sensible scale. Using large
|
|
// timestamps and scales like clock_gettime_nsec_np() and NSEC_PER_SEC will work for display, but will error out
|
|
// when trying to record.
|
|
//
|
|
// 600 is a common default in Apple's docs https://developer.apple.com/documentation/avfoundation/avmutablemovie/1390622-timescale
|
|
CMTimeScale scale = 600;
|
|
CMSampleTimingInfo timing;
|
|
timing.duration = CMTimeMake(fpsDenominator * scale, fpsNumerator * scale);
|
|
timing.presentationTimeStamp = CMTimeMakeWithSeconds(timestampNanos / (double) NSEC_PER_SEC, scale);
|
|
timing.decodeTimeStamp = kCMTimeInvalid;
|
|
return timing;
|
|
}
|