Визуализация кадра камеры YpCbCr iPhone 4 в текстуру OpenGL ES 2.0 в iOS 4.3

Я пытаюсь визуализировать собственное планарное изображение с текстурой OpenGL ES 2.0 в iOS 4.3 на iPhone 4. Однако текстура оказывается полностью черной. Моя камера настроена следующим образом:

[videoOutput setVideoSettings:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange] 
                                                          forKey:(id)kCVPixelBufferPixelFormatTypeKey]];

, и я передаю пиксельные данные в свою текстуру следующим образом:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bufferWidth, bufferHeight, 0, GL_RGB_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, CVPixelBufferGetBaseAddress(cameraFrame));

Мои шейдеры фрагментации:

varying highp vec2 textureCoordinate;

uniform sampler2D videoFrame; 

void main() { 
    lowp vec4 color; 
    color = texture2D(videoFrame, textureCoordinate); 
    lowp vec3 convertedColor = vec3(-0.87075, 0.52975, -1.08175); 
    convertedColor += 1.164 * color.g; // Y
    convertedColor += vec3(0.0, -0.391, 2.018) * color.b; // U
    convertedColor += vec3(1.596, -0.813, 0.0) * color.r; // V
    gl_FragColor = vec4(convertedColor, 1.0); 
} 

, а мой вершинный шейдер -

attribute vec4 position;
attribute vec4 inputTextureCoordinate;

varying vec2 textureCoordinate;

void main()
{
    gl_Position = position;
    textureCoordinate = inputTextureCoordinate.xy;
}

Это прекрасно работает, когда я ' m работает с изображением BGRA, а мой фрагментный шейдер работает только с

gl_FragColor = texture2D(videoFrame, textureCoordinate);

Что, если мне здесь чего-то не хватает? Спасибо!

7
задан Richard Slater 30 April 2017 в 11:08
поделиться