lxy 1 year ago
parent
commit
cd3732ed0a

+ 43 - 11
LenzCameraNativeModuleForRN/Classes/headers/SDKParameters.h

@@ -10,33 +10,65 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
+
+@interface SDKParametersItem : NSObject
+
+@property (nonatomic) SDKFlashModeIndex flashMode;
+@property (nonatomic) BOOL isRemake;
+@property (nonatomic) SDKCaptureModeIndex model;
+@property (nonatomic) SDKVideoQuality videoQuality;
+@property (nonatomic) CGFloat quantity;
+@property (nonatomic) NSInteger recTime;
+@property (nonatomic) SDKCameraPosition cameraPosition;
+@property (nonatomic) NSString *cameraPositionString;
+@property (nonatomic) NSNumber *keyFrame;
+@property (nonatomic) NSInteger limitRecordTime;
+@property (nonatomic) NSString *flashModeString;
+@property (nonatomic) bool showPreviewForPanorama;
+@property (nonatomic) CGSize resolution;
+@property (nonatomic) CGSize videoResolution;
+
+//      "flashMode": "auto",
+//      "isRemake": true,
+//      "mode": "video",
+//      "quantity": 0,
+//      "recTime": 30,
+//      "type": "back",
+//      "videoQuality": 480
+
+@end
+
+
+
 @interface SDKParameters : NSObject
 
-@property (nonatomic, assign) NSInteger limitRecordTime;
+//@property (nonatomic, assign) NSInteger limitRecordTime;
 
-@property (nonatomic, assign, readonly) CGSize resolution;
+//@property (nonatomic, assign, readonly) CGSize resolution;
 
-@property (nonatomic, assign) CGSize videoResolution;
+//@property (nonatomic, assign) CGSize videoResolution;
 
-@property (nonatomic, assign) SDKFlashModeIndex flashMode;
-@property (nonatomic) NSString *flashModeString;
-@property (nonatomic) NSNumber *keyFrame;
+//@property (nonatomic, assign) SDKFlashModeIndex flashMode;
+//@property (nonatomic) NSString *flashModeString;
+//@property (nonatomic) NSNumber *keyFrame;
 
 @property (nonatomic, assign) SDKCaptureModeIndex modeIndex;
 @property (nonatomic) NSString *modeIndexString;
 //  SDKCaptureModeIndex
 @property (nonatomic, copy) NSArray<NSNumber*>* modeIndices;
 
-@property (nonatomic, assign) SDKCameraPosition cameraPosition;
-@property (nonatomic) NSString *cameraPositionString;
+//@property (nonatomic, assign) SDKCameraPosition cameraPosition;
+//@property (nonatomic) NSString *cameraPositionString;
 
 @property (nonatomic, assign) SDKDataRetainedModeIndex retainedMode;
 
-@property (nonatomic, assign) SDKVideoQuality videoQuality;
+//@property (nonatomic, assign) SDKVideoQuality videoQuality;
+
+//@property (nonatomic) NSInteger quality;
 
-@property (nonatomic) NSInteger quality;
+//@property (nonatomic, assign) bool showPreviewForPanorama;
 
-@property (nonatomic, assign) bool showPreviewForPanorama;
+@property (nonatomic) NSArray <SDKParametersItem *> *items;
 
 + (instancetype)shared;
 

+ 241 - 148
LenzCameraNativeModuleForRN/Classes/inner/PCSBaseViewController/PCSBaseViewController.m

@@ -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];
@@ -539,13 +569,8 @@
     return _stitchLabel;
 }
 #pragma mark - Private Method
-//+ (instancetype)makeViewController{
-//    UIStoryboard* sb = [UIStoryboard storyboardWithName:[PCSTools shared].mainStoryboardName bundle:[PCSTools sdkBundle]];
-//    return ;
-//}
 - (void)alFullViewAction:(UIButton *)button {
 
-//    self.currentOperationNode.needHiddenDir = !self.currentOperationNode.needHiddenDir;
     if (self.mode == SDK_CAPTURE_MODE_PANORAMA) {
         OperationNodePanorama *pan = nil;
         if ([self.currentOperationNode isKindOfClass:[OperationNodePanorama class]]) {
@@ -582,7 +607,6 @@
             dst.image = model.image;
         }
         [self presentViewController:dst animated:YES completion:nil];
-
     }
 }
 
