Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conflict between JavaCV 1.5.7-snapshot and Depthai-2.13.3-1.5.7-snapshot #1118

Closed
wureka opened this issue Jan 10, 2022 · 33 comments
Closed

Comments

@wureka
Copy link
Contributor

wureka commented Jan 10, 2022

Environment:

  • OS: Zorin OS 16 Pro (based on Ubuntu 20.04 LTS 64bit)
  • JDK: GraalVM 21.3.0-R11
  • Javacpp-presets: 1.5.7-snapshot
    • depthai: 2.13.3
    • opencv: 4.5.5
    • openblas: 0.3.19
  • JavaCV: 1.5.7-snapshot

Test code:

It seems that JavaCV has something conflicts with Depthai in this version. But this did not happen in the old version (JavaCV 1.5.5 vs Depthai 2.5.x, 2.6.x)

If I use imshow of opencv to show the grabbed images from OAK-D camera, everything is fine.

However, if I use CanvasFrame of JavaCV to show the grabbed image, below errors will happen:

MX ID:14442C102176E1D200
Check point 00001----------------
Detect org.bytedeco.javacpp.IntPointer[address=0x7f5245d36ab0,position=0,limit=3,capacity=3,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7f5245d36ab0,deallocatorAddress=0x7f505f98e3c0]] camera(s) 
Check point 00002----------------
USB speed: SUPER 
Check point 00003----------------
    Camera 0 is ready!
    Camera 1 is ready!
    Camera 2 is ready!
Check point 00004----------------
Initialize JavaCV converter
Initialize JavaCV CanvasFrame
Stack trace (most recent call last) in thread 19662:
#0    Object "[0x7f52311d5595]", at 0x7f52311d5595, in 
Segmentation fault (Address not mapped to object [0x8])

The above error happens on below line (line 73 in Demo.java in test code):

videoCanvas = new CanvasFrame("Preview", 1.0);

If test only JavaCV without involving depthai, JavaCV works fine.

    public static void main(String[] args) throws Exception {
        // demoJavaCv();             // uncomment this line will test JavaCV only.
        demoDepthaiRgbPreview();
    }
@saudet
Copy link
Member

saudet commented Jan 11, 2022 via email

@saudet
Copy link
Member

saudet commented Jan 11, 2022

Also, if you don't need to use Java 2D, I would recommend using JavaFX instead:
https://github.com/rladstaetter/javacv-webcam
And before you ask, it would be nice to have an "FXCanvasFrame", yes, contributions are welcome...

/cc @rladstaetter @johanvos

@saudet
Copy link
Member

saudet commented Jan 11, 2022

Moreover, DepthAI 2.14.0 has been released and the presets upgraded in commit 9dd400b, so you might want to try that as well.

@wureka
Copy link
Contributor Author

wureka commented Jan 11, 2022

Just tried DepthAI 2.14.0 and added below property to main function:

System.setProperty("sun.java2d.opengl", "false");
System.setProperty("sun.java2d.xrender", "false");

still not work.

@saudet
Copy link
Member

saudet commented Jan 11, 2022

Does it do anything different if you set the "org.bytedeco.javacpp.nopointergc" system property to "true"?

@saudet
Copy link
Member

saudet commented Jan 13, 2022

Also, try to set the "org.bytedeco.javacpp.logger.debug" system property to "true", and let me know what you get on the console. I might be able to see something going wrong there from that log.

@wureka
Copy link
Contributor Author

wureka commented Jan 13, 2022

OK. After I add System.setProperty("org.bytedeco.javacpp.logger.debug", "true");, below are the debug messages:

