[vbox-dev] queryBitmapInfo in Java API returns no image address

Klaus Espenlaub klaus.espenlaub at oracle.com
Mon Jul 2 11:46:57 GMT 2018


Hi Norbert,

On 01.07.2018 23:29, Szatmári Norbert Péter wrote:
> Hello,
> I'm developing a Java frontend for VirtualBox machines and I managed
> to set it up to launch the machine inside the process and attach my
> framebuffer to it. It's receiving changes and updates, queryBitmapInfo
> returns all information correctly, except for the address out parameter.
>
> The array I'm using to hold the value is large enough for the whole
> screen but all of the values in the array remain 0, even after the
> machine has booted up and is running the guest OS. VirtualBox also
> seems to freeze for some seconds while the machine is running inside
> my application.
> (I'm also running my program as root as I was unable to set the setuid
> bit up correctly, but I don't have any issues running VBox as root, so
> I don't think it's related.)
>
> How can I receive images from the machine in Java?

Right now? You don't. JXPCOM simply can't deal with such parameters.
Possibly fixable, didn't investigate if there are technical issues with
implementing "out" parameters of type "byte ptr". The code for handling
the various 'out' parameter passing cases is in
src/libs/xpcom18a4/java/src/nsJavaWrapper.cpp, function FinalizeParams
(which is called from Java through the JNI function callXPCOMMethod in
the same file). The 'in' case is in SetupParams.

Apparently so far no one needed to call methods with pointer parameters.

Klaus

> VirtualBox version: 5.2.12 r122591 (Qt5.9.5)
> VBox API: Java XPCOM 5.2
> OS: Ubuntu 18.04 x64, Java 8
>
> My code in notifyChange:
>
>     |display.querySourceBitmap(0L, holder);
>     byte[] arr = bb.array(); //640 * 480 * 4 bytes backing a ByteBuffer
>     long[] w = new long[1], h = new long[1], bpp = new long[1], bpl =
>     new long[1], pf = new long[1];
>     holder.value.getTypedWrapped().queryBitmapInfo(arr, w, h, bpp,
>     bpl, pf);
>     System.out.println("Arr0:" + arr[0]); //Returns 0
>     System.out.println("whbppbplpf: " + w[0] + " " + h[0] + " " +
>     bpp[0] + " " + bpl[0] + " " + pf[0]); //Returns correct values
>     |
>
> Regards,
> Norbert
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.virtualbox.org/pipermail/vbox-dev/attachments/20180702/560ed245/attachment.html>


More information about the vbox-dev mailing list