Problem with too many full frame updates at start

Developers may discuss here.

Problem with too many full frame updates at start

Postby tobybuk » 2015-03-06 21:36

Hi all

I have an issue which is with UltraVnc that seems inexplicable:

I have written a specialised RFB client and it works well except for the initial screen update - I seem to be getting two full screen updates as opposed to an initial full screen and then just differences.

My client does the following:

1. Opens the socket and Negotiates 8 Bit, no auth and the following encodings: CopyRect, Hextile, RRE, Raw (The client and server are on the same machine - loopback enabled.)
2. The client then sends a RfbRequestFrameBufferUpdate for the full screen with incremental = false
3. Server sends a full screen as expected.
3. The client then sends a RfbRequestFrameBufferUpdate for the full screen with incremental = true
4. The server sends another full screen - obviously unnecessary.
5. Further RfbRequestFrameBufferUpdate results in just the changed regions.

I've tried debugging the server but it looks like it will take a heavy time investment to get into what its really doing. If someone could shed some light on this I'd be very grateful.

I'd be happy to supply debug or PCAP traces.

Many thanks

Toby


Windows 7 SP1
NO mirror driver or hooks.
UltraVnc 1.2.0.5
tobybuk
 
Posts: 1
Joined: 2015-03-06 21:02

Re: Problem with too many full frame updates at start

Postby Rudi De Vos » 2015-03-08 16:33

under investigation
Rudi De Vos
Admin & Developer
Admin & Developer
 
Posts: 5370
Joined: 2004-04-23 10:21

Re: Problem with too many full frame updates at start

Postby stefano2015 » 2015-03-19 10:29

I had same problem. It is still unsolved.
stefano2015
 
Posts: 1
Joined: 2015-03-19 10:28

Re: Problem with too many full frame updates at start

Postby Rudi De Vos » 2015-03-22 20:54

This wil be fixed in next release

vncdesktopthread.cpp

Code: Select all
//BOOL screensize_changed=false;
            BOOL monitor_changed=true;
            rfbServerInitMsg oldscrinfo;


Code: Select all
//BOOL screensize_changed=false;
            BOOL monitor_changed=false;
            BOOL initial_run = false;
            if (m_desktop->m_old_monitor == 6) initial_run = true;
            rfbServerInitMsg oldscrinfo;


Code: Select all
               m_desktop->m_buffer.BlackBack();


               }
               m_desktop->m_buffer.ClearCache();
               m_desktop->m_buffer.BlackBack();
               InvalidateRect(NULL,NULL,TRUE);

Code: Select all
m_desktop->m_buffer.BlackBack();


               }
               if (!initial_run)
               {
                  initial_run = false;
                  m_desktop->m_buffer.ClearCache();
                  m_desktop->m_buffer.BlackBack();
               }
               InvalidateRect(NULL,NULL,TRUE);
Rudi De Vos
Admin & Developer
Admin & Developer
 
Posts: 5370
Joined: 2004-04-23 10:21


Return to Developer discussions (mainly user-mode)

Who is online

Users browsing this forum: No registered users and 1 guest

cron