Here is my code. It could create a framebuffer from Ahardwarebuffer.
graphicbufferChannels = channels;
usage.height = height;
usage.width = width;
usage.layers = 1;
usage.rfu0 = 0;
usage.rfu1 = 0;
usage.stride = width;
usage.usage = AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN | AHARDWAREBUFFER_USAGE_CPU_WRITE_NEVER
| AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT;
AHardwareBuffer* graphicBuf;
int ret = AHardwareBuffer_allocate(&usage, &graphicBuf); // it's worth to check the return code
graphicBuffer = graphicBuf;
EGLClientBuffer clientBuf = eglGetNativeClientBufferANDROID(graphicBuf);
EGLint eglImageAttributes[] = {EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE};
imageEGL = eglCreateImageKHR(disp, EGL_NO_CONTEXT, EGL_NATIVE_BUFFER_ANDROID, clientBuf, eglImageAttributes);
//then create
I wonder if there any way to create ImageKHR from sub region of AHardwareBuffer? Like above graphic buffer is width* height. Can I create use its region like (0, 0, width/4, height/4) as render canvas?