2014-06-10 5 views
1

내가 스위프트와 CoreVideo를 사용하려고 해요하지만 난이 오류 받고 있어요 : '! CVPixelBuffer'을스위프트와 C의 API (CoreVideo)

let flags : CVOptionFlags = 0 
CVPixelBufferLockBaseAddress(imageBuffer, flags) 
^~~~~~~~~~~~~~~~~ 

입력 할 수있는 표현의 유형 'CVReturn을'변환 할 수 없습니다를

CVPixelBufferLockBaseAddress(imageBuffer, 0) 
^~~~~~~~~~~~~~~~~ 

는 입력 식의 유형 'CVReturn을'변환 할 수 없습니다 'CVOptionFlags'

왜 나는 어쨌든 그것을 사용하지 않는 경우이 값을 변환 할 수없는 문제가 무엇입니까? 두 번째 인수를 다르게 전달해야합니까?

답변

2

내가이 일하게 될 것 같아요.

var tmp : COpaquePointer = CMSampleBufferGetImageBuffer(imageBuffer).toOpaque() 
var pixelBuf : CVPixelBuffer = (Unmanaged<CVPixelBuffer>.fromOpaque(tmp)).takeUnretainedValue() 
CVPixelBufferLockBaseAddress(pixelBuf, 0) 
+0

감사합니다.이 컴파일하는 것 같습니다! 나는이 포인터 캐스팅을 더보아야 할 것이다 ... – mirosval

+0

또한이 코드를 내 애플리케이션에서 사용하기 때문에 작동 할 것이다. – sshong

1

CoreVideo에 익숙하지 않지만 처음에는 imageBuffer init과 함께 문제가 더 복잡해 보입니다. 이 코드는 작동 , 적어도 컴파일 :

var pixelBuffer : CVPixelBuffer? 
let optionFlags : CVOptionFlags = 0 
CVPixelBufferLockBaseAddress(pixelBuffer, optionFlags) 
+0

감사합니다. 이제는 CVImageBuffer를 CVPixelBuffer에 캐스트 할 수없는 것 같습니다. 'CVImageBuffer'는 'CVPixelBuffer'로 변환되지 않습니다. – mirosval