> Task :Demo.main()
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.javacpp.Loader
Debug: Loading /home/alexji/.javacpp/cache/javacpp-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/javacpp/linux-x86_64/libjnijavacpp.so
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.javacpp.Pointer
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading /home/alexji/.javacpp/cache/openblas-0.3.19-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/openblas/linux-x86_64/libgcc_s.so.1
Debug: Loading /home/alexji/.javacpp/cache/openblas-0.3.19-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/openblas/linux-x86_64/libquadmath.so.0
Debug: Loading /home/alexji/.javacpp/cache/openblas-0.3.19-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/openblas/linux-x86_64/libgfortran.so.5
Debug: Loading library gfortran
Debug: Failed to load for gfortran@.4: java.lang.UnsatisfiedLinkError: no gfortran in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library gfortran
Debug: Failed to load for gfortran@.3: java.lang.UnsatisfiedLinkError: no gfortran in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading /home/alexji/.javacpp/cache/openblas-0.3.19-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/openblas/linux-x86_64/libopenblas_nolapack.so.0
Debug: Loading /home/alexji/.javacpp/cache/openblas-0.3.19-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/openblas/linux-x86_64/libjniopenblas_nolapack.so
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading /home/alexji/.javacpp/cache/openblas-0.3.19-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/openblas/linux-x86_64/libopenblas.so.0
Debug: Loading /home/alexji/.javacpp/cache/openblas-0.3.19-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/openblas/linux-x86_64/libjniopenblas.so
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading library cudart
Debug: Failed to load for cudart@.11.0: java.lang.UnsatisfiedLinkError: no cudart in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cublasLt
Debug: Failed to load for cublasLt@.11: java.lang.UnsatisfiedLinkError: no cublasLt in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cublas
Debug: Failed to load for cublas@.11: java.lang.UnsatisfiedLinkError: no cublas in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cufft
Debug: Failed to load for cufft@.10: java.lang.UnsatisfiedLinkError: no cufft in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cudnn
Debug: Failed to load for cudnn@.8: java.lang.UnsatisfiedLinkError: no cudnn in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppc
Debug: Failed to load for nppc@.11: java.lang.UnsatisfiedLinkError: no nppc in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppial
Debug: Failed to load for nppial@.11: java.lang.UnsatisfiedLinkError: no nppial in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppicc
Debug: Failed to load for nppicc@.11: java.lang.UnsatisfiedLinkError: no nppicc in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppicom
Debug: Failed to load for nppicom@.11: java.lang.UnsatisfiedLinkError: no nppicom in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppidei
Debug: Failed to load for nppidei@.11: java.lang.UnsatisfiedLinkError: no nppidei in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppif
Debug: Failed to load for nppif@.11: java.lang.UnsatisfiedLinkError: no nppif in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppig
Debug: Failed to load for nppig@.11: java.lang.UnsatisfiedLinkError: no nppig in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppim
Debug: Failed to load for nppim@.11: java.lang.UnsatisfiedLinkError: no nppim in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppist
Debug: Failed to load for nppist@.11: java.lang.UnsatisfiedLinkError: no nppist in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppisu
Debug: Failed to load for nppisu@.11: java.lang.UnsatisfiedLinkError: no nppisu in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppitc
Debug: Failed to load for nppitc@.11: java.lang.UnsatisfiedLinkError: no nppitc in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library npps
Debug: Failed to load for npps@.11: java.lang.UnsatisfiedLinkError: no npps in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cudnn_ops_infer
Debug: Failed to load for cudnn_ops_infer@.8: java.lang.UnsatisfiedLinkError: no cudnn_ops_infer in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cudnn_ops_train
Debug: Failed to load for cudnn_ops_train@.8: java.lang.UnsatisfiedLinkError: no cudnn_ops_train in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cudnn_adv_infer
Debug: Failed to load for cudnn_adv_infer@.8: java.lang.UnsatisfiedLinkError: no cudnn_adv_infer in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cudnn_adv_train
Debug: Failed to load for cudnn_adv_train@.8: java.lang.UnsatisfiedLinkError: no cudnn_adv_train in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cudnn_cnn_infer
Debug: Failed to load for cudnn_cnn_infer@.8: java.lang.UnsatisfiedLinkError: no cudnn_cnn_infer in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cudnn_cnn_train
Debug: Failed to load for cudnn_cnn_train@.8: java.lang.UnsatisfiedLinkError: no cudnn_cnn_train in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library opencv_cudev
Debug: Failed to load for opencv_cudev@.405: java.lang.UnsatisfiedLinkError: no opencv_cudev in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading /home/alexji/.javacpp/cache/opencv-4.5.5-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/opencv/linux-x86_64/libopencv_core.so.405
Debug: Loading /home/alexji/.javacpp/cache/opencv-4.5.5-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/opencv/linux-x86_64/libopencv_imgproc.so.405
Debug: Loading /home/alexji/.javacpp/cache/opencv-4.5.5-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/opencv/linux-x86_64/libjniopencv_core.so
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.opencv_core.CvSlice
Debug: Registering org.bytedeco.opencv.opencv_core.CvSlice[address=0x7fd7c89995c0,position=0,limit=1,capacity=1,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fd7c89995c0,deallocatorAddress=0x7fd618abebc0]]
Debug: Registering org.bytedeco.opencv.opencv_core.CvSlice[address=0x7fd7c8a0ec70,position=0,limit=1,capacity=1,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fd7c8a0ec70,deallocatorAddress=0x7fd618abebc0]]
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading /home/alexji/.javacpp/cache/opencv-4.5.5-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/opencv/linux-x86_64/libjniopencv_imgproc.so
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading /home/alexji/.javacpp/cache/depthai-2.14.0-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/depthai/linux-x86_64/libdepthai-core.so
Debug: Loading /home/alexji/.javacpp/cache/depthai-2.14.0-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/depthai/linux-x86_64/libdepthai-opencv.so
Debug: Loading /home/alexji/.javacpp/cache/depthai-2.14.0-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/depthai/linux-x86_64/libjnidepthai.so
Debug: Loading class org.bytedeco.depthai.Pipeline
Debug: Registering org.bytedeco.depthai.Pipeline[address=0x7fd7c898bf80,position=0,limit=1,capacity=1,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fd7c898bf80,deallocatorAddress=0x7fd61858b240]]
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.Node
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.ColorCameraPropertiesNode
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.ColorCamera
Debug: Registering org.bytedeco.depthai.ColorCamera[address=0x7fd7c8a0db10,position=0,limit=0,capacity=0,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fd7c8abb310,deallocatorAddress=0x7fd6186bb8c0]]
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.XLinkOutPropertiesNode
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.XLinkOut
Debug: Registering org.bytedeco.depthai.XLinkOut[address=0x7fd7c8a1cc10,position=0,limit=0,capacity=0,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fd7c8a21460,deallocatorAddress=0x7fd6186bb6e0]]
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.Node$Output
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.Node$Input
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.DeviceBase
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.Device
Debug: Registering org.bytedeco.depthai.Device[address=0x7fd7c8a21e10,position=0,limit=1,capacity=1,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fd7c8a21e10,deallocatorAddress=0x7fd618582670]]
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.javacpp.BytePointer
Debug: Registering org.bytedeco.javacpp.BytePointer[address=0x7fd7c8a21cb0,position=0,limit=18,capacity=18,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fd7c8a21cb0,deallocatorAddress=0x7fd6186b7ca0]]
MX ID:18443010D105A41200
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.javacpp.IntPointer
Debug: Registering org.bytedeco.javacpp.IntPointer[address=0x7fd7c9e92de0,position=0,limit=3,capacity=3,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fd7c9e92de0,deallocatorAddress=0x7fd6186b7550]]
Check point 00001----------------
Detect org.bytedeco.javacpp.IntPointer[address=0x7fd7c9e92de0,position=0,limit=3,capacity=3,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fd7c9e92de0,deallocatorAddress=0x7fd6186b7550]] camera(s) 
Check point 00002----------------
USB speed: SUPER 
Check point 00003----------------
    Camera 0 is ready!
    Camera 1 is ready!
    Camera 2 is ready!
