I've created an ARCore Session and attached an OpenGL texture id through the Session#setCameraTextureName method to display my camera data. I'd like to have access to the camera image data bytes displayed on the texture.
ARKit and Tango provide access to the image bytes for each frame but there doesn't seem to be anything that easily provides that in the ARCore API.
Is there any other way I can access the image bytes when using ARCore?
For the time being, your best bet for accessing image data is probably drawing the texture to a renderbuffer and using glReadPixels into a persistent-mapped pixel unpack buffer. Use a fence sync to detect when the glReadPixels is complete.
Another option is to use a compute shader and write directly to a
persistent-mappedSSBO. (Disregard persistent-mapped suggestion. I thoughtEXT_buffer_storage
had broader support)The later is possibly fewer copies (the renderbuffer pixels may still hit DRAM even if you invalidate it after the glReadPixels), but it's also a less-common code path and incurs render/compute changeovers so I don't have intuition about which approach would be more efficient.
Maybe that could help you I wanted to obtain the camera view in a bitmap form. I have tested on Samsung s8.
As of ARCore v1.1.0, there is an API to access the image bytes for the current frame:
https://developers.google.com/ar/reference/java/com/google/ar/core/Frame.html#acquireCameraImage()