Hi,

the guest may access the guest VRAM between NotifyUpdate calls.
Which means that in principle the guest can change the content while the frontend thread is reading pixels.

Actually I wonder why this worked for your in VBox 4.3 because if the 4.3 framebuffer implementation
used the guest VRAM directly, then it was the same case as in 5.0.
Do you remember whether the 4.3 framebuffer implementation allocated the memory and did not use VRAM directly? In this case you simply had the additional buffer, VRAM content was copied to it. The same can be implemented by the frontend in 5.0. I.e. NotifyUpdate copies data to an intermediate buffer, which is encoded.

Thanks,
Vitali.

Rūdolfs Bundulis wrote:
Hi Vitali,

thank you for replying to this since this issue really does bother me. We are processing them in a different thread - we used to do that directly in the callback, but if the updates are frequent we cannot achieve a normalized frame rate for the encoded video stream of the desktop (and also we start to slow down the machine - running RGB to NV12 conversions for a 9600x5400 screen take some time, and if more than a single update occurs between two frames with a given rate there is not much sense running the conversion twice). Now we simply push the corrdinates from NotifyUpdate in a list, which is processed from another thread based on a timer which gives us normalized encoding times.

So with such a scenario in mind - any ideas? :)

2016-05-19 21:56 GMT+03:00 Vitali Pelenjow <vitali.pelen...@oracle.com <mailto:vitali.pelen...@oracle.com>>:

    Hi Rudolfs,

    how the custom frontend reads pixels: directly in
    IFramebuffer::NotifyUpdate or from a different thread?
    If pixels are read in IFramebuffer::NotifyUpdate, then technically
    it should be ok, i.e. AFAIK the framebuffer
    it not changed at the time.

    Thanks,
    Vitali.

    Rūdolfs Bundulis wrote:

        Hi,

        after transferring my custom frontend code to VirtualBox 5 I
        started to notice small artifacts in the video stream - I
        assume since there are no more Lock() and Unlock() methods I
        may be reading the pixels while another update is actually in
        progress. Is there any mechanism to implement a syncrhonized
        access to the framebuffer (using something internal from vbox
        dlls is fine for me, I am already dynamically loading them to
        enable OpenGL redirection).

        Best Regards,
        Rudolfs Bundulis


        _______________________________________________
        vbox-dev mailing list
        vbox-dev@virtualbox.org <mailto:vbox-dev@virtualbox.org>
        https://www.virtualbox.org/mailman/listinfo/vbox-dev





_______________________________________________
vbox-dev mailing list
vbox-dev@virtualbox.org
https://www.virtualbox.org/mailman/listinfo/vbox-dev

_______________________________________________
vbox-dev mailing list
vbox-dev@virtualbox.org
https://www.virtualbox.org/mailman/listinfo/vbox-dev

Reply via email to