Check point 00004----------------
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.DataOutputQueue
Debug: Registering org.bytedeco.depthai.DataOutputQueue[address=0x7fd7c8a220a0,position=0,limit=0,capacity=0,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fd7c9e91280,deallocatorAddress=0x7fd6186bb1e0]]Initialize JavaCV converter

Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Initialize JavaCV CanvasFrame
Debug: Collecting org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fd7c8a21cb0,deallocatorAddress=0x7fd6186b7ca0]
Stack trace (most recent call last) in thread 23032:
#0    Object "[0x7fd7b11e91ff]", at 0x7fd7b11e91ff, in 
Segmentation fault (Invalid permissions for mapped object [0x7fd7ceafa008])

> Task :Demo.main() FAILED

Execution failed for task ':Demo.main()'.
> Process 'command '/home/alexji/.sdkman/candidates/java/11.0.12-open/bin/java'' finished with non-zero exit value 139

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

The weird thing is that, if I change the initialization of JavaCanvas to front of new Pipeline(), sometime the code can work and keeps running for about 1 minute then crashes.

Original code:

    static void demoDepthaiRgbPreview() {
        OpenCVFrameConverter.ToMat converter = null;
        CanvasFrame videoCanvas = null;


        Pipeline pipeline  = new Pipeline();

        ColorCamera camRgb = pipeline.createColorCamera();
        XLinkOut xoutRgb   = pipeline.createXLinkOut();

        xoutRgb.setStreamName("rgb");
        camRgb.setResolution(ColorCameraProperties.SensorResolution.THE_1080_P);
        camRgb.setPreviewSize(WIDTH, HEIGHT);
        camRgb.setInterleaved(INTERLEAVED);
        camRgb.setColorOrder(ColorCameraProperties.ColorOrder.BGR);

        camRgb.preview().link(xoutRgb.input());

        Device device = new Device();
        System.out.println("MX ID:" + device.getMxId().getString());
        device.startPipeline(pipeline);
        IntPointer cameras = device.getConnectedCameras();
        System.out.println("Check point 00001----------------");

        System.out.printf("Detect %s camera(s) \n", cameras);
        System.out.println("Check point 00002----------------");
        System.out.printf("USB speed: %s \n", device.getUsbSpeed());
        System.out.println("Check point 00003----------------");
        for (int i = 0; i < cameras.limit(); i++) {
            System.out.printf("    Camera %d is ready!\n", cameras.get(i));
        }
        System.out.println("Check point 00004----------------");
        DataOutputQueue qRgb = device.getOutputQueue("rgb", 4, false);

        // move below if block to upper position. And sometime the code can keep working for 1 minutes
        if (useJavaCvCanvasFrame) {
            System.out.println("Initialize JavaCV converter");
            converter = new OpenCVFrameConverter.ToMat();
            System.out.println("Initialize JavaCV CanvasFrame");
//            TODO: Below will happen errors
//            Stack trace (most recent call last) in thread 23203:
//            #0    Object "[0x7f4707eb10f5]", at 0x7f4707eb10f5, in
//            Segmentation fault (Address not mapped to object [0x8])
            videoCanvas = new CanvasFrame("JavaCV Preview", 1.0);
        }

        Mat opencvMat;
        long time0 = 0, time1 = 0, accumConvertTime = 0;
        int count = 0;
        final int TOTAL_FRAME_COUNT = 1000;

After changed:

   static void demoDepthaiRgbPreview() {
        OpenCVFrameConverter.ToMat converter = null;
        CanvasFrame videoCanvas = null;

        if (useJavaCvCanvasFrame) {
            System.out.println("Initialize JavaCV converter");
            converter = new OpenCVFrameConverter.ToMat();
            System.out.println("Initialize JavaCV CanvasFrame");
//            TODO: Below will happen errors
//            Stack trace (most recent call last) in thread 23203:
//            #0    Object "[0x7f4707eb10f5]", at 0x7f4707eb10f5, in
//            Segmentation fault (Address not mapped to object [0x8])
            videoCanvas = new CanvasFrame("JavaCV Preview", 1.0);
        }

        
        Pipeline pipeline  = new Pipeline();

        ColorCamera camRgb = pipeline.createColorCamera();
        XLinkOut xoutRgb   = pipeline.createXLinkOut();

        xoutRgb.setStreamName("rgb");
        camRgb.setResolution(ColorCameraProperties.SensorResolution.THE_1080_P);
        camRgb.setPreviewSize(WIDTH, HEIGHT);
        camRgb.setInterleaved(INTERLEAVED);
        camRgb.setColorOrder(ColorCameraProperties.ColorOrder.BGR);

        camRgb.preview().link(xoutRgb.input());

        Device device = new Device();
        System.out.println("MX ID:" + device.getMxId().getString());
        device.startPipeline(pipeline);
        IntPointer cameras = device.getConnectedCameras();
        System.out.println("Check point 00001----------------");

        System.out.printf("Detect %s camera(s) \n", cameras);
        System.out.println("Check point 00002----------------");
        System.out.printf("USB speed: %s \n", device.getUsbSpeed());
        System.out.println("Check point 00003----------------");
        for (int i = 0; i < cameras.limit(); i++) {
            System.out.printf("    Camera %d is ready!\n", cameras.get(i));
        }
        System.out.println("Check point 00004----------------");
        DataOutputQueue qRgb = device.getOutputQueue("rgb", 4, false);


        Mat opencvMat;
        long time0 = 0, time1 = 0, accumConvertTime = 0;
        int count = 0;
        final int TOTAL_FRAME_COUNT = 1000;

Debug messages aftere code changed

> Task :Demo.main()
Initialize JavaCV converter
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.javacpp.Loader
Debug: Loading /home/alexji/.javacpp/cache/javacpp-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/javacpp/linux-x86_64/libjnijavacpp.so
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.javacpp.Pointer
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading /home/alexji/.javacpp/cache/openblas-0.3.19-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/openblas/linux-x86_64/libgcc_s.so.1
Debug: Loading /home/alexji/.javacpp/cache/openblas-0.3.19-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/openblas/linux-x86_64/libquadmath.so.0
Debug: Loading /home/alexji/.javacpp/cache/openblas-0.3.19-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/openblas/linux-x86_64/libgfortran.so.5
Debug: Loading library gfortran
Debug: Failed to load for gfortran@.4: java.lang.UnsatisfiedLinkError: no gfortran in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library gfortran
Debug: Failed to load for gfortran@.3: java.lang.UnsatisfiedLinkError: no gfortran in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading /home/alexji/.javacpp/cache/openblas-0.3.19-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/openblas/linux-x86_64/libopenblas_nolapack.so.0
Debug: Loading /home/alexji/.javacpp/cache/openblas-0.3.19-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/openblas/linux-x86_64/libjniopenblas_nolapack.so
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading /home/alexji/.javacpp/cache/openblas-0.3.19-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/openblas/linux-x86_64/libopenblas.so.0
Debug: Loading /home/alexji/.javacpp/cache/openblas-0.3.19-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/openblas/linux-x86_64/libjniopenblas.so
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading library cudart
Debug: Failed to load for cudart@.11.0: java.lang.UnsatisfiedLinkError: no cudart in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cublasLt
Debug: Failed to load for cublasLt@.11: java.lang.UnsatisfiedLinkError: no cublasLt in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cublas
Debug: Failed to load for cublas@.11: java.lang.UnsatisfiedLinkError: no cublas in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cufft
Debug: Failed to load for cufft@.10: java.lang.UnsatisfiedLinkError: no cufft in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cudnn
Debug: Failed to load for cudnn@.8: java.lang.UnsatisfiedLinkError: no cudnn in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppc
Debug: Failed to load for nppc@.11: java.lang.UnsatisfiedLinkError: no nppc in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppial
Debug: Failed to load for nppial@.11: java.lang.UnsatisfiedLinkError: no nppial in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppicc
Debug: Failed to load for nppicc@.11: java.lang.UnsatisfiedLinkError: no nppicc in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppicom
Debug: Failed to load for nppicom@.11: java.lang.UnsatisfiedLinkError: no nppicom in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppidei
Debug: Failed to load for nppidei@.11: java.lang.UnsatisfiedLinkError: no nppidei in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppif
Debug: Failed to load for nppif@.11: java.lang.UnsatisfiedLinkError: no nppif in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppig
Debug: Failed to load for nppig@.11: java.lang.UnsatisfiedLinkError: no nppig in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppim
Debug: Failed to load for nppim@.11: java.lang.UnsatisfiedLinkError: no nppim in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppist
Debug: Failed to load for nppist@.11: java.lang.UnsatisfiedLinkError: no nppist in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppisu
Debug: Failed to load for nppisu@.11: java.lang.UnsatisfiedLinkError: no nppisu in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library nppitc
Debug: Failed to load for nppitc@.11: java.lang.UnsatisfiedLinkError: no nppitc in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library npps
Debug: Failed to load for npps@.11: java.lang.UnsatisfiedLinkError: no npps in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cudnn_ops_infer
Debug: Failed to load for cudnn_ops_infer@.8: java.lang.UnsatisfiedLinkError: no cudnn_ops_infer in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cudnn_ops_train
Debug: Failed to load for cudnn_ops_train@.8: java.lang.UnsatisfiedLinkError: no cudnn_ops_train in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cudnn_adv_infer
Debug: Failed to load for cudnn_adv_infer@.8: java.lang.UnsatisfiedLinkError: no cudnn_adv_infer in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cudnn_adv_train
Debug: Failed to load for cudnn_adv_train@.8: java.lang.UnsatisfiedLinkError: no cudnn_adv_train in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cudnn_cnn_infer
Debug: Failed to load for cudnn_cnn_infer@.8: java.lang.UnsatisfiedLinkError: no cudnn_cnn_infer in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library cudnn_cnn_train
Debug: Failed to load for cudnn_cnn_train@.8: java.lang.UnsatisfiedLinkError: no cudnn_cnn_train in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading library opencv_cudev
Debug: Failed to load for opencv_cudev@.405: java.lang.UnsatisfiedLinkError: no opencv_cudev in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
Debug: Loading /home/alexji/.javacpp/cache/opencv-4.5.5-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/opencv/linux-x86_64/libopencv_core.so.405
Debug: Loading /home/alexji/.javacpp/cache/opencv-4.5.5-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/opencv/linux-x86_64/libopencv_imgproc.so.405
Debug: Loading /home/alexji/.javacpp/cache/opencv-4.5.5-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/opencv/linux-x86_64/libjniopencv_core.so
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.opencv_core.CvSlice
Debug: Registering org.bytedeco.opencv.opencv_core.CvSlice[address=0x7f8264994160,position=0,limit=1,capacity=1,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7f8264994160,deallocatorAddress=0x7f80b627bbc0]]
Debug: Registering org.bytedeco.opencv.opencv_core.CvSlice[address=0x7f82649dc9e0,position=0,limit=1,capacity=1,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7f82649dc9e0,deallocatorAddress=0x7f80b627bbc0]]
Initialize JavaCV CanvasFrame
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading /home/alexji/.javacpp/cache/opencv-4.5.5-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/opencv/linux-x86_64/libjniopencv_imgproc.so
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading /home/alexji/.javacpp/cache/depthai-2.14.0-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/depthai/linux-x86_64/libdepthai-core.so
Debug: Loading /home/alexji/.javacpp/cache/depthai-2.14.0-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/depthai/linux-x86_64/libdepthai-opencv.so
Debug: Loading /home/alexji/.javacpp/cache/depthai-2.14.0-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/depthai/linux-x86_64/libjnidepthai.so
Debug: Loading class org.bytedeco.depthai.Pipeline
Debug: Registering org.bytedeco.depthai.Pipeline[address=0x7f8264af0270,position=0,limit=1,capacity=1,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7f8264af0270,deallocatorAddress=0x7f80b1142240]]
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.Node
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.ColorCameraPropertiesNode
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.ColorCamera
Debug: Registering org.bytedeco.depthai.ColorCamera[address=0x7f82649d7500,position=0,limit=0,capacity=0,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7f8264c08be0,deallocatorAddress=0x7f80b12728c0]]
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.XLinkOutPropertiesNode
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.XLinkOut
Debug: Registering org.bytedeco.depthai.XLinkOut[address=0x7f8264a9ba60,position=0,limit=0,capacity=0,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7f8264c0a1a0,deallocatorAddress=0x7f80b12726e0]]
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.Node$Output
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.Node$Input
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.DeviceBase
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.Device
Debug: Registering org.bytedeco.depthai.Device[address=0x7f8264c09860,position=0,limit=1,capacity=1,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7f8264c09860,deallocatorAddress=0x7f80b1139670]]
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.javacpp.BytePointer
Debug: Registering org.bytedeco.javacpp.BytePointer[address=0x7f8264c09b10,position=0,limit=18,capacity=18,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7f8264c09b10,deallocatorAddress=0x7f80b126eca0]]
MX ID:18443010D105A41200
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.javacpp.IntPointer
Debug: Registering org.bytedeco.javacpp.IntPointer[address=0x7f8265fd71e0,position=0,limit=3,capacity=3,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7f8265fd71e0,deallocatorAddress=0x7f80b126e550]]
Check point 00001----------------
Detect org.bytedeco.javacpp.IntPointer[address=0x7f8265fd71e0,position=0,limit=3,capacity=3,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7f8265fd71e0,deallocatorAddress=0x7f80b126e550]] camera(s) 
Check point 00002----------------
USB speed: SUPER 
Check point 00003----------------
    Camera 0 is ready!
    Camera 1 is ready!
    Camera 2 is ready!
