采用capturevideodataoutput图片合成ok,注意,此方式合成后的图片无须进行方向旋转

This commit is contained in:
bluesea 2024-05-22 15:00:38 +08:00
parent 0b5b42c2bd
commit 7821f7be4d
6 changed files with 178 additions and 119 deletions

View File

@ -14,8 +14,8 @@
filePath = "SwiftProject/Project/Controller/CCHomeController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "593"
endingLineNumber = "593"
startingLineNumber = "612"
endingLineNumber = "612"
landmarkName = "imagePickerController(_:didFinishPickingMediaWithInfo:)"
landmarkType = "7">
</BreakpointContent>
@ -30,8 +30,8 @@
filePath = "SwiftProject/Project/Controller/CCHomeController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "585"
endingLineNumber = "585"
startingLineNumber = "604"
endingLineNumber = "604"
landmarkName = "imagePickerController(_:didFinishPickingMediaWithInfo:)"
landmarkType = "7">
</BreakpointContent>
@ -62,8 +62,8 @@
filePath = "SwiftProject/Project/Controller/CCHomeController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "549"
endingLineNumber = "549"
startingLineNumber = "568"
endingLineNumber = "568"
landmarkName = "photoLibrary()"
landmarkType = "7">
</BreakpointContent>
@ -457,38 +457,6 @@
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "2332D3C8-7CB7-4C2D-9D3C-D9A7D05737DE"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "SwiftProject/Project/View/CCSpatialDisplayTypeView/CCSpatialDisplayTypeView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "172"
endingLineNumber = "172"
landmarkName = "init(menuWidth:arrow:datas:configures:dissMissCallback:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "02F226A8-01C1-4FB7-8724-3FB114CBBC79"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "SwiftProject/Project/View/CCSpatialDisplayTypeView/CCSpatialDisplayTypeView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "170"
endingLineNumber = "170"
landmarkName = "init(menuWidth:arrow:datas:configures:dissMissCallback:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
@ -547,8 +515,8 @@
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialShootController/CCSpatialShootController+Generate.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "186"
endingLineNumber = "186"
startingLineNumber = "194"
endingLineNumber = "194"
landmarkName = "compositeSpatialPhoto()"
landmarkType = "7">
</BreakpointContent>
@ -556,32 +524,80 @@
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "F92BC10F-CFF7-4311-8706-052FD06BD96E"
uuid = "E6673529-7FC7-4709-A0A8-E857D68BA3D9"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialShootController/CCSpatialShootController+Generate.swift"
filePath = "SwiftProject/Project/Controller/CCHomeController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "252"
endingLineNumber = "252"
landmarkName = "compositeSpatialPhoto()"
startingLineNumber = "554"
endingLineNumber = "554"
landmarkName = "gotoVideoTransformVC(url:asset:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "C6506EAA-0954-41A9-A944-2AFB157D551F"
uuid = "389BFC3B-B70F-492B-AA47-FD20BD63E8A7"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialShootController/CCSpatialShootController+Generate.swift"
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "259"
endingLineNumber = "259"
landmarkName = "compositeSpatialPhoto()"
startingLineNumber = "628"
endingLineNumber = "628"
landmarkName = "getOrientationAndResolutionSizeForVideo(asset:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "9CE84387-A6DC-4430-8EDF-1C90B157FB36"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayEx.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "137"
endingLineNumber = "137"
landmarkName = "joinImages_red_blue(lciImage:rciImage:scale:rbImage:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "825FE654-2C40-4F76-B5D2-2EA14A75D54B"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayEx.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "93"
endingLineNumber = "93"
landmarkName = "joinImages_red_blue(lciImage:rciImage:scale:rbImage:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "8E29E821-B4B4-49F7-A00E-E82207F349CA"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayEx.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "133"
endingLineNumber = "133"
landmarkName = "joinImages_red_blue(lciImage:rciImage:scale:rbImage:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>

View File

