orbbec / OrbbecSDK

Orbbec SDK C/C++ base core lib
https://www.orbbec3d.com/
MIT License
68 stars 9 forks source link

Are transformation functions thread safe? #94

Open tory0807 opened 1 month ago

tory0807 commented 1 month ago

I was trying to use 'transformationDepthFrameToColorCamera()' to get multiple depth maps at different resolutions. Because transformation of depth maps takes time, I had to use multiple threads to call it . But in this case, the application crashed.

Is it possible to call 'transformationDepthFrameToColorCamera()' from multiple threads at the same time? Please check the test code:


#include <libobsensor/hpp/Utils.hpp>
#include <windows.h>
#include <fstream>
#include <iostream>
#include <mutex>
#include <string>
#include <queue>

std::shared_ptr<ob::Context> ctx;
std::shared_ptr<ob::Device>   device;
std::shared_ptr<ob::Pipeline> pipeline;
std::vector<std::thread> workerThreadList;
std::recursive_mutex          deviceMutex;
std::mutex frameMutex;
std::condition_variable waitFrame;
std::queue<std::shared_ptr<ob::FrameSet>> queuedFrames;

bool streamStarted = false;
bool working = true;
int frameCount = 0;

void handleDeviceConnected(std::shared_ptr<ob::DeviceList> connectList);
void handleDeviceDisconnected(std::shared_ptr<ob::DeviceList> disconnectList);
void handleDeviceConnected(std::shared_ptr<ob::DeviceList> connectList);
void handleDeviceDisconnected(std::shared_ptr<ob::DeviceList> disconnectList);
void enqueueFrameset(std::shared_ptr<ob::FrameSet> frameset);
void handleFrameset(std::shared_ptr<ob::FrameSet> frameset);
void startStream();
void inputWatcher();
void quitWorkers();
void handleFrame();

int main() try
{
    ob::Context::setLoggerSeverity(OB_LOG_SEVERITY_ERROR);
    ctx = std::make_shared<ob::Context>();

    // Register device callback
    ctx->setDeviceChangedCallback([](std::shared_ptr<ob::DeviceList> removedList, std::shared_ptr<ob::DeviceList> addedList) {
        handleDeviceDisconnected(removedList);
        handleDeviceConnected(addedList);
        });

    // Query the list of connected devices.
    std::shared_ptr<ob::DeviceList> devices = ctx->queryDeviceList();

    // Handle connected devices(and open one device)
    handleDeviceConnected(devices);

    if (!device) {
        std::cout << "Waiting for connect device..." << std::endl;
        while (!device) {
            std::this_thread::sleep_for(std::chrono::milliseconds(100));
        }
    }

    std::cout << "Input 'quit' or 'q' to stop application." << std::endl;
    std::thread inputThread(inputWatcher);

    while (working) {
        std::this_thread::sleep_for(std::chrono::milliseconds(1000));
        std::cout << "frames handled: " << frameCount << std::endl;
    }

    inputThread.join();

    if (pipeline) {
        pipeline->stop();
        quitWorkers();
    }

    return 0;
}
catch (ob::Error& e) {
    std::cerr << "function:" << e.getName() << "\nargs:" << e.getArgs() << "\nmessage:" << e.getMessage() << "\ntype:" << e.getExceptionType() << std::endl;
    exit(EXIT_FAILURE);
}

// Device connection callback
void handleDeviceConnected(std::shared_ptr<ob::DeviceList> devices) {
    // Get the number of connected devices
    if (devices->deviceCount() == 0) {
        return;
    }

    const auto deviceCount = devices->deviceCount();
    for (uint32_t i = 0; i < deviceCount; i++) {
        std::string deviceSN = devices->serialNumber(i);
        std::cout << "Found device connected, SN: " << deviceSN << std::endl;
    }

    std::unique_lock<std::recursive_mutex> lk(deviceMutex);
    if (!device) {
        // open default device (device index=0)
        device = devices->getDevice(0);
        pipeline = std::make_shared<ob::Pipeline>(device);
        std::cout << "Open device success, SN: " << devices->serialNumber(0) << std::endl;

        // start stream
        startStream();
    }
}