Check point 00004----------------
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.DataOutputQueue
Debug: Registering org.bytedeco.depthai.DataOutputQueue[address=0x7f8264adac60,position=0,limit=0,capacity=0,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7f8264b8be20,deallocatorAddress=0x7f80b12721e0]]
Ready to show grabbed frames .....
Debug: Opening org.bytedeco.javacpp.PointerScope@42e25b0b
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.ADatatype
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.Buffer
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.depthai.global.depthai
Debug: Loading class org.bytedeco.depthai.ImgFrame
Debug: Registering org.bytedeco.depthai.ImgFrame[address=0x7f80900010f0,position=0,limit=0,capacity=0,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7f8265fd45c0,deallocatorAddress=0x7f80b12737c0]]
Debug: Attaching org.bytedeco.depthai.ImgFrame[address=0x7f80900010f0,position=0,limit=0,capacity=0,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7f8265fd45c0,deallocatorAddress=0x7f80b12737c0]] to org.bytedeco.javacpp.PointerScope@42e25b0b
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.opencv_core.AbstractArray
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.opencv_core.Mat
Debug: Registering org.bytedeco.opencv.opencv_core.Mat[width=416,height=416,depth=8,channels=3]
Debug: Attaching org.bytedeco.opencv.opencv_core.Mat[width=416,height=416,depth=8,channels=3] to org.bytedeco.javacpp.PointerScope@42e25b0b
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.opencv.global.opencv_imgcodecs
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.opencv.global.opencv_imgcodecs
Debug: Loading /home/alexji/.javacpp/cache/opencv-4.5.5-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/opencv/linux-x86_64/libopencv_imgcodecs.so.405
Debug: Loading /home/alexji/.javacpp/cache/opencv-4.5.5-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/opencv/linux-x86_64/libjniopencv_imgcodecs.so
Debug: Loading class org.bytedeco.opencv.global.opencv_videoio
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.openblas.global.openblas
Debug: Loading class org.bytedeco.opencv.global.opencv_core
Debug: Loading class org.bytedeco.opencv.global.opencv_imgproc
Debug: Loading class org.bytedeco.opencv.global.opencv_imgcodecs
Debug: Loading class org.bytedeco.opencv.global.opencv_videoio
Debug: Loading /home/alexji/.javacpp/cache/opencv-4.5.5-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/opencv/linux-x86_64/libopencv_videoio.so.405
Debug: Loading /home/alexji/.javacpp/cache/opencv-4.5.5-1.5.7-SNAPSHOT-linux-x86_64.jar/org/bytedeco/opencv/linux-x86_64/libjniopencv_videoio.so
Debug: Loading class org.bytedeco.opencv.global.opencv_highgui

