Я изучаю OpenGL ES для iOS. Интересно, что данные формата YUV могут отображаться без преобразования RGB. В большинстве случаев данные yuv должны преобразовывать RGB для отображения. Но процесс конвертирования очень медленный, тогда это не отображается плавно. Итак, я хотел бы попытаться разобрать данные YUV без преобразования в RGB. Возможно ли это? Если возможно, что я могу сделать? Пожалуйста, позвольте мне дать совет.Как отображать данные формата yuv без преобразования rgb в OpenGL ES?
ответ
Я думаю, что в OpenGL ES невозможно отображать данные YUV без преобразования в RGB-данные.
Вы можете сделать это очень легко, используя шейдеры OpenGL ES 2.0. Я использую эту технику для своих super-fast iOS camera app SnappyCam. Фрагментный шейдер выполнил бы матричное умножение, чтобы взять вас от YCbCr
(«YUV
») до RGB
. Вы можете использовать каждый канал {Y, Cb, Cr}
в отдельной текстуре GL_LUMINANCE
или комбинировать текстуры {Cb, Cr}
вместе с использованием текстуры GL_LUMINANCE_ALPHA
, если ваши данные цветности уже чередуются (Apple называет это двухпланарным форматом).
См. Мой ответ на вопрос YUV to RGBA on Apple A4, should I use shaders or NEON? здесь, на StackOverflow.
Вы также можете сделать это, используя фиксированный конвейер рендеринга ES 1.1, но я его не пробовал. Я бы посмотрел на функции смешивания текстур, например. given in this OpenGL Texture Combiners Wiki Page.
Вы ищете решение для приложения IOS, iPhone, тогда есть решение для этого.
Это способ преобразовать CMSampleBufferRef в UIImage когда тип видео пиксель устанавливается как kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
-(UIImage *) imageFromSamplePlanerPixelBuffer:(CMSampleBufferRef) sampleBuffer{
@autoreleasepool {
// Get a CMSampleBuffer's Core Video image buffer for the media data
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
// Lock the base address of the pixel buffer
CVPixelBufferLockBaseAddress(imageBuffer, 0);
// Get the number of bytes per row for the plane pixel buffer
void *baseAddress = CVPixelBufferGetBaseAddressOfPlane(imageBuffer, 0);
// Get the number of bytes per row for the plane pixel buffer
size_t bytesPerRow = CVPixelBufferGetBytesPerRowOfPlane(imageBuffer,0);
// Get the pixel buffer width and height
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
// Create a device-dependent gray color space
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
// Create a bitmap graphics context with the sample buffer data
CGContextRef context = CGBitmapContextCreate(baseAddress, width, height, 8,
bytesPerRow, colorSpace, kCGImageAlphaNone);
// Create a Quartz image from the pixel data in the bitmap graphics context
CGImageRef quartzImage = CGBitmapContextCreateImage(context);
// Unlock the pixel buffer
CVPixelBufferUnlockBaseAddress(imageBuffer,0);
// Free up the context and color space
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
// Create an image object from the Quartz image
UIImage *image = [UIImage imageWithCGImage:quartzImage];
// Release the Quartz image
CGImageRelease(quartzImage);
return (image);
}
}
Если вы ищете для мобильных устройств, то я могу предоставить другим в.
- 1. Использование opengl es shader для преобразования YUV в RGB
- 2. Android opengl es YUV to RGB преобразование с использованием шейдеров
- 3. Ошибка преобразования YUV в RGB
- 4. Как рисовать yuv-буфер, используя opengl es в Android
- 5. Нет преобразования из RGB в YUV
- 6. Как бороться с RGB для преобразования YUV
- 7. Android OpenGL ES process yuv Предварительный просмотр как RGBA
- 8. YUV в RGB на ассемблере
- 9. Векторные преобразования в OpenGL ES
- 10. Как оптимизировать код преобразования цвета YUV в RGB
- 11. Проблема преобразования arcball OpenGL ES
- 12. opengl es yuv to rgb conversion display только зеленый и розовый цвета
- 13. NSOpenGLContext + YUV to RGB Shader + Неверный Render
- 14. openGL ES 2.0 на Android, YUV на RGB и рендеринг с помощью ffMpeg
- 15. Обработка изображений-YUV до Rgb
- 16. Рендеринг формата YUV в android?
- 17. Javascript конвертировать YUV в RGB
- 18. RGB to YUV using shader
- 19. Шиндер OpenGL ES для рисования видеокадров
- 20. Как отобразить необработанный кадр YUV в программе OpenGL Cocoa
- 21. GPU YUV для RGB. Стоит усилий?
- 22. OpenGL ES 2.0 Алгоритмы преобразования вершин
- 23. Нужна помощь с отображением YUV в OpenGl
- 24. YUV в RGB в iOS5 с OpenGLES
- 25. преобразование формата
- 26. Исходное изображение при преобразовании RGB в YUV. Как исправить???
- 27. Как преобразовать NV21 YUV в RGB и обратно
- 28. OpenGL to OpenGL-ES - glBegin();
- 29. YUV to RGB шейдер границы артефакт
- 30. Как передать данные YUV в пиксельный шейдер без GL_LUMINANCE