void startStream() {
    std::unique_lock<std::recursive_mutex> lk(deviceMutex);
    if (pipeline) {
        if (streamStarted) {
            std::cout << "Try to restart stream!" << std::endl;
            pipeline->stop();
            std::cout << "Stream stoped!" << std::endl;
        }

        // create config to configure pipeline
        auto config = std::make_shared<ob::Config>();

        std::shared_ptr<ob::VideoStreamProfile> colorProfile;
        try {
            auto colorProfileList = pipeline->getStreamProfileList(OB_SENSOR_COLOR);
            if (colorProfileList->count() > 0) {
                // get default (index=0) stream profile

                auto profile = colorProfileList->getVideoStreamProfile(3840, OB_HEIGHT_ANY, OB_FORMAT_MJPG, 30);

                colorProfile = profile->as<ob::VideoStreamProfile>();
                std::cout << "color profile: " << colorProfile->width() << "x" << colorProfile->height() << " @ " << colorProfile->fps() << "fps" << std::endl;

                // enable color stream
                config->enableStream(colorProfile);
            }
        }
        catch (...) {
            // dose not support color stream or other error
        }

        std::shared_ptr<ob::VideoStreamProfile> depthProfile;
        try {
            std::shared_ptr<ob::StreamProfileList> depthProfileList;
            OBAlignMode                            alignMode = ALIGN_DISABLE;
            depthProfileList = pipeline->getStreamProfileList(OB_SENSOR_DEPTH);

            if (depthProfileList->count() > 0) {
                std::shared_ptr<ob::StreamProfile> profile;

                try {
                    // Select the profile with the same frame rate as color.
                 //   profile = depthProfileList->getVideoStreamProfile(OB_WIDTH_ANY, OB_HEIGHT_ANY, OB_FORMAT_ANY, colorProfile->fps());
                    profile = depthProfileList->getVideoStreamProfile(512, OB_HEIGHT_ANY, OB_FORMAT_ANY, colorProfile->fps());
                }
                catch (...) {
                    profile = nullptr;
                }

                if (!profile) {
                    // If no matching profile is found, select the default profile.
                    profile = depthProfileList->getProfile(OB_PROFILE_DEFAULT);
                }

                depthProfile = profile->as<ob::VideoStreamProfile>();
                std::cout << "depth profile: " << depthProfile->width() << "x" << depthProfile->height() << " @ " << depthProfile->fps() << "fps" << std::endl;

                // enable depth stream
                config->enableStream(depthProfile);

                // set align mode
                config->setAlignMode(alignMode);
            }
        }
        catch (...) {
            // dose not support depth stream or other error
        }

        std::shared_ptr<ob::VideoStreamProfile> irProfile;
        try {
            auto irProfileList = pipeline->getStreamProfileList(OB_SENSOR_IR);
            if (irProfileList->count() > 0) {
                std::shared_ptr<ob::StreamProfile> profile;
                if (depthProfile) {
                    // Try to get same resolution and frame rate with depth, due to same model ir stream resolution and frame rate must be same with depth
                    try {
                        profile = irProfileList->getVideoStreamProfile(depthProfile->width(), depthProfile->height(), OB_FORMAT_ANY, depthProfile->fps());
                    }
                    catch (...) {
                        // dose not support same resolution and frame rate
                        profile = nullptr;
                    }
                }

                if (!profile) {
                    // If no matching profile is found, select the default profile.
                    profile = irProfileList->getProfile(OB_PROFILE_DEFAULT);
                }

                irProfile = profile->as<ob::VideoStreamProfile>();

                std::cout << "ir profile: " << irProfile->width() << "x" << irProfile->height() << " @ " << irProfile->fps() << "fps" << std::endl;

                // enable ir stream
                config->enableStream(irProfile);
            }
        }
        catch (...) {
            // dose not support ir stream or other error
        }

        workerThreadList.reserve(8);
        for (size_t i = 0; i < 8; i++)
        {
            workerThreadList.emplace_back(std::thread(handleFrame));
        }

        // start pipeline
        pipeline->start(config, enqueueFrameset);
        streamStarted = true;
        std::cout << "Stream started!" << std::endl;
    }
}

void enqueueFrameset(std::shared_ptr<ob::FrameSet> frameset) {
    std::unique_lock<std::mutex> lock(frameMutex);
    queuedFrames.push(std::move(frameset));
    waitFrame.notify_one();
}

