您好!
在 Vision SDK 版本中:2.8、
输入格式为 YUV420、像素为全范围(0~255)、我们需要使用 GPU OpenGL API System_eglSetupYuvTexSurface、 预期输出为全范围(0~255)的 RGB 格式像素。
这意味着: 当 YUV 切换到 RGB 时,范围被剪切。
我们通过以下方式进行检查:
在函数将 YUV 图像包装为 GL_纹 理_external_OES 格式的外部纹理后、
纹理采样器采样的颜色异常。
输入值大于235的通道在采样后被采样到255、而值小于15的通道被削波到0。
功能如下所示:
{
EGLint 属性[32];
int attrIdx;
PFNEGLCREATEIMAGEKHRPROC eglCreateImageKHR;
PFNGLEGLIMAGETTEXURE2DOESPROC glEGLImageTargetTexture2DOES;
ATTR[attrIdx+]= FourCC_STR ("NV12");
attr[attrIdx++]= pProp->width;
attr[attrIdx++]= pProp->高度;
attr[attrIdx++]= pProp->piting[0];
if (pProp->dataForm=system_DF_YUV420SP_UV)
{
ATTR[attrIdx+]=(pProp->pitch[0]* pProp->height * 3)/2;
}
其他
{
INFO (" EGL:错误:不支持的数据格式(%d)!!!\n"、pProp->dataFormat);
断言(0);
}
ATTR[attrIdx+]= EGLIMAGE_FLAGS_YUV_ENTIATE_RANGE | EGLIMAGE_FLAGS_YUV_BT601;
eglCreateImageKHR =
(PFNEGLCREATEIMAGEKHRPROC) eglGetProAddress("eglCreateImageKHR");
glEGLImageTargetText2DOES =
(PFNGLEGLIMAGETRGETTEXURE2DOESPROC) eglGetProcAddress ("glEGLImageTargetTexture2DOES");
pObj->display、
EGL_NO_Context、
EGL_RAW_VIDEO_TI、
bufAddr、
属性
);
if (pObj->teximg[Texindex]== EGL_NO_IMAGE_KHR){
INFO (" EGL:错误:eglCreateImageKHR 失败!!!\n");
返回-1;
}
System_eglCheckGlError ("eglCreateImageKHR");
System_eglCheckGlError ("glBindTexture");
GlTextParameteri (GL_turete_external_OES、GL_turete_mag_filter、GL_linear);
System_eglCheckGlError ("glTexParameteri");
System_eglCheckGlError ("glEGLImageTargetTexture2DOES");
}
谢谢