(recommended): Use ExoPlayer with TextureView and a custom GLSL shader applied via SurfaceTexture.OnFrameAvailableListener . However, that causes double buffering. Better: implement VideoFrameProcessor from Media3’s effect module (Android 12+).
The "Must Have" Utility
If you want, I can:

Tiny Size: One square inch, easy to embed to devices.
OpenWrt: Easy to code; super stable, three years no reboot.
Low Cost: low cost, less than 1watt, unmatched performance.
Interfaces: Hardware support USB, Ethernet, SD, I2C, SPI etc.
OpenSource: Both software and hardware, totally FREE
Long Life: Keep production over 10 years, fast email support.
(recommended): Use ExoPlayer with TextureView and a custom GLSL shader applied via SurfaceTexture.OnFrameAvailableListener . However, that causes double buffering. Better: implement VideoFrameProcessor from Media3’s effect module (Android 12+).
The "Must Have" Utility
If you want, I can: