Build voxl-uvc-server with voxl-cross
-
@Philemon-Benner You can build a 64 bit version of libuvc with the dev branch on our libuvc project: https://gitlab.com/voxl-public/third-party/libuvc/-/tree/dev. Use the instructions to build for qrb5165 and it will produce 64 bit versions.
-
@Eric-Katzfey Do i have to use the qrb-emulator for that or can i do it in voxl-emulator?
-
@Eric-Katzfey tried that getting the following errors:
/usr/lib/gcc-cross/aarch64-linux-gnu/4.9/../../../../aarch64-linux-gnu/bin/ld: warning: libusb-1.0.so.0, needed by /usr/lib/../lib/libuvc.so, not found (try using -rpath or -rpath-link) /usr/lib/gcc-cross/aarch64-linux-gnu/4.9/../../../../aarch64-linux-gnu/bin/ld: warning: libjpeg.so.8, needed by /usr/lib/../lib/libuvc.so, not found (try using -rpath or -rpath-link)
when trying to build in tflite-server. I Built libuvc in qr-emulator. Installed the deb file in tflite-server without errors.
-
@Philemon-Benner In voxl-cross?
-
yeah i think i need to install libusb and libjpeg but wich exact verisions?
-
@Philemon-Benner Now you are starting to see the problem with voxl-cross. It is a much faster way to compile code but for projects that have more complex dependencies it can be a real pain to get them setup. That is why some projects use voxl-emulator. It's much easier to setup dependencies there.
-
@Eric-Katzfey yeah i see
-
Ok so i finally got it working if someone ever needs it, with installing:
sudo apt-get update sudo apt-get install libusb-1.0-0:arm64 sudo apt-get install libjpeg-turbo8:arm64
For other third part libraries add the :arm64 architecture when building with 820, because in voxl-cross it will install amd64 by default. Still wondering what 820 exactly is
Thanks @Eric-Katzfey for the suggestion on the 64-Bit deb package.
-
@Philemon-Benner 820 refers to the Qualcomm Snapdragon 820 SoC that is the heart of the Voxl product. https://www.qualcomm.com/products/snapdragon-820-mobile-platform
-
@Eric-Katzfey Ok i ran into the next problem when trying to run tflite-server.
voxl:~/tflite-server(master)$ voxl-tflite-server -t -d voxl-tflite-server: error while loading shared libraries: libuvc.so.0: cannot open shared object file: No such file or directory
Tried to install the 64-Bit BInary file but it's throwing the following error:
voxl:~/tflite-server(master)$ opkg install libuvc_1.0.3.deb Collected errors: * pkg_extract_control_file_to_stream: Failed to extract control.tar.gz from package 'libuvc_1.0.3.deb'. * pkg_init_from_file: Failed to extract control file from libuvc_1.0.3.deb.
So i tried using this from ur code:
voxl:~/tflite-server(master)$ dpkg -i --force-downgrade --force-depends /data/libuvc_1.0.3.deb -bash: dpkg: command not found
Normal installation from modalai dev branch still throws the same error after installation:
opkg install libuvc
Any suggestions?
-
@Philemon-Benner You can only install a Debian package with dpkg, which we have on our qrb5165 based platform, but not on our 820 based Voxl. That only has opkg and you need ipk packages, not debian packages.
-
This post is deleted! -
@Eric-Katzfey Ok so i got working now but i am having issues with the Format. So when using UVC Server i got the response that frame format succeed on index 2. In your voxl-uvc-server code at the Top Frame Format 2 should be:
static enum uvc_frame_format supported_frame_format[NUM_SUPPORTED_FRAME_FORMATS] = {UVC_FRAME_FORMAT_YUYV, UVC_FRAME_FORMAT_UYVY, UVC_FRAME_FORMAT_NV12}; static int supported_mpa_frame_format[NUM_SUPPORTED_FRAME_FORMATS] = {IMAGE_FORMAT_YUV422, IMAGE_FORMAT_YUV422_UYVY, IMAGE_FORMAT_NV12};
supported mpa_frame_format = IMAGE_FORMAT_NV12 = 1 // regarding to https://gitlab.com/voxl-public/modal-pipe-architecture/libmodal_pipe/-/blob/master/library/include/modal_pipe_interfaces.h
frame_format supported_frame_format = FRAME_FORMAT_NV12 = 17But still i am getting a real weird looking image(wrong colors) voxl-portal. Are the Configurations right that i use, or is it something else? Can't upload any pictures rn becuase of some server error.
-
Ok so apparrently the Frame format stuff is alright when directly writing the frame from the callback to the pipe server. I think it's some fault in the code. One Question why are you using c instead of c++? I'm not an expert at c/c++ stuff but i was told that c++ is generally faster than c.
-
Ok i got it working now.
@Eric-Katzfey i don't know anything of the qrb thing but in the dev libuvc branch, if you build it in 64-Bit version, why is it then copied in the 32-Bit dir in your make_package.sh L:87-89:sudo mkdir -p $DATA_DIR/usr/lib sudo cp build/libuvc.so.0.0.6 $DATA_DIR/usr/lib sudo cp build/libuvc.a $DATA_DIR/usr/lib
an if else would be nice.
sudo mkdir -p $DATA_DIR/usr/lib64 sudo cp build/libuvc.so.0.0.6 $DATA_DIR/usr/lib64 sudo cp build/libuvc.a $DATA_DIR/usr/lib64
also had to add:
sudo cp /usr/lib/aarch64-linux-gnu/libjpeg.so.8 $DATA_DIR/usr/lib64 sudo cp /usr/lib/aarch64-linux-gnu/libjpeg.so.8.1.2 $DATA_DIR/usr/lib64
to make it work on voxl because voxl doesn't have it installed by default.
-
@Philemon-Benner I'm not sure where those lines of code came from. The file make_package.sh in the dev branch has this for lines 87-89:
sudo mkdir -p $DATA_DIR/usr/lib sudo cp $BUILD_TYPE/libuvc.so.0.0.6 $DATA_DIR/usr/lib sudo cp $BUILD_TYPE/libuvc.a $DATA_DIR/usr/lib
Where BUILD_TYPE will be either build32 or build64. It looks like you are taking from lines 65-66 on the master branch.
-
@Eric-Katzfey yeah that was mb it's the one from the dev branch, but still even if i'ts 64-Bit, files are copied to 32-Bit lib:
sudo mkdir -p $DATA_DIR/usr/lib
instead of:
sudo mkdir -p $DATA_DIR/usr/lib64
for 64-Bit. Correct me if i'm wrong.
-
@Philemon-Benner Our qrb5165 based platforms put 64 bit libraries into /usr/lib. On Voxl the 64 bit libraries go into /usr/lib64. So the 64 bit support is specifically for our qrb5165 based platforms (e.g. RB5 Flight).