void handleFrame()
{
    while (working)
    {
        std::unique_lock<std::mutex> lock(frameMutex);

        waitFrame.wait(lock, []() { return !queuedFrames.empty() || !working; });

        if (queuedFrames.empty())
            continue;

        std::shared_ptr<ob::FrameSet> frameset = std::move(queuedFrames.front());
        queuedFrames.pop();
        lock.unlock();

        handleFrameset(frameset);
    }
}

void handleFrameset(std::shared_ptr<ob::FrameSet> frameset) {
    std::shared_ptr<ob::Frame>       depthFrame;
    std::shared_ptr<ob::Frame>       colorFrame;

    try {
        auto frame = frameset->depthFrame();
        if (frame) {
            depthFrame = frame;
        }
    }
    catch (...) {
        // get depth frame failed.
    }

    if (depthFrame)
    {
        ob::CoordinateTransformHelper::transformationDepthFrameToColorCamera(device, depthFrame, 3840, 2160);
        ob::CoordinateTransformHelper::transformationDepthFrameToColorCamera(device, depthFrame, 3840, 2160);
        frameCount++;
    }
}

// Device disconnect callback
void handleDeviceDisconnected(std::shared_ptr<ob::DeviceList> disconnectList) {
    std::string currentDevSn = "";
    {
        std::unique_lock<std::recursive_mutex> lk(deviceMutex);
        if (device) {
            std::shared_ptr<ob::DeviceInfo> devInfo = device->getDeviceInfo();
            currentDevSn = devInfo->serialNumber();
        }
    }
    const auto deviceCount = disconnectList->deviceCount();
    for (uint32_t i = 0; i < deviceCount; i++) {
        std::string deviceSN = disconnectList->serialNumber(i);
        std::cout << "Device disconnected, SN: " << deviceSN << std::endl;
        if (currentDevSn == deviceSN) {
            device.reset();    // release device
            pipeline.reset();  // release pipeline
            quitWorkers();
            std::cout << "Current device disconnected" << std::endl;
        }
    }
}

void quitWorkers()
{
    waitFrame.notify_all();
    for (auto& t : workerThreadList)
    {
        t.join();
    }
    workerThreadList.clear();

    while (!queuedFrames.empty()) {
        queuedFrames.pop();
    }
}

