You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.9 KiB
83 lines
2.9 KiB
//
|
|
// SCVideoCaptureSessionInfo.h
|
|
// Snapchat
|
|
//
|
|
// Created by Michel Loenngren on 3/27/17.
|
|
// Copyright © 2017 Snapchat, Inc. All rights reserved.
|
|
//
|
|
|
|
#import <SCFoundation/NSString+SCFormat.h>
|
|
|
|
#import <CoreMedia/CoreMedia.h>
|
|
#import <Foundation/Foundation.h>
|
|
|
|
typedef NS_ENUM(NSInteger, SCManagedVideoCapturerInfoType) {
|
|
SCManagedVideoCapturerInfoAudioQueueError,
|
|
SCManagedVideoCapturerInfoAssetWriterError,
|
|
SCManagedVideoCapturerInfoAudioSessionError,
|
|
SCManagedVideoCapturerInfoAudioQueueRetrySuccess,
|
|
SCManagedVideoCapturerInfoAudioQueueRetryDataSourceSuccess_audioQueue,
|
|
SCManagedVideoCapturerInfoAudioQueueRetryDataSourceSuccess_hardware
|
|
};
|
|
|
|
typedef u_int32_t sc_managed_capturer_recording_session_t;
|
|
|
|
/*
|
|
Container object holding information about the
|
|
current recording session.
|
|
*/
|
|
typedef struct {
|
|
CMTime startTime;
|
|
CMTime endTime;
|
|
CMTime duration;
|
|
sc_managed_capturer_recording_session_t sessionId;
|
|
} SCVideoCaptureSessionInfo;
|
|
|
|
static inline SCVideoCaptureSessionInfo SCVideoCaptureSessionInfoMake(CMTime startTime, CMTime endTime,
|
|
sc_managed_capturer_recording_session_t sessionId)
|
|
{
|
|
SCVideoCaptureSessionInfo session;
|
|
session.startTime = startTime;
|
|
session.endTime = endTime;
|
|
if (CMTIME_IS_VALID(startTime) && CMTIME_IS_VALID(endTime)) {
|
|
session.duration = CMTimeSubtract(endTime, startTime);
|
|
} else {
|
|
session.duration = kCMTimeInvalid;
|
|
}
|
|
session.sessionId = sessionId;
|
|
return session;
|
|
}
|
|
|
|
static inline NSTimeInterval SCVideoCaptureSessionInfoGetCurrentDuration(SCVideoCaptureSessionInfo sessionInfo)
|
|
{
|
|
if (CMTIME_IS_VALID(sessionInfo.startTime)) {
|
|
if (CMTIME_IS_VALID(sessionInfo.endTime)) {
|
|
return CMTimeGetSeconds(sessionInfo.duration);
|
|
}
|
|
return CACurrentMediaTime() - CMTimeGetSeconds(sessionInfo.startTime);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static inline NSString *SCVideoCaptureSessionInfoGetDebugString(CMTime time, NSString *label)
|
|
{
|
|
if (CMTIME_IS_VALID(time)) {
|
|
return [NSString sc_stringWithFormat:@"%@: %f", label, CMTimeGetSeconds(time)];
|
|
} else {
|
|
return [NSString sc_stringWithFormat:@"%@: Invalid", label];
|
|
}
|
|
}
|
|
|
|
static inline NSString *SCVideoCaptureSessionInfoGetDebugDescription(SCVideoCaptureSessionInfo sessionInfo)
|
|
{
|
|
NSMutableString *description = [NSMutableString new];
|
|
[description appendString:SCVideoCaptureSessionInfoGetDebugString(sessionInfo.startTime, @"StartTime")];
|
|
[description appendString:@", "];
|
|
[description appendString:SCVideoCaptureSessionInfoGetDebugString(sessionInfo.endTime, @"EndTime")];
|
|
[description appendString:@", "];
|
|
[description appendString:SCVideoCaptureSessionInfoGetDebugString(sessionInfo.duration, @"Duration")];
|
|
[description appendString:@", "];
|
|
[description appendString:[NSString sc_stringWithFormat:@"Id: %u", sessionInfo.sessionId]];
|
|
|
|
return [description copy];
|
|
}
|