2014-02-27 2 views
1

기계는 프리 스케일 iMX53, 내 프로그램은이 같은 호출로 많은 이미지를 생성한다 할당 된 이미지 :비 전력은

eglQueryImageFSL(egl_display, img, EGL_CLIENTBUFFER_TYPE_FSL, (EGLint *)&info); 

iMX53은 EGL 1.4 및 OpenGL ES 2.0을 실행합니다. eglCreateImageKHR (...)이 32의 배수로 이미지 너비를 할당 할 수 있다는 것은 나에게 (보폭 값을 조사함으로써) 내 경우에는 절대적으로 나빠진 것처럼 보입니다. 불행히도 glTexImage2D와 친구들은 성능 저하로 인해 사용할 수 없습니다.

어떻게 든 eglCreateImageKHR (...)을 사용하여 32 바이트 배수를 사용하지 않거나 4/8/16 바이트를 사용하도록 할 수 있습니까? 16 바이트 정렬로도 충분할 것입니다. 나는 Android 2.6.35.4 커널과 OpenGL ES/EGL 라이브러리를 사용하고 있지 않다.

답변

1

프리 스케일 iMX53에서 구현 한 것을 보면 옳은 것입니다. eglCreateImageKHR()은 텍스쳐 크기가 적어도 32 픽셀 (바이트가 아님)의 배수가되어야합니다. 사실, 내 코드는 최대 64의 배수로 폭을 반올림합니다.

저는 이것이 GPU 인 AMD Z430의 요구 사항이라고 생각합니다. 내 솔루션은 1920 x 1088의 최악의 경우 크기를 한 번 할당하고 EGL이 크기 조정을 허용하지 않기 때문에 모든 비디오 형식에 대해 이러한 질감을 사용했습니다. 다음과 같이 더 작은 형식을 보정하려면 텍스처 좌표를 사용하십시오.

static GLfloat gafTexCoords[] = 
{ 
    0.0f, 1.0f, 
    1.0f, 1.0f, 
    1.0f, 0.0f, 
    0.0f, 0.0f 
}; 

iTextureWidth = (iOriginalTextureWidth + 63) & ~63; 
iTextureHeight = (iOriginalTextureHeight + 31) & ~31; 

gafTexCoords[2] = gafTexCoords[4] = (GLfloat)iOriginalTextureWidth/(GLfloat)iTextureWidth; 
gafTexCoords[1] = gafTexCoords[3] = (GLfloat)iOriginalTextureHeight/(GLfloat)iTextureHeight; 
+0

감사합니다. 맞습니다, 우리는 바이트가 아닌 픽셀에 대해 이야기하고 있습니다. 실제 문제는 생성 된 비디오 프레임의 스케일링이 아닙니다 (괜찮습니다). VPU 출력은 스트라이드 크기로 32 바이트의 배수가 아니 어서 텍스쳐링 후 "쓰레기"로 표시됩니다. 그러나 VPU에 정확한 보폭을 줄 수 있다는 것을 알았습니다. 그래서 지금은 이것을 실험하고 있습니다 (실제로 Y 구성 요소가 바로 표시됩니다). – tselmeci