2011-04-11 7 views
5

AVCaptureSession에서 CVImageBufferRef를 얻고 있습니다. 이미지 버퍼를 가져 와서 네트워크를 통해 업로드하고 싶습니다. 공간과 시간을 절약하기 위해 CIImage와 NSBitmapImage로 이미지를 렌더링하지 않고이 작업을하고 싶습니다.이 솔루션은 내가 본 모든 솔루션 (여기서는 How can I obtain raw data from a CVImageBuffer object)입니다.CVImageBuffer의 원시 데이터가 렌더링되지 않습니까?

내 인상은 CVImageBuffer가 압축되어있을 수 있다는 것이고, 내게는 멋지다. 렌더링 할 경우 전체 비트 맵으로 압축을 풀고 전체 비트 맵을 업로드해야한다. CVImageBuffer 내 에서처럼 압축 된 데이터를 가져 와서 (압축 된 단일 프레임이 나중에 렌더링되지 않을 수 있음을 깨닫고 싶습니다.) 이것은 CVImageBuffer의 기본 데이터 포인터와 그 길이를 원한다는 것을 의미한다고 생각하지만, API 내에서 그것을 얻는 방법이 없다. 아무도 아이디어가 없나요?

답변

8

CVImageBuffer 자체는 추상 형식입니다. 이미지는 CVPixelBuffer, CVOpenGLBuffer 또는 CVOpenGLTexture 인스턴스 여야합니다. 이러한 유형의 설명서에는 데이터에 액세스하는 데 사용할 수있는 함수가 나열되어 있습니다.

당신이 GetTypeID 방법을 사용하게 입력하는 말하려면, 워드 프로세서가 CVOpenGLTexture이 QuartzCore.framework에 정의되어 있다고

CVImageBufferRef image = …; 
CFTypeID imageType = CFGetTypeID(image); 

if (imageType == CVPixelBufferGetTypeID()) { 
    // Pixel Data 
} 
else if (imageType == CVOpenGLBufferGetTypeID()) { 
    // OpenGL pbuffer 
} 
else if (imageType == CVOpenGLTextureGetTypeID()) { 
    // OpenGL Texture 
} 
+0

글쎄,하지만, 난 여전히 링커 오류를 얻었고 중 하나 OpenGLBuffer 빌드 할 수 없습니다 또는 OpenGLTexture 검사 (또한 CoreVideo.framework 시도). 다행히도 픽셀 버퍼가있는 것처럼 보입니다. – jab

관련 문제