« Frame Buffer » : différence entre les versions

De knowledge
Aller à la navigation Aller à la recherche
mAucun résumé des modifications
mAucun résumé des modifications
Ligne 48 : Ligne 48 :
dd if=/dev/fb0 of=capture.raw bs=4M iflag=fullblock status=progress
dd if=/dev/fb0 of=capture.raw bs=4M iflag=fullblock status=progress
ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt rgb565 -s 1920x1080 -i capture.raw -f image2 -vcodec png capture.png
ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt rgb565 -s 1920x1080 -i capture.raw -f image2 -vcodec png capture.png
</syntaxhighlight>[[Fichier:Snapshot.png|sans_cadre|526x526px]]
</syntaxhighlight>[[Fichier:Snapshot.png|sans_cadre|703x703px]]

Version du 10 mai 2025 à 18:28

Le mode frame buffer est un intermédiaire entre le mode texte (léger, rapide) et X Windows (riche mais moins performant).

Le principe est d'utiliser le RAM vidéo au travers d'un device /dev/fb0 et suivants si plusieurs écrans.

Introduction

Exemple

Pour commencer un exemple : Afficher des valeurs aléatoires.

cp /dev/random /dev/fb0

Affiche une page avec... du bruit. Oui comme la TV analogique d'autre fois.

Bruit.png

Bon on a le concept maintenant allons plus loin.

Les caractéristiques de l'écran

Sur le Raspberry PI la résolution d'écran est le résultat d'une négociation entre l'écran et le PI (sauf si la résolution est fixée en dur).

La commande fbset nous donne plein d'informations.

$ fbset

mode "1920x1080"
    geometry 1920 1080 1920 1080 16
    timings 0 0 0 0 0 0 0
    accel true
    rgba 5/11,6/5,5/0,0/0
endmode

Dans mon cas le on a:

  • 1920 pixels sur 1080 (c'est une TV "Full HD")
  • La profondeur est de 16 bits
  • L'accélérateur graphique est à "on"
  • la rescription des 16 bits de couleur est donnée dans la dernière ligne :
    • rgba signifie que les bits sont donnés dans l'ordre rouge puis vert puis bleu et enfin la transparence.
    • le rouge est codé sur 5 bits (les 11 suivants restent pour le reste)
    • le vert est codé sur 6 bits (les 5 suivants restent)
    • le bleu est codé sur 5 bits (il ne reste rien)
    • la transparence est codée sur... 0 bits.

Le format du pixel est dit : RGB565.

Copie d'écran

Une des premières choses que l'on peut faire c'est copier l'écran dans un fichier.

# Solution simple
cp /dev/random /dev/fb0
# Solution compliquée
dd if=/dev/fb0 of=capture.raw bs=4M iflag=fullblock status=progress
ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt rgb565 -s 1920x1080 -i capture.raw -f image2 -vcodec png capture.png

Snapshot.png