@@ -598,7 +622,6 @@
 
 #pragma mark - Config param
 + (void)parser: (NSDictionary*)params{
-  
     SDKParameters* sdkParams = [SDKParameters shared];
     NSString* retainedMode = params[@"dataRetainedMode"];
     if(retainedMode != nil){
@@ -608,12 +631,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 +640,91 @@
       @"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];
+
+    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 +757,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 +797,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 +1080,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 +1299,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 +1323,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 +1364,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 +1530,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 +2090,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 +2101,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 +2165,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 +2370,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 +2527,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 +2544,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) {

+ 1 - 1
LenzCameraNativeModuleForRN/Classes/inner/Renderer/CameraTextureRenderPass.m

@@ -8,7 +8,7 @@
 #import "CameraTextureRenderPass.h"
 #import <MetalKit/MetalKit.h>
 #import "Renderer.h"
-#import "Common.h"
+#import "LenzCommon.h"
 #import "TensorFlowWrapper.h"
 #import "PCSTools.h"
 

+ 0 - 0
LenzCameraNativeModuleForRN/Classes/inner/Renderer/Shaders/Common.h → LenzCameraNativeModuleForRN/Classes/inner/Renderer/Shaders/LenzCommon.h


+ 1 - 1
LenzCameraNativeModuleForRN/Classes/inner/Renderer/Shaders/Shaders.metal

@@ -5,7 +5,7 @@
 //  Created by 王昭威 on 2023/1/26.
 //
 
-#include "Common.h"
+#include "LenzCommon.h"
 #include <metal_stdlib>
 
 using namespace metal;

+ 53 - 7
LenzCameraNativeModuleForRN/Classes/inner/SDKParameters.m

@@ -28,13 +28,49 @@
 }
 
 - (CGSize)videoResolution{
-    NSValue* value = self.resolutionTable[@(self.videoQuality)];
-    if(value == nil){
-        return [self.resolutionTable[@(SDK_VIDEO_QUALITY_1080)] CGSizeValue];
+//    NSValue* value = self.resolutionTable[@(self.videoQuality)];
+//    if(value == nil){
+//        return [self.resolutionTable[@(SDK_VIDEO_QUALITY_1080)] CGSizeValue];
+//    }
+//    return [value CGSizeValue];
+    
+    return CGSizeZero;
+}
+
+- (instancetype)init{
+    self = [super init];
+    if(self){
+//        _limitRecordTime = 30;
+//        _flashMode = SDK_FLASH_MODE_OFF;
+//        _resolutionTable = @{
+//            @(SDK_VIDEO_QUALITY_480): [NSValue valueWithCGSize:CGSizeMake(720, 480)],
+//            @(SDK_VIDEO_QUALITY_720): [NSValue valueWithCGSize:CGSizeMake(1280, 720)],
+//            @(SDK_VIDEO_QUALITY_1080): [NSValue valueWithCGSize:CGSizeMake(1920, 1080)],
+//            @(SDK_VIDEO_QUALITY_2160): [NSValue valueWithCGSize:CGSizeMake(3840, 2160)],
+//        };
+//        _resolution = CGSizeMake(1280, 720);
+//        _modeIndex = SDK_CAPTURE_MODE_CONTINUOUS;
+//        _cameraPosition = SDK_CAMERA_PISITION_BACK;
+//        _retainedMode = SDK_DATA_RETAINED_RETAIN;
+//        _videoQuality = SDK_VIDEO_QUALITY_720;
+//        _showPreviewForPanorama = NO;
     }
-    return [value CGSizeValue];
+    
+    return self;
 }
 
+@end
+
+@interface SDKParametersItem ()
+
+@property (nonatomic, strong) NSDictionary<NSNumber*, NSValue*>* resolutionTable;
+
+
+@end
+
+
+@implementation SDKParametersItem
+
 - (instancetype)init{
     self = [super init];
     if(self){
@@ -46,10 +82,10 @@
             @(SDK_VIDEO_QUALITY_1080): [NSValue valueWithCGSize:CGSizeMake(1920, 1080)],
             @(SDK_VIDEO_QUALITY_2160): [NSValue valueWithCGSize:CGSizeMake(3840, 2160)],
         };
-        _resolution = CGSizeMake(1280, 720);
-        _modeIndex = SDK_CAPTURE_MODE_CONTINUOUS;
+        _resolution = CGSizeMake(1920, 1080);
+//        _modeIndex = SDK_CAPTURE_MODE_CONTINUOUS;
         _cameraPosition = SDK_CAMERA_PISITION_BACK;
-        _retainedMode = SDK_DATA_RETAINED_RETAIN;
+//        _retainedMode = SDK_DATA_RETAINED_RETAIN;
         _videoQuality = SDK_VIDEO_QUALITY_720;
         _showPreviewForPanorama = NO;
     }
@@ -57,4 +93,14 @@
     return self;
 }
 
+
+- (CGSize)videoResolution{
+    NSValue* value = self.resolutionTable[@(self.videoQuality)];
+    if(value == nil){
+        return [self.resolutionTable[@(SDK_VIDEO_QUALITY_1080)] CGSizeValue];
+    }
+    return [value CGSizeValue];
+}
+
+
 @end