@ -9,105 +9,141 @@
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>1</integer>
<integer>36</integer>
</dict>
<key>Promises (Playground) 10.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>11</integer>
<integer>45</integer>
</dict>
<key>Promises (Playground) 11.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>12</integer>
<integer>46</integer>
</dict>
<key>Promises (Playground) 12.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>47</integer>
<integer>48</integer>
</dict>
<key>Promises (Playground) 13.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>48</integer>
<integer>49</integer>
</dict>
<key>Promises (Playground) 14.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>49</integer>
<integer>50</integer>
</dict>
<key>Promises (Playground) 15.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>47</integer>
</dict>
<key>Promises (Playground) 16.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>51</integer>
</dict>
<key>Promises (Playground) 17.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>52</integer>
</dict>
<key>Promises (Playground) 18.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>53</integer>
</dict>
<key>Promises (Playground) 19.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>54</integer>
</dict>
<key>Promises (Playground) 2.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>2</integer>
<integer>37</integer>
</dict>
<key>Promises (Playground) 20.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>55</integer>
</dict>
<key>Promises (Playground) 3.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>3</integer>
<integer>38</integer>
</dict>
<key>Promises (Playground) 4.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>4</integer>
<integer>39</integer>
</dict>
<key>Promises (Playground) 5.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>5</integer>
<integer>40</integer>
</dict>
<key>Promises (Playground) 6.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>6</integer>
<integer>41</integer>
</dict>
<key>Promises (Playground) 7.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>7</integer>
<integer>42</integer>
</dict>
<key>Promises (Playground) 8.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>8</integer>
<integer>43</integer>
</dict>
<key>Promises (Playground) 9.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>10</integer>
<integer>44</integer>
</dict>
<key>Promises (Playground).xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>0</integer>
<integer>35</integer>
</dict>
</dict>
</dict>

View File

