Tôi đang cố gắng đọc pixel/dữ liệu từ kết cấu OpenGL bị ràng buộc với GL_TEXTURE_EXTERNAL_OES.pixel đọc trên Android từ GL_TEXTURE_EXTERNAL_OES
Lý do gắn kết kết cấu với mục tiêu đó là vì để có được nguồn cấp dữ liệu máy ảnh trực tiếp trên android, SurfaceTexture cần phải được tạo từ kết cấu OpenGL bị ràng buộc với GL_TEXTURE_EXTERNAL_OES.
Vì Android sử dụng OpenGL ES, tôi không thể sử dụng glGetTexImage() để đọc dữ liệu hình ảnh.
Vì vậy, tôi ràng buộc mục tiêu với FBO và sau đó đọc nó bằng cách sử dụng readPixels(). Đây là mã của tôi:
GLuint framebuffer;
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
//Attach 2D texture to this FBO
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_EXTERNAL_OES, cameraTexture, 0);
status("glFramebufferTexture2D() returned error %d", glGetError());
Tuy nhiên tôi nhận được lỗi 1282 (GL_INVALID_OPERATION) vì một lý do nào đó.
Đây không phải là chính xác. Trên Android, chuyển đổi YUV-> RGB diễn ra tự động sau hậu trường. Xem https://stackoverflow.com/questions/46244179/android-mediacodec-output-format-gles-external-texture-yuv-nv12-to-gles-tex – tmm1