void inputWatcher() {
    while (true) {
        std::string cmd;
        std::cout << "\nInput command:  ";
        std::getline(std::cin, cmd);
        if (cmd == "quit" || cmd == "q") {
            std::cout << "\nQuit the application. Please wait a moment ..." << std::endl << std::endl;
            break;
        }
    }
    working = false;
}```
cool-wuzh commented 4 weeks ago

Hi tory: I tried to run the code and the crash log is 'Alloc frame buffer failed!', the reason for this is caused by caching frames all the time in the code, because the size of the memory pool inside the Orbbec SDK defaults to 2GB, so exceeding the threshold causes the request failure issue. It is suggested to put a limit on the number of queues.

void enqueueFrameset(std::shared_ptr<ob::FrameSet> frameset) {
    std::unique_lock<std::mutex> lock(frameMutex);
    if(queuedFrames.size() > 10){
        queuedFrames.pop();
    }
    queuedFrames.push(std::move(frameset));
    waitFrame.notify_one();
}
tory0807 commented 4 weeks ago

I followed your recommendations and especially copied what you wrote, but the application still crashes.

cool-wuzh commented 4 weeks ago

I tried to run the modified program for a while without crash, can you provide the crash stack or detailed log information? image

tory0807 commented 4 weeks ago

This is the log from windows event viewer.

<?xml version="1.0" encoding="UTF-16"?>
<WERReportMetadata>
    <OSVersionInformation>
        <WindowsNTVersion>10.0</WindowsNTVersion>
        <Build>22000</Build>
        <Product>(0x30): Windows 10 Pro</Product>
        <Edition>Professional</Edition>
        <BuildString>22000.2245.amd64fre.co_release.210604-1628</BuildString>
        <Revision>2245</Revision>
        <Flavor>Multiprocessor Free</Flavor>
        <Architecture>X64</Architecture>
        <LCID>1042</LCID>
        <BuildLayers>
            <BuildLayer LayerName="DesktopEditions" OsMajorVersion="10" OsMinorVersion="0" BuildNumber="22000" QfeNumber="2245" IsTopLevel="1" IsChecked="0" BuildStamp="210604-1628" BuildBranch="co_release" BuildArch="amd64" BuildLab="22000.co_release.210604-1628" BuildLabEx="22000.1.amd64fre.co_release.210604-1628"/>
            <BuildLayer LayerName="OnecoreUAP" OsMajorVersion="10" OsMinorVersion="0" BuildNumber="22000" QfeNumber="1" IsTopLevel="0" IsChecked="0" BuildStamp="210604-1628" BuildBranch="co_release" BuildArch="amd64" BuildLab="22000.co_release.210604-1628" BuildLabEx="22000.1.amd64fre.co_release.210604-1628"/>
            <BuildLayer LayerName="ShellCommon" OsMajorVersion="10" OsMinorVersion="0" BuildNumber="22000" QfeNumber="2245" IsTopLevel="0" IsChecked="0" BuildStamp="230719-0901" BuildBranch="co_release_svc_prod3" BuildArch="amd64" BuildLab="22000.co_release_svc_prod3.230719-0901" BuildLabEx="22000.2245.amd64fre.co_release_svc_prod3.230719-0901"/>
        </BuildLayers>
    </OSVersionInformation>
    <ProblemSignatures>
        <EventType>APPCRASH</EventType>
        <Parameter0>OrbbecSample.exe</Parameter0>
        <Parameter1>0.0.0.0</Parameter1>
        <Parameter2>66625a18</Parameter2>
        <Parameter3>StackHash_69b3</Parameter3>
        <Parameter4>10.0.22000.2124</Parameter4>
        <Parameter5>f7fdb45f</Parameter5>
        <Parameter6>c0000374</Parameter6>
        <Parameter7>PCH_F0_FROM_ntdll+0x00000000000A4754</Parameter7>
    </ProblemSignatures>
    <DynamicSignatures>
        <Parameter1>10.0.22000.2.0.0.256.48</Parameter1>
        <Parameter2>1042</Parameter2>
        <Parameter22>69b3</Parameter22>
        <Parameter23>69b307ffd45205023a8786efa28c1303</Parameter23>
        <Parameter24>c034</Parameter24>
        <Parameter25>c0349e8eceefbeaf7dc06ef22dcc6c9c</Parameter25>
    </DynamicSignatures>
    <SystemInformation>
        <MID>1A829B6E-DBF1-4815-B09A-F00A660ECC90</MID>
        <MarkerFile>1462_MSI_Raider GE76 12UE_13.TCA4.J28.16.0.8</MarkerFile>
        <SystemManufacturer>Micro-Star International Co., Ltd.</SystemManufacturer>
        <SystemProductName>Raider GE76 12UHS</SystemProductName>
        <BIOSVersion>E17K4IMS.206</BIOSVersion>
        <OSInstallDate>1664610135</OSInstallDate>
        <OSInstallTime>1601-01-02T22:58:38Z</OSInstallTime>
        <TimeZoneBias>-09:00</TimeZoneBias>
    </SystemInformation>
    <DAMInformation>
        <LastEnterCSTime>133619317892075094</LastEnterCSTime>
        <LastLeaveCSTime>133619317892175156</LastLeaveCSTime>
        <LastS0SuspendTime>133613272385714239</LastS0SuspendTime>
        <LastS0ResumeTime>133613272965105787</LastS0ResumeTime>
    </DAMInformation>
    <SecureBootState>
        <UEFISecureBootEnabled>1</UEFISecureBootEnabled>
        <PolicyPublisher>{77fa9abd-0359-4d32-bd60-28f4e78f784b}</PolicyPublisher>
    </SecureBootState>
    <ReportInformation>
        <Guid>4ce7b0e9-452d-4001-aa42-047d3347f37f</Guid>
        <CreationTime>2024-06-07T00:55:17Z</CreationTime>
    </ReportInformation>
</WERReportMetadata>

Here is the last part of the log file.

[06/07 09:55:17.045647][debug][36444][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.073864][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.074095][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.074235][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.074300][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.074411][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.074463][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.074510][debug][8928][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.074543][debug][8928][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.079406][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.079662][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.079876][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.080036][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.080145][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.080270][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.080321][debug][13928][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.080354][debug][13928][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.103593][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.103767][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.103834][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.103923][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.103977][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.104024][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.104068][debug][36444][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.104103][debug][36444][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.112359][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.112656][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.112830][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.112967][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.113117][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.113176][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.113220][debug][33480][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.113255][debug][33480][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.137638][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.137873][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.137941][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.137990][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.138038][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.138086][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.138129][debug][13928][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.138165][debug][13928][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.145931][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.146073][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.146226][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.146314][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.146763][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.146964][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.147021][debug][29948][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.147140][debug][29948][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.170724][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.170876][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.170946][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.170993][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.171041][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.171084][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.171133][debug][33480][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.171177][debug][33480][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.178610][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.178804][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.178956][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.179056][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.179117][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.179289][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.179419][debug][23496][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.179540][debug][23496][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.203948][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.204135][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.204353][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.204461][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.204568][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.204679][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.204729][debug][29948][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.204774][debug][29948][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.212976][debug][41232][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.213353][debug][41232][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.213597][debug][41232][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.213727][debug][41232][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.213779][debug][41232][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.213895][debug][41232][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.214006][debug][41232][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.214115][debug][41232][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.236293][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.236531][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.236596][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.236650][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.236695][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.236740][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.236788][debug][23496][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.236822][debug][23496][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.245393][debug][7880][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.245653][debug][7880][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.245759][debug][7880][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.245856][debug][7880][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.246003][debug][7880][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.246130][debug][7880][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.246177][debug][7880][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.246212][debug][7880][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.271989][debug][41232][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.272254][debug][41232][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.272319][debug][41232][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.272368][debug][41232][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.272413][debug][41232][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.272457][debug][41232][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.272501][debug][41232][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.272534][debug][41232][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.279857][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.280027][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.280112][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.280175][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.280244][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.280301][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.280382][debug][8928][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.280556][debug][8928][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.303613][debug][7880][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.303810][debug][7880][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.303875][debug][7880][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.303927][debug][7880][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.303973][debug][7880][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.304017][debug][7880][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.304066][debug][7880][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.304100][debug][7880][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.312676][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.313112][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.313310][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.313387][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.313463][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.313514][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.313555][debug][36444][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.313592][debug][36444][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.339517][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.339672][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.339725][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.339798][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.339852][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.339905][debug][8928][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.339953][debug][8928][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.339988][debug][8928][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.345716][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.345955][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.346168][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.346256][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.346327][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.346384][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.346434][debug][13928][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.346475][debug][13928][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.373305][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.373492][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.373727][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.374036][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.374184][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.374274][debug][36444][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.374555][debug][36444][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.374767][debug][36444][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.377953][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.378082][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.378190][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.378255][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.378316][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.378450][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.378547][debug][33480][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.378599][debug][33480][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.409512][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.409704][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.409801][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.409907][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.409977][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.410203][debug][13928][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.410270][debug][13928][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.410426][debug][13928][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.412716][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.412841][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.412912][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.412993][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.413065][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.413216][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.413296][debug][29948][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.413354][debug][29948][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.445002][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.445167][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.445280][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.445355][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.445487][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.445562][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.445669][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.445776][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.445843][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.445894][debug][33480][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.445949][debug][33480][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.445980][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.445986][debug][33480][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.446039][debug][23496][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.446103][debug][23496][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.446178][debug][23496][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.475278][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.475396][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.475449][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.475499][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 14, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.475545][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 15, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.475590][debug][29948][PropertyAccessor.cpp:28] get property value success! propertyId: 118, value: {intValue: 0, floatValue: 0}
[06/07 09:55:17.475634][debug][29948][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
[06/07 09:55:17.475669][debug][29948][FrameProcessingBlock.cpp:26] Block created with frame queue size: 10
tory0807 commented 4 weeks ago

Here is the call stack:

call_stack

cool-wuzh commented 4 weeks ago

Can you see which line of code crashed? Is it the frameset or device with a null pointer?

tory0807 commented 4 weeks ago

Please check this code with line numbers.

image

tory0807 commented 4 weeks ago

This is the call stack with symbols.

image

cool-wuzh commented 4 weeks ago

I may know what the problem is, it should be a bug. please modified to call transformationDepthFrameToColorCamera only once and check if is problem.

tory0807 commented 4 weeks ago

I was able to run it a little longer, but it eventually crashed.

image

cool-wuzh commented 4 weeks ago

I've reproduced the bug, and it is indeed due to a multi-threaded resource access conflict issue, which we'll fix in the next SDK release version.