Objetivo : Estou escrevendo um visualizador de imagens muito simples para framebuffer /dev/fb0
(algo como fbi ).
Estado atual:
- Meu software obtém a resolução de pixel de
/sys/class/graphics/fb0/virtual_size
(como1920,1080
). - E então (para cada linha) ele gravará 4 bytes (BGRA) para cada 1920 pixels de linha (total 4x1920 = 7680 bytes) para
/dev/fb0
. Isso funciona perfeitamente bem no meu laptop com resolução de 1920 x 1080. - Mais precisamente: definir um pixel em
y
-rowx
-col =>arr[y * 1920 * 4 + x * 4 + channel]
onde o valorchannel
é0,1,2,3
(paraB
,G
,R
eA
, respectivamente).
Problema :
Quando tento o mesmo software em meu laptop antigo com ( /sys/.../virtual_size
-> 1366,768
resolução), a imagem não é exibida corretamente (um pouco distorcida). Então eu brinquei com o valor da largura do pixel e descobri que o valor era 1376 (não 1366).
Perguntas :
- De onde vêm esses 10 bytes extras?
- E como posso obter esse valor de 10 bytes extras em máquinas diferentes (automaticamente, não ajustando manualmente)?
- Por que algumas máquinas precisam desses 10 bytes extras, quando outras não precisam?