2016-08-03 20 views
0

-: - Ich habe das GPUImage und andere Third-Party-Bibliotheken verwendet, aber es dauert mehr Zeit und Speicher für die Konvertierung.So fügen Sie den unterschiedlichen Filtertyp im Video mit der Apple Core-Bibliothek oder mit OPEN GL hinzu

-: - Ich möchte das Diff anwenden. Filtertyp für lokal gespeichertes Video.

-: - CIFunHouse ist Apple Beispielcode, aber es ist in Objective C, ich möchte nicht die Bridging-Header verwenden.

Ihr Vorschlag, Beispielcode, wichtige Links sind willkommen.

Antwort

0

var arrFilterName: NSMutableArray = [ "Normal", "BoxBlur", "ZoomBlur", "ToneCurve", "Chrome", "Fade", "Sofort", "Mono" , "Process", "Tonal" "Transfer", "ToneCurveToLinear" "Vignette" "VignetteEffect" "sepiatone"]

var arrFilterLibName: NSMutableArray = [ "Normal", "CIBoxBlur", "CIZoomBlur", "CILinearToSRGBToneCurve", "CIPhotoEffectChrome", "CIPhotoEffectFade", "CIPhotoEffectInstant", "CIPhotoEffectMono", "CIPhotoEffectProcess", "CIPhotoEffectTonal", "CIPhotoEffectTransfer", "CISRGBToneCurveToLinear", "CIVignette", "CIVignetteEffect", "CISepiaTone"]

func applyFilter(){ 
     let str = appDelegate.arr_videourl.objectAtIndex(selectedtag) as! String 
     let urlVideo = NSURL(fileURLWithPath: str) 
     videoSource = VideoSampleBufferSource(url: urlVideo) { [unowned self] buffer in 

      self.image = CIImage(CVPixelBuffer:buffer) 

      if self.intIndexx != 0{ 
       self.currentFilter = CIFilter(name: "\(self.arrFilterLibName[self.intIndexx])")! 
       self.currentFilter.setValue(self.image, forKey: kCIInputImageKey) 

       let inputKeys = self.currentFilter.inputKeys 

       if inputKeys.contains(kCIInputIntensityKey) { self.currentFilter.setValue(1, forKey: kCIInputIntensityKey) } 
       if inputKeys.contains(kCIInputRadiusKey) { self.currentFilter.setValue(18, forKey: kCIInputRadiusKey) } 
       if inputKeys.contains(kCIInputScaleKey) { self.currentFilter.setValue(0.50, forKey: kCIInputScaleKey) } 
       if inputKeys.contains(kCIInputAngleKey) { self.currentFilter.setValue(0.0, forKey: kCIInputAngleKey) } 
       if inputKeys.contains(kCIInputCenterKey) { self.currentFilter.setValue(CIVector(x: 300, y: 300), forKey: kCIInputCenterKey) } 

      let processedImage = self.currentFilter.outputImage! 

      self.coreImageView?.image = processedImage 


     }else{ 
      self.coreImageView?.image = self.image 
     }    
    } 
} 
  • den Filter unterstützten Datei hinzufügen -CoreImageView.swift -CameraBufferSource.swift -VideoSampleBufferSource.swift -Extensions.swift
+0

Ihren Code ein erzeugt Ausgabe als Bild, zB processedImage, kannst du es bearbeiten, um stattdessen ein gefiltertes Video zu erhalten? – Hooda