@saudet
Copy link
Member

saudet commented Jan 13, 2022

Debug: Collecting org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fd7c8a21cb0,deallocatorAddress=0x7fd6186b7ca0]

That pops up just before the crash, so this pointer is probably getting deallocated prematurely. Make sure that doesn't happen.

@ecmnet
Copy link

ecmnet commented Feb 10, 2022

Any solution or workaround to this? I experience a similar issue on OSX and Ubuntu using version 1.5.7. Grabbing stops after some minutes at

imgFrame = queue.getImgFrame(); imgFrame.getData().asByteBuffer().get(imageData);

with this log:

Debug: Registering org.bytedeco.depthai.ImgFrame[address=0x600001c0f658,position=0,limit=0,capacity=0,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x600000ad4380,deallocatorAddress=0x145bde850]]
Debug: Registering org.bytedeco.javacpp.BytePointer[address=0x7fc4c4b70000,position=0,limit=921600,capacity=921600,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fc4c4b70000,deallocatorAddress=0x145b9a200]]
Stack trace (most recent call last):
#2    Object "libsystem_platform.dylib", at 0x7ff81c676e2c, in _sigtramp + 28
#1    Object "libdepthai-core.dylib", at 0x16414016d, in backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 13
#0    Object "libdepthai-core.dylib", at 0x1641401dc, in backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 124

