Я хочу получить пиксели изображения с камеры.Я использую CoreFoundation и OpenGL, и я могу визуализировать изображение, но я хочу сделать другие вещи (в другом месте / потоке), поэтому мне нужно скопировать их.
Это то, что я пробовал: (частьметода AVCaptureVideoDataOutputSampleBufferDelegate)
CVImageBufferRef tmpPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress( tmpPixelBuffer, 0 );
//APPROACH A
CFRetain(tmpPixelBuffer);
if(pixelBuffer!= 0) CFRelease(pixelBuffer);
pixelBuffer = tmpPixelBuffer;
//create and bind textureHandle
if(m_textureHandle==0) m_textureHandle = [self _createVideoTextureUsingWidth:videoDimensions.width Height:videoDimensions.width];
glBindTexture(GL_TEXTURE_2D, m_textureHandle);
unsigned char *linebase = (unsigned char *)CVPixelBufferGetBaseAddress( tmpPixelBuffer );
//APPROACH B
unsigned size = videoDimensions.width*videoDimensions.height*4;//since its BGRA
unsigned char *imageData = malloc(size);
memcpy(linebase, imageData, size);
free(imageData);
//map the texture
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, videoDimensions.width, videoDimensions.height, GL_BGRA_EXT, GL_UNSIGNED_BYTE, linebase);
CVPixelBufferUnlockBaseAddress( tmpPixelBuffer, 0 );
В подходе AI пытался сохранить буфер дырок, чтобы я мог копировать пиксели позже, когда это необходимо, но я всегда получаю нулевой указатель (не знаю почему)
В подходе BI попробуйте каждый раз копировать пиксели, но я тогда opengl рендерер покажу черное изображение.Не знаю почему, я не изменяю исходный буфер, не так ли?
Заранее спасибо;)
Игнасио