@ -546,8 +546,7 @@ class CCSpatialPhotoDisplayController: BaseController {
}else if(selectedIndex == 2){//
var ri = joinImages_red_blue(lciImage: lciImage, rciImage: rciImage, scale: currentScale,rbImage: redBlueImage)
// var ri = UIImage(ciImage: lastImg)
ri = ri.getUpImg(imgOrigOritentation: self.imgOritentation )
// ri = ri.getUpImg(imgOrigOritentation: self.imgOritentation )
redBlueImage = ri
self.mImgView.image = ri

View File

@ -158,10 +158,10 @@ extension CCSpatialPhotoDisplayController {
let edS = 20 //
var left = UIImage(ciImage: leftImage )
left = left.getUpImg(imgOrigOritentation: imgOritentation)
// left = left.getUpImg(imgOrigOritentation: imgOritentation)
var right = UIImage(ciImage: rightImage )
right = right.getUpImg(imgOrigOritentation: imgOritentation)
// right = right.getUpImg(imgOrigOritentation: imgOritentation)
//
let (n_left,n_left_size) = getImgWithScale(image: left, scale: scale)

View File

@ -18,36 +18,40 @@ extension CCSpatialShootController: AVCaptureAudioDataOutputSampleBufferDelegate
//
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
if shootingMode == .CCShootingMode_Camera && self.isTakePhoto{
if shootingMode == .CCShootingMode_Camera {
takePhotoSemaphore.wait()
print("xxsddd:\(Thread.current)")
if output == wideAngleCameraVideoDataOutput && self.isTakePhoto_wideCamera {
if let firstFrame = imageFromSampleBuffer(sampleBuffer: sampleBuffer) {
imgs.add(firstFrame)
self.isTakePhoto_wideCamera = false
if self.isTakePhoto {
print("xxsddd:\(Thread.current)")
if output == wideAngleCameraVideoDataOutput && self.isTakePhoto_wideCamera {
if let firstFrame = imageFromSampleBuffer(sampleBuffer: sampleBuffer,orientation: connection.videoOrientation) {
imgs.add(firstFrame)
self.isTakePhoto_wideCamera = false
}
else {
print("wide Angle firstframe is lost....")
}
} else if output == ultraWideCameraVideoDataOutput && self.isTakePhoto_ultraCamera{
if let firstFrame = imageFromSampleBuffer(sampleBuffer: sampleBuffer,orientation: connection.videoOrientation) {
imgs.add(firstFrame)
self.isTakePhoto_ultraCamera = false
}
else{
print("ultra Wide firstFrame is lost....")
}
}
if(imgs.count == 2){
compositeSpatialPhoto()
imgs.removeAllObjects()
self.isTakePhoto = false
print("2张照片满足合成....")
}
else {
print("wide Angle firstframe is lost....")
}
} else if output == ultraWideCameraVideoDataOutput && self.isTakePhoto_ultraCamera{
if let firstFrame = imageFromSampleBuffer(sampleBuffer: sampleBuffer) {
imgs.add(firstFrame)
self.isTakePhoto_ultraCamera = false
}
else{
print("ultra Wide firstFrame is lost....")
print("images 少于2张....")
}
}
if(imgs.count == 2){
compositeSpatialPhoto()
imgs.removeAllObjects()
self.isTakePhoto = false
print("2张照片满足合成....")
}
else {
print("images 少于2张....")
}
takePhotoSemaphore.signal()
}
@ -80,26 +84,30 @@ extension CCSpatialShootController: AVCaptureAudioDataOutputSampleBufferDelegate
//samplebufferuiimage
func imageFromSampleBuffer(sampleBuffer: CMSampleBuffer) -> UIImage? {
//
func imageFromSampleBuffer(sampleBuffer: CMSampleBuffer,orientation:AVCaptureVideoOrientation ) -> UIImage? {
guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return nil }
// CoreImage
let ciImage = CIImage(cvImageBuffer: imageBuffer)
// CIImageCGImage
if let cgImage = CIContext(options: nil).createCGImage(ciImage, from: ciImage.extent) {
// UIImage
let image = UIImage(cgImage: cgImage)
return image
}
return nil
let ciImage = CIImage(cvPixelBuffer: imageBuffer)
let temporaryContext = CIContext(options: nil)
guard let cgImage = temporaryContext.createCGImage(ciImage, from: ciImage.extent) else { return nil }
print("rect:\(ciImage.extent)")
let image = UIImage(cgImage: cgImage, scale: UIScreen.main.scale, orientation: getImgOrientation(orientation: orientation))
return image
}
func getImgOrientation(orientation:AVCaptureVideoOrientation )->UIImage.Orientation {
switch orientation {
case .portrait:
return .up
case .portraitUpsideDown:
return .down
case .landscapeRight:
return .right
case .landscapeLeft:
return .left
}
}
@ -184,7 +192,7 @@ extension CCSpatialShootController: AVCaptureAudioDataOutputSampleBufferDelegate
let url = URL.documentsDirectory.appending(path:"aaa12.HEIC")
let destination = CGImageDestinationCreateWithURL(url as CFURL, UTType.heic.identifier as CFString, 2, nil)!
var oo = imageCGImagePropertyOrientation.rawValue
let orientation_cf = CFNumberCreate(nil, CFNumberType.intType, &oo)
// let orientation_cf = CFNumberCreate(nil, CFNumberType.intType, &oo)
let properties1 = [
kCGImagePropertyGroups: [
kCGImagePropertyGroupIndex: 0,
@ -192,11 +200,11 @@ extension CCSpatialShootController: AVCaptureAudioDataOutputSampleBufferDelegate
kCGImagePropertyGroupImageIndexLeft: 0,
kCGImagePropertyGroupImageIndexRight: 1,
],
kCGImagePropertyTIFFDictionary:[
kCGImagePropertyOrientation:orientation_cf,
],
kCGImagePropertyOrientation:orientation_cf as Any,
// kCGImagePropertyTIFFDictionary:[
// kCGImagePropertyOrientation:orientation_cf,
// ],
//
// kCGImagePropertyOrientation:orientation_cf as Any,
kCGImagePropertyHEIFDictionary: [
kIIOMetadata_CameraExtrinsicsKey: [
kIIOCameraExtrinsics_CoordinateSystemID: 0,
@ -220,10 +228,10 @@ extension CCSpatialShootController: AVCaptureAudioDataOutputSampleBufferDelegate
kCGImagePropertyGroupImageIndexLeft: 0,
kCGImagePropertyGroupImageIndexRight: 1,
],
kCGImagePropertyTIFFDictionary:[
kCGImagePropertyOrientation:orientation_cf,
],
kCGImagePropertyOrientation:orientation_cf as Any,
// kCGImagePropertyTIFFDictionary:[
// kCGImagePropertyOrientation:orientation_cf,
// ],
// kCGImagePropertyOrientation:orientation_cf as Any,
kCGImagePropertyHEIFDictionary: [
kIIOMetadata_CameraExtrinsicsKey: [