关于GPUImage超广角微距设置修改

原因:由于GPUImage代码过于老旧所以并不支持超广角的设置

修改文件--所有代码都是在GPUImageVideoCamera.m文件中修改

第1步--先封装一个获取当前设备的函数放在.m文件最后

- (AVCaptureDevice *)wjx_getCaptureDeviceWithPosition:(AVCaptureDevicePosition)positon{
    NSArray<AVCaptureDeviceType> *deviceTypes = @[AVCaptureDeviceTypeBuiltInWideAngleCamera, AVCaptureDeviceTypeBuiltInDualCamera];//设备类型:广角镜头、双镜头
    if (@available(iOS 13.0, *)) {
        // 数组成员的顺序,决定搜索设备的顺序,不要随意调整。
        deviceTypes = @[AVCaptureDeviceTypeBuiltInTripleCamera,AVCaptureDeviceTypeBuiltInDualWideCamera,AVCaptureDeviceTypeBuiltInWideAngleCamera, AVCaptureDeviceTypeBuiltInDualCamera];
    }
    AVCaptureDeviceDiscoverySession *dissession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:deviceTypes mediaType:AVMediaTypeVideo position:positon];
//    NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
    for (AVCaptureDevice *device in dissession.devices)
    {
        if ([device position] == positon)
        {
            return device;
        }
    }
}

第2步--把所有获取摄像头的位置都换成上面的方法

//第1处
- (id)initWithSessionPreset:(NSString *)sessionPreset cameraPosition:(AVCaptureDevicePosition)cameraPosition; 
{
    /*
        ...省略
    **/
    
    // Grab the back-facing or front-facing camera
    _inputCamera = nil;
//  NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
//  for (AVCaptureDevice *device in devices) 
//  {
//      if ([device position] == cameraPosition)
//      {
//          _inputCamera = device;
//      }
//  }

//上面代码注释掉换成下面

    _inputCamera = [self wjx_getCaptureDeviceWithPosition:cameraPosition];
    
    if (!_inputCamera) {
        return nil;
    }

    /*
        ...省略
    **/
}
    
//第2处
- (void)rotateCamera
{
    /*
        ...省略
    **/
    
//    AVCaptureDevice *backFacingCamera = nil;
//    NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
//  for (AVCaptureDevice *device in devices) 
//  {
//      if ([device position] == currentCameraPosition)
//      {
//          backFacingCamera = device;
//      }
//  }
//上面代码注释掉换成下面

    AVCaptureDevice *backFacingCamera = [self wjx_getCaptureDeviceWithPosition:currentCameraPosition];
    newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:backFacingCamera error:&error];

    /*
        ...省略
    **/
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 GPUImage是一个著名的图像处理开源库,它让你能够在图片、视频、相机上使用GPU加速的滤镜和其它特效。与...
    ghost_7fa3阅读 7,745评论 0 2
  • 概述 GPUImage框架是一个获得bsd许可的iOS库,允许您对图像、实时摄像机视频和电影应用gpu加速过滤器和...
    依然小太阳阅读 932评论 0 1
  • 概述 GPUImage是一个著名的图像处理开源库,它让你能够在图片、视频、相机上使用GPU加速的滤镜和其它特效。与...
    秦明Qinmin阅读 3,550评论 2 7
  • 本文介绍了如何使用 GPUImage 来实现一个简单的相机。具体功能包括拍照、录制视频、多段视频合成、实时美颜、自...
    那月无痕阅读 5,755评论 2 7
  • 最近复习了下美颜的集成,这里记录一下直播三要素 采集->美颜->推拉流本篇只是简单介绍下美颜的流程,附加一些 d...
    简单coder阅读 1,330评论 1 1