At 2011-09-05 16:55, DRC wrote:


On Sep 5, 2011, at 6:21 AM, Csillag Kristof <[email protected] <mailto:[email protected]>> wrote:

Hi,

I am still evaluating TurboVNC and TigerVNC for a project.
There are a few special requirements, and I would like to ask you
whether I can fulfill them with these tools.

1. I need a way to  influence the compression settings and/or to request
a lossless refresh from the X client (application) side. I understand
that this is not easy with the current architecture, because connection
settings are stored on a per-client basis, however, in our case, tI am
willink here is always exactly one client. I understand that currently,
this is not supported, but I am willing to implement it, if possible.
What I would need to know (for now) is this:  which component, and which
layer is making the decisions about the currently used compression? If
it's the server-side, then I can add the framework to control this from
the X client (the actual application). If it's decided on the client
side, can the server-side influence this somehow

Theoretically, if you were willing to force the same compression settings upon all clients,
We will have only one client, so that's not a problem.
then it might be possible to extend the VNC X11 extension with an additional function that allows for setting the compression parameters.
OK, we might try to do that later.

However, the problem is that the compression parameters are very specific to the type of encoding being used. You couldn't, for instance, force a client to receive JPEG, because you have no idea whether the client even supports Tight encoding.
We can assure that all clients are using the latest version of turbovnc / tightvnc client.

Perhaps if you explain more about why you want to do this, we can propose a cleaner solution.
We are required to configure the compression level according to some central policies, dictated by other requirements. There are situations when we absolutely need to do lossless encoding (whatever the performance is), and in other cases, we would like to configure the lossy compression level according to some external bandwidth usage policies.

This all must be handled on the server side, in a centralized manner. (And run-time changes are required, too, because the type of content to transfer might change; some needs lossless quality, and some can do with lossy, so we must be able to change it, from the application side.)

2. I need a way to guarantee that a given drawing operation (XPutImage)
is represented on the client side, before continuing to draw something
over it. Completion should not be signaled until the client has actually
received the data. (Again, we have only one client, so no need to worry
about several components.) How difficult would it be to implement this?

This is implemented in the TurboVNC CVS head by using an undocumented extension to RFB called "continuous updates."
Great.

It still needs some tweaking, however. We are still discussing how best to make TigerVNC do something similar. To be clear, with CU, the XPutImage() calls become "effectively" synchronous, but there is still no way to truly guarantee that the client has received the data before returning.
OK, so what is it that we _can_ guarantee? What is the XPutImage synchronized to, then?

Again, what are you trying to accomplish? Maybe there's a better way.
We need to assure that every single frame the application draws reaches the client. We need to "slow down" the server to wait for everything to reach the client. The client must see every single frame, so that we can be sure that the viewer does not miss anything that turns up on a frame, but disappears on the next. (It's a medical application, so it's imperative that this is strictly enforced.)



3. We are going to transfer multi-megapixel images with a high
frame-rate. What do we need to do to enable multi-thread jpeg
compression with libjpeg-turbo?

TurboVNC does multi-threaded compression.
Is this implemented in the libjepg-turbo codec, all hidden behind the the standard libjpeg API? Do we need to do something to configure/enable this, or is this on automatically?


However, multi-threaded decompression is not yet implemented-- basically, the company that was sponsoring the improvement backed out before I could finish it.
That's a pity.
Multi-threading the compressor is of only limited usefulness without multi-threading the decompressor as well.
Sure, but still, the server side tends to have more cores than the client side, so it's still a gain..

We are still discussing how best to implement multithreading In TigerVNC.
So is there a need to support this on the tigervnc/turbovnc level, too? Can not the jpeg codec handle this properly on it's own?

Thank you for your help:

    Kristof

------------------------------------------------------------------------------
Special Offer -- Download ArcSight Logger for FREE!
Finally, a world-class log management solution at an even better 
price-free! And you'll get a free "Love Thy Logs" t-shirt when you
download Logger. Secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsisghtdev2dev
_______________________________________________
Tigervnc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tigervnc-users

Reply via email to