@saudet
Copy link
Member

saudet commented Feb 10, 2022

@ecmnet Please try to set the "org.bytedeco.javacpp.nopointergc" system property to "true" and see if that helps.

@ecmnet
Copy link

ecmnet commented Feb 10, 2022

@saudet Unfortunately not - I see that in this case neither registering nor GC takes place. Python and C++ DepthAI examples work.

Debug: Loading class org.bytedeco.javacpp.BytePointer Stack trace (most recent call last): #2 Object "libsystem_platform.dylib", at 0x7ff81c676e2c, in _sigtramp + 28 #1 Object "libdepthai-core.dylib", at 0x16056b16d, in backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 13 #0 Object "libdepthai-core.dylib", at 0x16056b1dc, in backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 124

@saudet
Copy link
Member

saudet commented Feb 10, 2022

Ok, thanks for testing. If DepthAI uses signal handlers, you'll need to do some signal chaining:
https://docs.oracle.com/javase/9/vm/signal-chaining.htm
@themarpe Do you know if DepthAI relies on signal handlers?

@ecmnet
Copy link

ecmnet commented Feb 10, 2022

@saudet I tried using the -Xrs option as well as the environment variable settings as described in the document above. Both with no success.

@saudet
Copy link
Member

saudet commented Feb 10, 2022

