2012-04-06 5 views
9

ho dovuto estrarre i dati YUV da frame video separatamente e li ha salvati in data[0],data[1],data[2]; La dimensione del frame è 640*480; Ora ho creat il pixelBuffer come di seguito:CVOpenGLESTextureCacheCreateTextureFromImage tornare -6683 (kCVReturnPixelBufferNotOpenGLCompatible)

void *pYUV[3] = {data[0], data[1], data[2]}; 
size_t planeWidth = {640, 320, 320}; 
size_t planeHeight = {480, 240, 240}; 
size_t planeBytesPerRow = {640, 320, 320}; 
CVReturn renturn = CVPixelBufferCreateWithPlanarBytes(kCFAllocatorDefault, 
            640, 
            480, 
            kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange, 
            nil, 
            nil, 
            3, 
            pYUV, 
            planeWidth, 
            planeHeight, 
            planeBytesPerRow, 
            nil, 
            nil, nil, &_pixelBuffer); 
CVPixelBufferLockBaseAddress(_pixelBuffer, 0); 
CVPixelBufferRetain(_pixelBuffer); 
    // Periodic texture cache flush every frame 
CVOpenGLESTextureCacheFlush(_textureCache, 0); 

// The Buffer cannot be used with OpenGL as either its size, pixelformat or attributes are not supported by OpenGL 
glActiveTexture(GL_TEXTURE0); 
CVReturn err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault, 
                  _textureCache, 
                  _pixelBuffer, 
                  NULL, 
                  GL_TEXTURE_2D, 
                  GL_LUMINANCE, 
                  im.width, 
                  im.height, 
                  GL_LUMINANCE, 
                  GL_UNSIGNED_BYTE, 
                  0, 
                  &_yTexture); 

if (!_yTexture || err) { 
    NSLog(@"CVOpenGLESTextureCacheCreateTextureFromImage failed (error: %d)", err); 
    return; 
} 
glBindTexture(CVOpenGLESTextureGetTarget(_yTexture), CVOpenGLESTextureGetName(_yTexture)); 
CVPixelBufferUnlockBaseAddress(_pixelBuffer, 0); 

Ma l'Errare è -6638 , la documentazione afferma semplicemente che "Il buffer dei pixel non è compatibile con OpenGL a causa di dimensioni del buffer, formato pixel o attributo non supportati." che non mi aiuta molto

Come posso ripararlo?

+0

Lo hai mai capito? Ho lo stesso problema – Hammer

+0

Ho avuto lo stesso errore. Qualche progresso? – polyclick

risposta

1

Il frame immagine/video sorgente ha una risoluzione pari a 2? In caso contrario, è necessario ridimensionarlo prima di creare la trama. Dettagli

1

di Apple la causa di questo problema esatto in Technical Q&A 1781

Il problema è che il buffer di pixel di origine deve essere IOSSurface sostenuta. Specificare un dizionario vuoto come valore in kCVPixelBufferIOSurfacePropertiesKey