mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-11-03 16:32:22 +00:00
O FrameRaw guardava apenas o ponteiro do ByteBuffer do Image recebido via JNI. O Kotlin fecha o Image logo após onVideoFrameUpdate, devolvendo o buffer ao ImageReader; quando a thread de vídeo chamava take(), o SurfaceFlinger já podia estar desenhando o quadro seguinte no mesmo buffer, gerando regiões pretas/parciais na imagem remota em qualquer codec (visível em Android x86, ex.: Bliss OS 13 em Intel UHD). Agora update() copia o quadro para um buffer próprio enquanto o Image ainda é válido, e take() copia desse buffer. O áudio usa a mesma estrutura e passa a ter a mesma garantia.