2012-04-06 5 views
9

मैं था अलग वीडियो फ्रेम से निकालने YUV डेटा और उन्हें data[0],data[1],data[2]; में सहेजा फ्रेम आकार 640*480; है अब मैं pixelBuffer के रूप में नीचे मूल्य बना:CVOpenGLESTextureCacheCreateTextureFromImage लौट -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); 

लेकिन गलती है -6638 , प्रलेखन बस बताता है कि "पिक्सेल बफर एक असमर्थित बफर आकार, पिक्सेल प्रारूप या विशेषता के कारण ओपनजीएल के साथ संगत नहीं है।" जो मुझे बहुत मदद नहीं करता है।

मैं इसे कैसे ठीक कर सकता हूं?

+0

में मान के रूप में एक खाली शब्दकोश निर्दिष्ट करें क्या आपने कभी इसे समझ लिया था? मुझे एक ही समस्या है – Hammer

+0

मुझे एक ही त्रुटि मिली है। कोई प्रगति? – polyclick

उत्तर

1

क्या आपके स्रोत छवि/वीडियो फ्रेम में एक संकल्प है जो 2 की शक्ति है? यदि नहीं, तो बनावट बनाने से पहले आपको इसका आकार बदलना होगा।

1

एप्पल Technical Q&A 1781

में इस सटीक समस्या के कारण का विवरण मुद्दा यह है कि स्रोत पिक्सेल बफर जा IOSSurface समर्थित चाहिए। kCVPixelBufferIOSurfacePropertiesKey

संबंधित मुद्दे