It's possible DepthAI becomes unstable when we don't immediately release all memory that it returns to us. For example, make sure close() gets called on the object that getImgFrame() returns, but also on other objects too. This can more easily be done with a PointerScope: http://bytedeco.org/news/2018/07/17/bytedeco-as-distribution/

@ecmnet
Copy link

ecmnet commented Feb 10, 2022

@saudet Tried that also in different ways - even doing it step by step closing all objects immediately does not work.

Debug: Registering org.bytedeco.depthai.ImgFrame[address=0x600002f58f18,position=0,limit=0,capacity=0,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x60000389dcf0,deallocatorAddress=0x136d5a850]] Debug: Registering org.bytedeco.depthai.RawBuffer[address=0x600000889cc8,position=0,limit=0,capacity=0,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x60000389fc50,deallocatorAddress=0x136d13d50]] Debug: Releasing org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x60000389dcf0,deallocatorAddress=0x136d5a850] Debug: Collecting org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x0,deallocatorAddress=0x0] Debug: Registering org.bytedeco.javacpp.BytePointer[address=0x7f8948008000,position=0,limit=921600,capacity=921600,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7f8948008000,deallocatorAddress=0x136d16200]] Debug: Releasing org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x60000389fc50,deallocatorAddress=0x136d13d50] Debug: Collecting org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x0,deallocatorAddress=0x0] Debug: Releasing org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7f8948008000,deallocatorAddress=0x136d16200] Debug: Collecting org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x0,deallocatorAddress=0x0] Stack trace (most recent call last): #2 Object "libsystem_platform.dylib", at 0x7ff81c676e2c, in _sigtramp + 28 #1 Object "libdepthai-core.dylib", at 0x15537a16d, in backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 13 #0 Object "libdepthai-core.dylib", at 0x15537a1dc, in backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 124

@ecmnet
Copy link

ecmnet commented Feb 10, 2022

An additional observation: Grabbing lives longer (up to 3 mins), when closing each object immediately and using PointerScope enclosing all statements.

@saudet
Copy link
Member

saudet commented Feb 10, 2022

If you still see "Collecting" with an address other than 0 in the log, that means it's not getting deallocated explicitly. Find where they come from, or use additional PointerScope blocks, and make sure to close them as quickly as possible.

@ecmnet
Copy link

ecmnet commented Feb 10, 2022

Weird. Meanwhile I use a callback to grab the frames, which seems to work as long as I do not have an AnimationTimer (to update the Java FXImage) - I even copied the grabbed array - but as soon as I enable the timer, grabbing stops:


               @Override
		public void call() {
			try (PointerScope scope = new PointerScope()) {	
				ImgFrame imgFrame = preview.getImgFrame();
				imgFrame.getData().asBuffer().get(buffer1);
				System.arraycopy(buffer1, 0, buffer2, 0, buffer1.length);
				imgFrame.close();
			}
		}
                      output = new BufferedImage(width,height, BufferedImage.TYPE_3BYTE_BGR);
		      buffer2 = ((DataBufferByte) output.getRaster().getDataBuffer()).getData();
		      buffer1 = new byte[imageData.length];
                      ...
                       task = new AnimationTimer() {
			@Override
			public void handle(long now) {
				Platform.runLater(() -> {
					SwingFXUtils.toFXImage(output, wirgb);
				});

			}
		};

@saudet
Copy link
Member

saudet commented Feb 10, 2022 via email

@themarpe
Copy link

themarpe commented Feb 10, 2022

It does register some signal handlers for use with Backward - crash stack printer.
Can be disabled by setting DEPTHAI_INSTALL_SIGNAL_HANDLER=0 or by compiling without Backward enabled (we might tweak the built scripts for this to be the default for Java binding builds)

Ps:
Can be disabled when compiling by setting CMake define -D DEPTHAI_ENABLE_BACKWARD=OFF

