|
@@ -188,26 +188,26 @@
|
|
|
|
|
|
self.albumButton.layer.cornerRadius = 6;
|
|
|
self.albumButton.clipsToBounds = YES;
|
|
|
-
|
|
|
- switch ([SDKParameters shared].flashMode) {
|
|
|
- case SDK_FLASH_MODE_AUTO:{
|
|
|
- self.outputSettings.flashMode = AVCaptureFlashModeAuto;
|
|
|
- [self.flashButton setImage:[UIImage sdkImageNamed:@"flash-auto-btn"] forState:UIControlStateNormal];
|
|
|
- break;
|
|
|
- }
|
|
|
- case SDK_FLASH_MODE_ON:{
|
|
|
- self.outputSettings.flashMode = AVCaptureFlashModeOn;
|
|
|
- [self.flashButton setImage:[UIImage sdkImageNamed:@"flash-btn"] forState:UIControlStateNormal];
|
|
|
- break;
|
|
|
- }
|
|
|
- case SDK_FLASH_MODE_OFF:{
|
|
|
- self.outputSettings.flashMode = AVCaptureFlashModeOff;
|
|
|
- [self.flashButton setImage:[UIImage sdkImageNamed:@"flash-disable-btn"] forState:UIControlStateNormal];
|
|
|
- break;
|
|
|
- }
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
+ [self updateFlashButton];
|
|
|
+// switch ([SDKParameters shared].flashMode) {
|
|
|
+// case SDK_FLASH_MODE_AUTO:{
|
|
|
+// self.outputSettings.flashMode = AVCaptureFlashModeAuto;
|
|
|
+// [self.flashButton setImage:[UIImage sdkImageNamed:@"flash-auto-btn"] forState:UIControlStateNormal];
|
|
|
+// break;
|
|
|
+// }
|
|
|
+// case SDK_FLASH_MODE_ON:{
|
|
|
+// self.outputSettings.flashMode = AVCaptureFlashModeOn;
|
|
|
+// [self.flashButton setImage:[UIImage sdkImageNamed:@"flash-btn"] forState:UIControlStateNormal];
|
|
|
+// break;
|
|
|
+// }
|
|
|
+// case SDK_FLASH_MODE_OFF:{
|
|
|
+// self.outputSettings.flashMode = AVCaptureFlashModeOff;
|
|
|
+// [self.flashButton setImage:[UIImage sdkImageNamed:@"flash-disable-btn"] forState:UIControlStateNormal];
|
|
|
+// break;
|
|
|
+// }
|
|
|
+// default:
|
|
|
+// break;
|
|
|
+// }
|
|
|
|
|
|
[PCSMotionManager shared];
|
|
|
|
|
@@ -490,6 +490,36 @@
|
|
|
[self stopCaptureSession];
|
|
|
[[PCSMotionManager shared] stopAccelerometerUpdates];
|
|
|
}
|
|
|
+
|
|
|
+- (void)updateFlashButton {
|
|
|
+ __block SDKFlashModeIndex flashModel = SDK_FLASH_MODE_AUTO;
|
|
|
+ [[SDKParameters shared].items enumerateObjectsUsingBlock:^(SDKParametersItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
|
+ if (obj.model == self.mode) {
|
|
|
+ flashModel = obj.flashMode;
|
|
|
+ }
|
|
|
+ }];
|
|
|
+ switch (flashModel) {
|
|
|
+ case SDK_FLASH_MODE_AUTO:{
|
|
|
+ self.outputSettings.flashMode = AVCaptureFlashModeAuto;
|
|
|
+ [self.flashButton setImage:[UIImage sdkImageNamed:@"flash-auto-btn"] forState:UIControlStateNormal];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case SDK_FLASH_MODE_ON:{
|
|
|
+ self.outputSettings.flashMode = AVCaptureFlashModeOn;
|
|
|
+ [self.flashButton setImage:[UIImage sdkImageNamed:@"flash-btn"] forState:UIControlStateNormal];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case SDK_FLASH_MODE_OFF:{
|
|
|
+ self.outputSettings.flashMode = AVCaptureFlashModeOff;
|
|
|
+ [self.flashButton setImage:[UIImage sdkImageNamed:@"flash-disable-btn"] forState:UIControlStateNormal];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
- (UIView *)stitchView {
|
|
|
if (!_stitchView) {
|
|
|
_stitchView = [[UIView alloc]init];
|
|
@@ -582,7 +612,6 @@
|
|
|
dst.image = model.image;
|
|
|
}
|
|
|
[self presentViewController:dst animated:YES completion:nil];
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -598,7 +627,6 @@
|
|
|
|
|
|
#pragma mark - Config param
|
|
|
+ (void)parser: (NSDictionary*)params{
|
|
|
-
|
|
|
SDKParameters* sdkParams = [SDKParameters shared];
|
|
|
NSString* retainedMode = params[@"dataRetainedMode"];
|
|
|
if(retainedMode != nil){
|
|
@@ -608,12 +636,8 @@
|
|
|
else if([retainedMode isEqual:@"clear"]){
|
|
|
sdkParams.retainedMode = SDK_DATA_RETAINED_CLEAR;
|
|
|
}
|
|
|
- // if([retainedMode isEqual:@"userConfirm"]){
|
|
|
- // sdkParams.retainedMode = SDK_DATA_RETAINED_USER_CONFIRM;
|
|
|
- // }
|
|
|
}
|
|
|
NSArray* arr = params[@"cameraMode"];
|
|
|
- if(arr != nil){
|
|
|
NSDictionary<NSString*, NSNumber*>* table = @{
|
|
|
@"continuous": @(SDK_CAPTURE_MODE_CONTINUOUS),
|
|
|
@"single" : @(SDK_CAPTURE_MODE_SINGLE),
|
|
@@ -621,93 +645,92 @@
|
|
|
@"panorama" : @(SDK_CAPTURE_MODE_PANORAMA),
|
|
|
@"panoramaPlus" : @(SDK_CAPTURE_MODE_INTELLEGENCE_PANORAMA)
|
|
|
};
|
|
|
- NSMutableArray<NSNumber*>* modeIndiciesTable = [NSMutableArray arrayWithArray:@[
|
|
|
- @(SDK_CAPTURE_MODE_CONTINUOUS),
|
|
|
- @(SDK_CAPTURE_MODE_SINGLE),
|
|
|
- @(SDK_CAPTURE_MODE_MOVIE),
|
|
|
- @(SDK_CAPTURE_MODE_PANORAMA),
|
|
|
- @(SDK_CAPTURE_MODE_INTELLEGENCE_PANORAMA),
|
|
|
- ]];
|
|
|
-
|
|
|
+ NSMutableArray<NSNumber*>* modeIndiciesTable = [NSMutableArray array];
|
|
|
|
|
|
- NSMutableDictionary<NSNumber*, NSNumber*>* modes = [NSMutableDictionary dictionary];
|
|
|
+// NSMutableDictionary<NSNumber*, NSNumber*>* modes = [NSMutableDictionary dictionary];
|
|
|
+
|
|
|
+ NSMutableArray *mutabArray = [NSMutableArray array];
|
|
|
[arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
|
- if(table[obj] != nil){
|
|
|
- modes[table[obj]] = @(YES);
|
|
|
- }
|
|
|
+ if ([obj isKindOfClass:[NSDictionary class]]) {
|
|
|
+ NSDictionary *dict = (NSDictionary *)obj;
|
|
|
+ NSString *mode = dict[@"mode"];
|
|
|
+ if (!table[mode]) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (idx == 0) {
|
|
|
+ sdkParams.modeIndex = (SDKCaptureModeIndex)table[mode].integerValue;
|
|
|
+ }
|
|
|
+ [modeIndiciesTable addObject:table[mode]];
|
|
|
+ SDKParametersItem *item = [[SDKParametersItem alloc]init];
|
|
|
+ NSString* cameraPosition = dict[@"type"];
|
|
|
+ item.model = (SDKCaptureModeIndex)table[mode].integerValue;
|
|
|
+
|
|
|
+ if(cameraPosition != nil){
|
|
|
+ if([cameraPosition isEqual:@"back"]){
|
|
|
+ item.cameraPosition = SDK_CAMERA_PISITION_BACK;
|
|
|
+ item.cameraPositionString = cameraPosition;
|
|
|
+ }
|
|
|
+ else if([cameraPosition isEqual:@"front"]){
|
|
|
+ item.cameraPosition = SDK_CAMERA_PISITION_FRONT;
|
|
|
+ item.cameraPositionString = cameraPosition;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ NSNumber* recTime = dict[@"recTime"];
|
|
|
+ if(recTime != nil){
|
|
|
+ item.limitRecordTime = [recTime integerValue];
|
|
|
+ }
|
|
|
+
|
|
|
+ item.keyFrame = dict[@"keyframe"];
|
|
|
+ item.isRemake = dict[@"isRemake"];
|
|
|
+
|
|
|
+ NSString* flashMode = dict[@"flashMode"];
|
|
|
+ if(flashMode != nil){
|
|
|
+ item.flashModeString = flashMode;
|
|
|
+ if([flashMode isEqualToString:@"auto"]){
|
|
|
+ item.flashMode = SDK_FLASH_MODE_AUTO;
|
|
|
+ }
|
|
|
+ else if([flashMode isEqualToString:@"on"]){
|
|
|
+ item.flashMode = SDK_FLASH_MODE_ON;
|
|
|
+ }
|
|
|
+ else if([flashMode isEqualToString:@"off"]){
|
|
|
+ item.flashMode = SDK_FLASH_MODE_OFF;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ NSNumber* videoQualityNum = dict[@"videoQuality"];
|
|
|
+ if(videoQualityNum != nil){
|
|
|
+ NSInteger videoQuality = [videoQualityNum integerValue];
|
|
|
+ if(videoQuality == 480){
|
|
|
+ item.videoQuality = SDK_VIDEO_QUALITY_480;
|
|
|
+ }
|
|
|
+ else if(videoQuality == 720){
|
|
|
+ item.videoQuality = SDK_VIDEO_QUALITY_720;
|
|
|
+ }
|
|
|
+ else if(videoQuality == 1080){
|
|
|
+ item.videoQuality = SDK_VIDEO_QUALITY_1080;
|
|
|
+ }
|
|
|
+ else if(videoQuality == 2160){
|
|
|
+ item.videoQuality = SDK_VIDEO_QUALITY_2160;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ NSNumber* showPreviewForPanorama = dict[@"showPreview"];
|
|
|
+ if(showPreviewForPanorama != nil){
|
|
|
+ item.showPreviewForPanorama = [showPreviewForPanorama boolValue];
|
|
|
+ }
|
|
|
+ [mutabArray addObject:item];
|
|
|
+ }
|
|
|
}];
|
|
|
+
|
|
|
+ sdkParams.modeIndices = [modeIndiciesTable copy];
|
|
|
+
|
|
|
+ [SDKParameters shared].items = mutabArray;
|
|
|
|
|
|
- [modeIndiciesTable enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(NSNumber * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
|
-
|
|
|
- if(modes[obj] == nil){
|
|
|
- [modeIndiciesTable removeObject:obj];
|
|
|
- }
|
|
|
- }];
|
|
|
|
|
|
- sdkParams.modeIndices = [modeIndiciesTable copy];
|
|
|
- if(table[arr.firstObject] != nil){
|
|
|
- sdkParams.modeIndex = (SDKCaptureModeIndex)[table[arr.firstObject] unsignedIntegerValue];
|
|
|
- }
|
|
|
- else{
|
|
|
- sdkParams.modeIndex = (SDKCaptureModeIndex)[sdkParams.modeIndices.firstObject unsignedIntegerValue];
|
|
|
- }
|
|
|
- }
|
|
|
- NSString* cameraPosition = params[@"type"];
|
|
|
- if(cameraPosition != nil){
|
|
|
- if([cameraPosition isEqual:@"back"]){
|
|
|
- sdkParams.cameraPosition = SDK_CAMERA_PISITION_BACK;
|
|
|
- sdkParams.cameraPositionString = cameraPosition;
|
|
|
- }
|
|
|
- else if([cameraPosition isEqual:@"front"]){
|
|
|
- sdkParams.cameraPosition = SDK_CAMERA_PISITION_FRONT;
|
|
|
- sdkParams.cameraPositionString = cameraPosition;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- NSNumber* recTime = params[@"recTime"];
|
|
|
- if(recTime != nil){
|
|
|
- sdkParams.limitRecordTime = [recTime integerValue];
|
|
|
- }
|
|
|
-
|
|
|
- sdkParams.keyFrame = params[@"keyframe"];
|
|
|
-
|
|
|
- NSString* flashMode = params[@"flashMode"];
|
|
|
- if(flashMode != nil){
|
|
|
- sdkParams.flashModeString = flashMode;
|
|
|
- if([flashMode isEqualToString:@"auto"]){
|
|
|
- sdkParams.flashMode = SDK_FLASH_MODE_AUTO;
|
|
|
- }
|
|
|
- else if([flashMode isEqualToString:@"on"]){
|
|
|
- sdkParams.flashMode = SDK_FLASH_MODE_ON;
|
|
|
- }
|
|
|
- else if([flashMode isEqualToString:@"off"]){
|
|
|
- sdkParams.flashMode = SDK_FLASH_MODE_OFF;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- NSNumber* videoQualityNum = params[@"videoQuality"];
|
|
|
- if(videoQualityNum != nil){
|
|
|
- NSInteger videoQuality = [videoQualityNum integerValue];
|
|
|
- if(videoQuality == 480){
|
|
|
- sdkParams.videoQuality = SDK_VIDEO_QUALITY_480;
|
|
|
- }
|
|
|
- else if(videoQuality == 720){
|
|
|
- sdkParams.videoQuality = SDK_VIDEO_QUALITY_720;
|
|
|
- }
|
|
|
- else if(videoQuality == 1080){
|
|
|
- sdkParams.videoQuality = SDK_VIDEO_QUALITY_1080;
|
|
|
- }
|
|
|
- else if(videoQuality == 2160){
|
|
|
- sdkParams.videoQuality = SDK_VIDEO_QUALITY_2160;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- NSNumber* showPreviewForPanorama = params[@"showPreview"];
|
|
|
- if(showPreviewForPanorama != nil){
|
|
|
- sdkParams.showPreviewForPanorama = [showPreviewForPanorama boolValue];
|
|
|
- }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
// 拍照界面
|
|
@@ -740,7 +763,7 @@
|
|
|
_captureSession.sessionPreset = AVCaptureSessionPresetInputPriority;
|
|
|
|
|
|
_movieFileOutput = [[AVCaptureMovieFileOutput alloc] init];
|
|
|
- _movieFileOutput.maxRecordedDuration = CMTimeMake(self.parameters.limitRecordTime, 1);
|
|
|
+// _movieFileOutput.maxRecordedDuration = CMTimeMake(self.parameters.limitRecordTime, 1);
|
|
|
|
|
|
// setup video data output for panoramic
|
|
|
_videoDataQueue = dispatch_queue_create("video data", DISPATCH_QUEUE_SERIAL);
|
|
@@ -780,7 +803,12 @@
|
|
|
id node = [[nodeClsTable[obj] alloc] initWithController: self];
|
|
|
if ([node isKindOfClass:[OperationNodeVideoBase class]]) {
|
|
|
OperationNodeVideoBase *base = (OperationNodeVideoBase *)node;
|
|
|
- base.recTime = [SDKParameters shared].limitRecordTime;
|
|
|
+ [[SDKParameters shared].items enumerateObjectsUsingBlock:^(SDKParametersItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
|
+ if (obj.model == self.mode) {
|
|
|
+ base.recTime = obj.limitRecordTime;
|
|
|
+ }
|
|
|
+ }];
|
|
|
+
|
|
|
}
|
|
|
[nodesArr addObject: node];
|
|
|
nodesDic[obj] = node;
|
|
@@ -1058,7 +1086,12 @@
|
|
|
return NO;
|
|
|
}
|
|
|
|
|
|
- self.movieFileOutput.maxRecordedDuration = CMTimeMake([SDKParameters shared].limitRecordTime, 1);
|
|
|
+ [[SDKParameters shared].items enumerateObjectsUsingBlock:^(SDKParametersItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
|
+ if (obj.model == self.mode) {
|
|
|
+ self.movieFileOutput.maxRecordedDuration = CMTimeMake(obj.limitRecordTime, 1);
|
|
|
+ }
|
|
|
+ }];
|
|
|
+
|
|
|
[self.recordTimer invalidate];
|
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
|
self.recordTimer = [NSTimer timerWithTimeInterval:0.2 repeats:YES block:^(NSTimer * _Nonnull timer) {
|
|
@@ -1272,15 +1305,19 @@
|
|
|
return NO;
|
|
|
}
|
|
|
|
|
|
- SDKParameters* params = [SDKParameters shared];
|
|
|
- NSDictionary* settings = [NSDictionary dictionaryWithObjectsAndKeys:
|
|
|
- AVVideoCodecTypeH264, AVVideoCodecKey,
|
|
|
- [NSNumber numberWithInteger: params.resolution.width], AVVideoWidthKey,
|
|
|
- [NSNumber numberWithInteger: params.resolution.height], AVVideoHeightKey,
|
|
|
- nil];
|
|
|
-
|
|
|
- self.videoWriterInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:settings];
|
|
|
+ [[SDKParameters shared].items enumerateObjectsUsingBlock:^(SDKParametersItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
|
+ if (obj.model == self.mode) {
|
|
|
+ NSDictionary* settings = [NSDictionary dictionaryWithObjectsAndKeys:
|
|
|
+ AVVideoCodecTypeH264, AVVideoCodecKey,
|
|
|
+ [NSNumber numberWithInteger: obj.resolution.width], AVVideoWidthKey,
|
|
|
+ [NSNumber numberWithInteger: obj.resolution.height], AVVideoHeightKey,
|
|
|
+ nil];
|
|
|
+ self.videoWriterInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:settings];
|
|
|
+ }
|
|
|
+ }];
|
|
|
|
|
|
+// SDKParameters* params = [SDKParameters shared];
|
|
|
+
|
|
|
self.videoWriterInput.expectsMediaDataInRealTime = YES;
|
|
|
|
|
|
[self.videoWriter addInput:self.videoWriterInput];
|
|
@@ -1292,8 +1329,13 @@
|
|
|
if (self.cameraPrepared) {
|
|
|
return;
|
|
|
}
|
|
|
+ __block AVCaptureDevice* device = nil;
|
|
|
+ [[SDKParameters shared].items enumerateObjectsUsingBlock:^(SDKParametersItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
|
+ if (obj.model == self.mode) {
|
|
|
+ device = obj.cameraPosition == SDK_CAMERA_PISITION_BACK ? [CameraManager shared].back : [CameraManager shared].front;
|
|
|
+ }
|
|
|
+ }];
|
|
|
|
|
|
- AVCaptureDevice* device = [SDKParameters shared].cameraPosition == SDK_CAMERA_PISITION_BACK ? [CameraManager shared].back : [CameraManager shared].front;
|
|
|
if (device == nil) {
|
|
|
self.cameraPrepared = false;
|
|
|
return;
|
|
@@ -1328,9 +1370,14 @@
|
|
|
|
|
|
[self.captureSession commitConfiguration];
|
|
|
self.cameraPrepared = YES;
|
|
|
+ [[SDKParameters shared].items enumerateObjectsUsingBlock:^(SDKParametersItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
|
+ if (obj.model == self.mode) {
|
|
|
+ [[CameraManager shared] setResolutionFor:AVCaptureDevicePositionBack with:obj.resolution.height];
|
|
|
+ [[CameraManager shared] setResolutionFor:AVCaptureDevicePositionFront with:obj.resolution.height];
|
|
|
+ }
|
|
|
+ }];
|
|
|
|
|
|
- [[CameraManager shared] setResolutionFor:AVCaptureDevicePositionBack with:self.parameters.resolution.height];
|
|
|
- [[CameraManager shared] setResolutionFor:AVCaptureDevicePositionFront with:self.parameters.resolution.height];
|
|
|
+
|
|
|
[self updatePreViewLayer];
|
|
|
}
|
|
|
|
|
@@ -1489,12 +1536,24 @@
|
|
|
}
|
|
|
dispatch_async(dispatch_get_global_queue(0, 0), ^{
|
|
|
if(newIndex == SDK_CAPTURE_MODE_SINGLE || newIndex == SDK_CAPTURE_MODE_CONTINUOUS){
|
|
|
- [[CameraManager shared] setResolutionFor:AVCaptureDevicePositionBack with:self.parameters.resolution.height];
|
|
|
- [[CameraManager shared] setResolutionFor:AVCaptureDevicePositionFront with:self.parameters.resolution.height];
|
|
|
+ [[SDKParameters shared].items enumerateObjectsUsingBlock:^(SDKParametersItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
|
+ if (obj.model == self.mode) {
|
|
|
+ [[CameraManager shared] setResolutionFor:AVCaptureDevicePositionBack with:obj.resolution.height];
|
|
|
+ [[CameraManager shared] setResolutionFor:AVCaptureDevicePositionFront with:obj.resolution.height];
|
|
|
+ }
|
|
|
+ }];
|
|
|
+
|
|
|
+// [[CameraManager shared] setResolutionFor:AVCaptureDevicePositionBack with:self.parameters.resolution.height];
|
|
|
+// [[CameraManager shared] setResolutionFor:AVCaptureDevicePositionFront with:self.parameters.resolution.height];
|
|
|
}
|
|
|
else{
|
|
|
- [[CameraManager shared] setResolutionFor:AVCaptureDevicePositionBack with:self.parameters.videoResolution.height];
|
|
|
- [[CameraManager shared] setResolutionFor:AVCaptureDevicePositionFront with:self.parameters.videoResolution.height];
|
|
|
+ [[SDKParameters shared].items enumerateObjectsUsingBlock:^(SDKParametersItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
|
+ if (obj.model == self.mode) {
|
|
|
+ [[CameraManager shared] setResolutionFor:AVCaptureDevicePositionBack with:obj.videoResolution.height];
|
|
|
+ [[CameraManager shared] setResolutionFor:AVCaptureDevicePositionFront with:obj.videoResolution.height];
|
|
|
+ }
|
|
|
+ }];
|
|
|
+
|
|
|
}
|
|
|
|
|
|
PhotographModeEnum oldModeEnum = (PhotographModeEnum)(oldIndex);
|
|
@@ -2037,7 +2096,7 @@
|
|
|
self.numberOfImagesLabel.hidden = NO;
|
|
|
self.numberOfImagesLabel.text = [NSString stringWithFormat:@"已拍摄%ld张", self.resourceModel.aiPanoramArray.count];
|
|
|
} else {
|
|
|
- self.numberOfImagesLabel.text = @"单击拍摄,长按拼接";
|
|
|
+ self.numberOfImagesLabel.text = @"轻点拍照,长按录制";
|
|
|
self.numberOfImagesLabel.hidden = NO;
|
|
|
}
|
|
|
}
|
|
@@ -2048,25 +2107,22 @@
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+- (void)savePhotoWith:(NSData *)data isRemake:(BOOL)isRemake{
|
|
|
+ UIImage *image = [[UIImage alloc] initWithData:data];
|
|
|
|
|
|
-#pragma mark 相机单拍,和连拍的代理
|
|
|
-- (void)captureOutput:(AVCapturePhotoOutput *)output didFinishProcessingPhoto:(AVCapturePhoto *)photo error:(NSError *)error{
|
|
|
- NSData* imageData = [photo fileDataRepresentation];
|
|
|
- if (imageData == nil){
|
|
|
- NSLog(@"%s", "unable to create image data");
|
|
|
- return;
|
|
|
- }
|
|
|
- NSString *path = [LenzDataManager saveImageWith:imageData mode:self.mode];
|
|
|
+ NSString *path = [LenzDataManager saveImageWith:data mode:self.mode];
|
|
|
LenzResourceItemModel *itemModel = [[LenzResourceItemModel alloc]init];
|
|
|
itemModel.path = path;
|
|
|
- itemModel.cameraType = [SDKParameters shared].cameraPositionString;
|
|
|
+ [[SDKParameters shared].items enumerateObjectsUsingBlock:^(SDKParametersItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
|
+ if (obj.model == self.mode) {
|
|
|
+ itemModel.cameraType = obj.cameraPositionString;
|
|
|
+ }
|
|
|
+ }];
|
|
|
+
|
|
|
itemModel.mode = self.mode;
|
|
|
|
|
|
- UIImage *image = [[UIImage alloc] initWithData:imageData];
|
|
|
|
|
|
- BOOL isRemake = [self.tensorFlow remake:image];
|
|
|
itemModel.image = image;
|
|
|
- NSDictionary *dict = [self.tensorFlow resultsDictWith:image];
|
|
|
itemModel.isRemake = isRemake;
|
|
|
|
|
|
switch (self.mode) {
|
|
@@ -2115,7 +2171,34 @@
|
|
|
}
|
|
|
|
|
|
self.resultImageView.image = image;
|
|
|
-// [self updateNumberLabel];
|
|
|
+}
|
|
|
+#pragma mark 相机单拍,和连拍的代理
|
|
|
+- (void)captureOutput:(AVCapturePhotoOutput *)output didFinishProcessingPhoto:(AVCapturePhoto *)photo error:(NSError *)error{
|
|
|
+ NSData* imageData = [photo fileDataRepresentation];
|
|
|
+ if (imageData == nil){
|
|
|
+ NSLog(@"%s", "unable to create image data");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ UIImage *image = [[UIImage alloc] initWithData:imageData];
|
|
|
+ BOOL isRemake = [self.tensorFlow remake:image];
|
|
|
+ __block BOOL needCheckRemake = NO;
|
|
|
+ [[SDKParameters shared].items enumerateObjectsUsingBlock:^(SDKParametersItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
|
+ if (obj.model == self.mode) {
|
|
|
+ needCheckRemake = obj.isRemake;
|
|
|
+ }
|
|
|
+ }];
|
|
|
+ if (isRemake && needCheckRemake) {
|
|
|
+ [QuitMultipleModeAlertViewController show:self title:@"确认提醒" text:@"检测到该图片为翻拍,是否继续使用?" leftBtnTitle:@"取消" rightBtnTitle:@"确定" withLeftButtonCallBack:^(QuitMultipleModeAlertViewController * _Nonnull alertController) {
|
|
|
+ [alertController dismissViewControllerAnimated:YES completion:nil];
|
|
|
+ } rightButtonCallBack:^(QuitMultipleModeAlertViewController * _Nonnull alertController) {
|
|
|
+ [alertController dismissViewControllerAnimated:YES completion:nil];
|
|
|
+ [self savePhotoWith:imageData isRemake:isRemake];
|
|
|
+
|
|
|
+ }];
|
|
|
+ } else {
|
|
|
+ [self savePhotoWith:imageData isRemake:isRemake];
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
@@ -2293,7 +2376,12 @@
|
|
|
// NSString *path = [LenzDataManager saveVideoUrl:outputFileURL model:self.mode];
|
|
|
LenzResourceItemModel *itemModel = [[LenzResourceItemModel alloc]init];
|
|
|
itemModel.path = outputFileURL.absoluteString;
|
|
|
- itemModel.cameraType = [SDKParameters shared].cameraPositionString;
|
|
|
+ [[SDKParameters shared].items enumerateObjectsUsingBlock:^(SDKParametersItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
|
+ if (obj.model == self.mode) {
|
|
|
+ itemModel.cameraType = obj.cameraPositionString;
|
|
|
+ }
|
|
|
+ }];
|
|
|
+
|
|
|
itemModel.mode = self.mode;
|
|
|
itemModel.image = [self videoFrameImageWith:outputFileURL];
|
|
|
[self.resourceModel.movieArray addObject:itemModel];
|
|
@@ -2445,7 +2533,11 @@
|
|
|
|
|
|
if (self.isStitchBigImage) {
|
|
|
//保存大图拼接路径
|
|
|
- model.cameraType = [SDKParameters shared].cameraPositionString;
|
|
|
+ [[SDKParameters shared].items enumerateObjectsUsingBlock:^(SDKParametersItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
|
+ if (obj.model == self.mode) {
|
|
|
+ model.cameraType = obj.cameraPositionString;
|
|
|
+ }
|
|
|
+ }];
|
|
|
model.mode = self.mode;
|
|
|
if ([LenStitcher getCurrentPanoramaShow]) {
|
|
|
model.image = image;
|
|
@@ -2458,7 +2550,14 @@
|
|
|
[self.panoramaGuideView showImageWith:nil dir:self.panoramOrientationGuideView.selectedItemIndex];
|
|
|
} else {
|
|
|
if (base.isRecording) {
|
|
|
- if (needSave && [SDKParameters shared].keyFrame.boolValue) {
|
|
|
+ __block BOOL keyFrame = NO;
|
|
|
+ [[SDKParameters shared].items enumerateObjectsUsingBlock:^(SDKParametersItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
|
+ if (obj.model == self.mode) {
|
|
|
+ keyFrame = obj.keyFrame;
|
|
|
+ }
|
|
|
+ }];
|
|
|
+
|
|
|
+ if (needSave && keyFrame) {
|
|
|
NSString *path = [LenzDataManager saveImageWith:UIImageJPEGRepresentation(image, .6) mode:self.mode];
|
|
|
// itemModel.path = path;
|
|
|
if (path) {
|