Bonsoir à toutes et tous,
Je "m'amuse" à faire une sorte de VNC.
Je hook donc certains messages pour détecter les zones qui ont changé, et j'envoie ces changements de la façon la plus concise possible au PC controlleur. J'ai tenté de reproduire (relativement fidèlement je crois) le protocole RFB. Je ne détaille donc pas.
Ceci dit, je suis loin d'etre aussi performant qu'un VNC comme UltraVNC par exemple. Je cherche donc à optimiser cela. Et donc j'épluche le code d'UltraVNC, même si je ne suis pas particulièrement famillier avec le C++
Lorsqu'UltraVNC reçoit une zone à mettre à jour, au lieu de l'envoyer lorsque cela est demandé, il me semble qu'une optimisation est faite pour n'envoyer que les (sous-)zones qui ont réellement changé.
Le principe ok. Maintenant, la facon de s'y prendre, l'algo, je ne le saisis pas. Il me semble que c'est la fonction "FastDetectChanges" dans "vncdesktop.cpp". Je n'en comprends pas le principe : certes on découpe la zone en blocs de 32x32 pixels, mais que viennent faire là les histoires de "shifting", ces décalages (4 pixels je crois) répétés ?
Est-ce que quelqu'un(e) est assez calé(e) "en VNC" pour m'expliquer comment doit fonctionner cet algo (sur le principe, après le codage je me débrouille). Je suis aussi preneur de toute suggestion éclairée.
Merci d'avance.
Partager