@ecmnet
Copy link

ecmnet commented Feb 10, 2022

@saudet @themarpe Seems to work now by

  • disabling the signal handler and
  • converting the BufferedImage to the FX WritableImage within the callback

So I assume, there were two root causes: Threading and signal-handling.

		@Override
		public void call() {
			try (PointerScope scope = new PointerScope()) {	
				ImgFrame imgFrame = preview.getImgFrame();
				imgFrame.getData().asBuffer().get(buffer);
				imgFrame.close();
			}
                       SwingFXUtils.toFXImage(output, wirgb);
		}

Thanks a lot for your support.

@ecmnet
Copy link

ecmnet commented Feb 11, 2022

@saudet: While this is working now properly with OSX, I receive now the issue as described by @wureka with Ubuntu.
I am not using any java 2D functionalities.

Debug: Collecting org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fd4f81cd480,deallocatorAddress=0x7fd47e1ec610]
Debug: Collecting org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fd4f81cd460,deallocatorAddress=0x7fd47e1f00b0]
Debug: Collecting org.bytedeco.javacpp.Pointer$NativeDeallocator[ownerAddress=0x7fd4f81d1f40,deallocatorAddress=0x7fd47e0c1ac0]
[2022-02-11 09:19:37.271] [error] Callback with id: 1 throwed an exception: java.lang.NullPointerException
Stack trace (most recent call last) in thread 6718:
#0    Object "[0x7fd4e1774777]", at 0x7fd4e1774777, in 
Speicherzugriffsfehler (Ingültige Rechte für das "mapped Object" [0x7fd476b9cfe0])
Speicherzugriffsfehler

Obviously still a deallocation issue there.
The debug output shows 'Collecting' with addresses !=0 for objects that were not allocated (at least do not show up in the debug output). I assumed, this should be the case.

@saudet
Copy link
Member

saudet commented Feb 11, 2022

Right, you'll probably need to get rid of those "Collecting" lines. You could set the "org.bytedeco.javacpp.nopointergc" system property, but as discussed above, that would likely result in memory leaks, and could also make DepthAI unstable. You'll need to figure out where those objects are and close them as soon as they are not needed anymore, or try to use PointerScope blocks as necessary.

@ecmnet
Copy link

ecmnet commented Feb 14, 2022

@saudet, @themarpe After cleaning up, the crash did not appear anymore in the context of 'Collecting'. But still it does not work. It happens (after a couple of seconds) as soon as I place

Pipeline p = new Pipeline()

into the code - no other DepthAI-related code is involved (even no 'device'). Closing it soon or surrounding it by PointerScope does not help. The object mentioned in the dump does not appear in the java context at all. Note, that this is Ubuntu only - OSX runs fine.

@saudet
Copy link
Member

saudet commented Feb 14, 2022

Maybe we need to make sure the Pipeline stays alive? Try to close at a later point in time.

@ecmnet
Copy link

ecmnet commented Feb 14, 2022

No chance - I got it working slightly longer (about 800 frames), but all cases ended with a crash.

@saudet
Copy link
Member

saudet commented Feb 14, 2022

With signal handler and backward disabled, everything on a signal thread? That reminds me, the JDK doesn't run the main thread on the first thread of the process. It is possible DepthAI doesn't like that.

@ecmnet
Copy link

ecmnet commented Feb 15, 2022

@saudet @themarpe After carefully redesigning the code, using blocking queues, etc, I managed to get DepthAI running on Ubuntu for a couple of minutes, but far from stable. The same code runs smoothly for hours on OSX. However, I saw a multihreading-related branch on DepthAI side - maybe that helps in future. Currently I consider DepthAI not usable on Ubuntu with Java.

@saudet
Copy link
Member

saudet commented Feb 17, 2022

@Grumpy141 @ecmnet @wureka
I've disabled the signal handlers in commit 5ac61a8, please give it a try with the snapshots:
https://oss.sonatype.org/content/repositories/snapshots/org/bytedeco/depthai/2.14.1-1.5.8-SNAPSHOT/
Just to be extra sure DepthAI doesn't try to install them anyway, please also make sure to set the "DEPTHAI_INSTALL_SIGNAL_HANDLER" environment variable to "0".

@Grumpy141
Copy link

Grumpy141 commented Feb 17, 2022 via email

@themarpe
Copy link

Thanks alot @saudet!
Disabling the Backward as you've done in the above commit is adequate and completely disables code handling signal handlers:)

@ecmnet
Copy link

ecmnet commented Feb 20, 2022

@saudet @themarpe I can confirm that 2.14.1 is stable now for me on both OSX and Ubuntu. Thanks a lot for your help!

@saudet
Copy link
Member

saudet commented Nov 3, 2022

The workaround has been released with version 1.5.8. Thank you all for reporting and for testing! Enjoy

@saudet saudet closed this as completed Nov 3, 2022
@saudet saudet removed the help wanted label Nov 3, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants