2012-04-06 25 views
9

Ben özü YUV ayrı görüntü çerçeveden veriler ve kare boyutu Şimdi aşağıda pixelBuffer creat 640*480; olduğunu data[0],data[1],data[2]; onları kurtardı:-6683 (kCVReturnPixelBufferNotOpenGLCompatible) return CVOpenGLESTextureCacheCreateTextureFromImage

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); 

Ama err olduğunu -6638 belgede, "Desteklenmeyen bir arabellek boyutu, piksel biçimi veya öznitelik nedeniyle piksel arabelleği OpenGL ile uyumlu değil" şeklinde belirtilmektedir. bana fazla yardım etmiyor.

Nasıl düzeltebilirim?

+0

'daki değer olarak belirtin Bunu hiç anladın mı? Aynı sorunum var – Hammer

+0

Aynı hatayı aldım. Herhangi bir gelişme? – polyclick

cevap

1

Kaynak görüntü/video karenizin 2 çözünürlüğü var mı? Değilse, doku oluşturmadan önce yeniden boyutlandırmanız gerekir.

1

Elma sorunu kaynak piksel tampon IOSSurface desteklenmesi gerekiyor olmasıdır Technical Q&A 1781

bu kesin sorunun nedenini ayrıntıları. Boş bir sözlüğü kCVPixelBufferIOSurfacePropertiesKey

İlgili konular