Hi @fredrik,
For the scope capture above, how were the camera nodes being configured in the pipeline? And the upper signal (ch 1) is applied on FSYNC?
For the continuous streaming with external sync mode, camera FPS should be set to match precisely the input signal rate (e.g. .setFps(20)
) and this applied as well: .initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT)
That weird pulse might happen if there's a mismatch between camera sensor internal timings (configured by setFps) and the external signal. Can also check how that signal looks like if the FSYNC signal is not provided - static level. A particularity of OV9282 is that if the signal is missing, the sensors continue to stream at the configured FPS. They will align to the external signal if provided, but its rate needs to stay very close to setFps rate.
How to get precise external timing on OAK-D S2 POE
I found on this page: https://docs.luxonis.com/projects/hardware/en/latest/pages/NG9097s2/#ng9097s2 that there should be 5V between pins 5 and 8 of the M8 connector. That isn't the case with my OAK-D S2. What could be the issue?
Pin 5 (VBUS) by default is an input for receiving power (it could also be an alternative to PoE, but only if the application doesn't have high power requirements, depending on what it uses - neural networks, video encoder etc), so no voltage present is expected.
It can be configured as an output if desired by your application (could power some external circuitry), and I believe this should do it, for example from a Script node:
VBUS_OUT_GPIO_CTRL = 9
GPIO.setup(VBUS_OUT_GPIO_CTRL, GPIO.OUT, GPIO.PULL_NONE)
GPIO.write(VBUS_OUT_GPIO_CTRL, 1) # Enable 5V output
I'm sorry. I tested it again and now it seems to work correctly. I'm not sure if it was hard or software:
Perfect, this works!
@alex @Luxonis-Alex
I'm able to get warned if the state on the aux GPIO changes.
But I don't understand how to use the interrupt function within this script block. I found the Script in the Nodes section, but an example with an interrupt implemented would help a lot.
The next step is to receive the timer that drives the cameras in the script section. Any ideas, examples or documentation on this?
My idea is as follows:
- The three cameras are running on the highest FPS
- Start a counter if there is a pulse on AUX GPIO
- Count until the scene is captured and send this time to the host
Do you think the script area will be the place to let this happen?
Thanks for your help!
I made this Script:
script.setScript("""
import time
import GPIO
VBUS_OUT_GPIO_CTRL = 9
GPIO.setup(VBUS_OUT_GPIO_CTRL, GPIO.OUT, GPIO.PULL_NONE)
GPIO.write(VBUS_OUT_GPIO_CTRL, 1) # Enable 5V output
AUX_GPIO = 52
GPIO.setup(AUX_GPIO, GPIO.IN, GPIO.PULL_DOWN)
GPIO.setInterrupt(AUX_GPIO, GPIO.RISING, 1)
ctrl = CameraControl()
ctrl.setCaptureStill(True)
while True:
node.warn('waiting for interrupt')
GPIO.waitInterruptEvent()
node.io['out'].send(ctrl)
""")
When I'm putting a 10 Hz signal on the AUX GPIO the system works for around 1 minute, then I get this message:
[1944301061CA801300] [192.168.88.253] [83.028] [system] [critical] Fatal error. Please report to developers. Log: 'Fatal error on MSS CPU: trap: 00, address: 00000000' '0'
[1944301061CA801300] [192.168.88.253] [1708082326.696] [host] [warning] Monitor thread (device: 1944301061CA801300 [192.168.88.253]) - ping was missed, closing the device connection
Any ideas on this?
@fredrik Your code looks good. I can reproduce the same type of failure, with the 10Hz 3.3V signal applied on pin 1 (AUX_GPIO_3V3). I just replaced the script content from this example luxonis/depthai-pythonblob/main/examples/Script/script_camera_control.py
with yours from above. Sometimes it runs for a few minutes, but eventually fails the same. Will debug this firmware problem.
An unrelated note is that AUX_GPIO_3V3
also has another GPIO to control the direction (of a 3.3V<->1.8V level shifter), but by default the 3.3V side is an input, so this code is optional:
AUX_GPIO_DIR_CTRL = 6
GPIO.setup(AUX_GPIO_DIR_CTRL, GPIO.OUT, GPIO.PULL_NONE)
GPIO.write(AUX_GPIO_DIR_CTRL, 0) # AUX_GPIO_3V3 (52) direction control: 0=input, 1=output
Mentioning just in case at some point is desired to set it as output. (We should also see about abstracting these in FW.)
However about the usage of .setCaptureStill
, internally this doesn't trigger a new frame capture, but just sets a flag for the new frame from the camera to be processed/sent on the ColorCamera .still
output. So by default the camera would stream at the 30fps rate, unsynced. I'm not exactly sure if this suits your needs, or you would rather want to change the cameras to fsync-input mode, for example editing in:
luxonis/depthai-pythonblob/main/utilities/cam_test.py
to uncomment cam[c].initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT)
and applying an e.g 12V 10Hz signal on FSYNC (M8 pin 2, with GND_ISO on pin 7), then run:
python3 utilities/cam_test.py -rs -cams rgb,c left,m right,m -fps 10
It's still possible to add a script to get events on FSYNC GPIO (which goes both to sensors and to an SoC pin), but currently it might suffer from the same issue that it might crash the app after some time:
script = pipeline.create(dai.node.Script)
script.setScript("""
import GPIO
import time
# Note: level gets inverted due to isolation circuitry
FSYNC_GPIO = 41
GPIO.setup(FSYNC_GPIO, GPIO.IN, GPIO.PULL_DOWN)
GPIO.setInterrupt(FSYNC_GPIO, GPIO.RISING, 128)
node.warn('Waiting for interrupts...')
while True:
ret = GPIO.waitInterruptEvent(FSYNC_GPIO)
node.warn(f'GPIO interrupt: {ret}')
""")
It seems to run longer (couldn't reproduce a crash yet) with interrupt priority set to 128 (range 0..255) instead of 1, but needs more debugging to understand the issue.
Instead, it should be possible to check the timestamps of the received frames, that are aligned to the host monotonic time (dai.Clock.now()
)
Adding in cam_test.py e.g before frame = pkt.getCvFrame()
:
print(c, pkt.getTimestamp().total_seconds(), pkt.getTimestampDevice().total_seconds())
The timestamps by default are aligned to end of exposure window: https://docs.luxonis.com/projects/hardware/en/latest/pages/guides/sync_frames/?highlight=fsin#frame-capture-graphs
@Luxonis-Alex, thank you for your detailed response!
I hope you resolve the firmware issue quickly.
Thank you for explaining the level shifter; I was unaware that I could change the orientation of this circuit. Which is strange because the M8 connector documentation states that it is a GPIO pin.
Your solution to my timing issue does not fit the project. The camera is directed at a conveyor belt with objects going along. The PLC, that controls this conveyor belt, will emit pulses according to the belt's travelled distance. To ensure precise timing, the camera must validate the capture moment with the PLC. I intended to use the FSYNC and STROBE signals on the M8 connector for this. I forgot to note the issue with the rolling shutter sensors:-(.
Now I've ordered the OAK-D PRO POE with global shutter. I hope the resolution is sufficient to identify the objects on the belt.
@erik In my opinion, the product pages should include a large, obvious notice for cameras with rolling shutter and M8 ports. FSYNC appears to work just with the two monochrome cameras.
Thank you both for your support!
For the issue with the GPIO interrupt, looks like setting the priority of 128 (instead of 1, the last param) can be a workaround for now, I had it running for over 3 hours and still good.
About Fsync, that should work as well with the IMX378 rolling shutter, my test above was done with such a device (OAK-D-S2-PoE). But only continuous streaming mode is supported with IMX378, and not arbitrary trigger.
If you need the cameras to run at a higher FPS, all synced, and then just need to decide which frames to send out, that may be possible to implement.
If you have a given camera configuration and fsync signal that fails to get a stream from IMX378, I can have a look.
@Luxonis-Alex I did replace the camera to an OAK-D PRO POE. So all of the cameras have global shutters now.
I am currently confronting two strange situations:
One of the two frames is really dark.
The strobe output peaks a little while the signal is low.
What I don't understand is why one of the two frames is so black. I've set manual exposure and white balance. Anti-banding is turned off. This only occurs when the external trigger is used.
I configured the external trigger as follows:
camRgb.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT)
monoLeft.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT)
monoRight.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT)
camRgb.initialControl.setExternalTrigger(1, 0)
monoLeft.initialControl.setExternalTrigger(1, 0)
monoRight.initialControl.setExternalTrigger(1, 0)
I guess that the numFramesBurst and numFramesDiscard is already built in for situations like this, but I would like to have some context about this.
Secondly the STROBE output has, in my opinion strange behaviour. The blue signal is the strobe pin, the yellow signal is the FSYNC pin.
This one is with numFramesBurst=1, numFramesDiscard=0
This one is with numFramesBurst=2, numFramesDiscard=1
Why is the peak/short signal within the other pulse?
The strobe pin is connected to a 12V source by a 9.2k resistor.
Thanks for your help.
@fredrik Could you share the full script used for test, we'll check if something might not be configured correctly.
We have some docs here: https://docs.luxonis.com/projects/hardware/en/latest/pages/guides/sync_frames
but should probably improve the API description as well, and have it report errors on misconfigurations.
.setFrameSyncMode
and .setExternalTrigger
should not be set both, but only one, depending on the mode of operation desired:
setFrameSyncMode
for continuous streaming mode, where the externally provided signal frequency should match precisely the value preconfigured by.setFps(...)
(default 30.0). At sensor side (after the optocoupler logic that inverts the signal), the rising edge at FSIN sensor pin (Frame Sync INput) starts a new frame interval (1/FPS), where the exposure window is aligned to the end of the frame interval - we have frame capture graphs at the above link.setExternalTrigger
for arbitrary time capture. In this mode it's best for.setFps
to be set to max (e.g 60 or 120) to avoid missed triggers. The exposure starts immediately after trigger and can't overlap with previous frame's MIPI readout. The first parameter configures how many frames to be captured on a single trigger. On OV9282/OV9782 the first frame(s) after trigger may not have the optimal image quality (sensor specific) and then the second parameter specifies how many to be auto-discarded. E.g. with(4, 3)
, 4 would be captured, with first 3 discarded, and the remaining of one actually streamed out. The interval between 2 triggers should not be too short, have to take into account the number of frames in a burst, the configured exposure time, and setFps() at which they will be captured.
@Luxonis-Alex Ok, I didn't understand how to use the syncmode and ext trigger. But with your explanation, I do. Thanks.
I will use the ext trigger so I don't have to worry about timing from the device that gives the pulse.
I've set the fps to 120, but then there is something weird. Sometimes the stream starts for a few seconds and then runs into this error:
[19443010112BAC2E00] [192.168.88.251] [15.180] [system] [critical] Fatal error. Please report to developers. Log: 'Fatal error on MSS CPU: trap: 00, address: 00000000' '0'
Somes runs it for a while but when I close it, I got this error dump.
{"crashReports":[{"crashedThreadId":151060481,"errorSource":"INTERNAL_ERROR_CORE","errorSourceInfo":{"assertContext":{"fileName":"","functionName":"","line":0},"errorId":30,"trapContext":{"trapAddress":0,"trapName":"","trapNumber":0}},"processor":1,"threadCallstack":[{"callStack":[{"callSite":2153355972,"calledTarget":2153371816,"context":"","framePointer":2155194752},{"callSite":2153349268,"calledTarget":2153355716,"context":"","framePointer":2155194848},{"callSite":2150305804,"calledTarget":2153349180,"context":"","framePointer":2155194984},{"callSite":2153370944,"calledTarget":0,"context":"Thread handler","framePointer":2155195096},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155195192},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155195288}],"instructionPointer":2153355972,"stackBottom":2155179000,"stackPointer":2155194752,"stackTop":2155195383,"threadId":167837697,"threadName":"CBTH","threadStatus":"WAITING_FOR_MESSAGE"},{"callStack":[{"callSite":2153342268,"calledTarget":2153371816,"context":"","framePointer":2155227192},{"callSite":2153342688,"calledTarget":2153342180,"context":"","framePointer":2155227360},{"callSite":2152481224,"calledTarget":2153342672,"context":"","framePointer":2155227456},{"callSite":2147607344,"calledTarget":2152481204,"context":"","framePointer":2155227568},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155228016},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155228112},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155228208}],"instructionPointer":2153342268,"stackBottom":2155195536,"stackPointer":2155227192,"stackTop":2155228303,"threadId":184614913,"threadName":"main","threadStatus":"UNKNOWN"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155260680},{"callSite":2149086696,"calledTarget":2153351796,"context":"","framePointer":2155260816},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155260936},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155261032},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155261128}],"instructionPointer":2153351948,"stackBottom":2155228456,"stackPointer":2155260680,"stackTop":2155261223,"threadId":184614914,"threadName":"rmtPool","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155294208},{"callSite":2149999604,"calledTarget":2153351796,"context":"","framePointer":2155294344},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155294440},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155294536},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155294632}],"instructionPointer":2153351948,"stackBottom":2155261960,"stackPointer":2155294208,"stackTop":2155294727,"threadId":184614915,"threadName":"RmtBarrThrd","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155326944},{"callSite":2150684580,"calledTarget":2153351796,"context":"","framePointer":2155327080},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2155327264},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155327360},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155327456},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155327552}],"instructionPointer":2153351948,"stackBottom":2155294880,"stackPointer":2155326944,"stackTop":2155327647,"threadId":184614916,"threadName":"","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155359576},{"callSite":2149654888,"calledTarget":2149236388,"context":"","framePointer":2155359712},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2155360184},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155360280},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155360376},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155360472}],"instructionPointer":2153351948,"stackBottom":2155327800,"stackPointer":2155359576,"stackTop":2155360567,"threadId":184614917,"threadName":"","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153382444,"calledTarget":2153371816,"context":"","framePointer":2155392088},{"callSite":2153382656,"calledTarget":2153382396,"context":"","framePointer":2155392184},{"callSite":2147697588,"calledTarget":2153382628,"context":"","framePointer":2155392320},{"callSite":2147698988,"calledTarget":2147697452,"context":"","framePointer":2155392448},{"callSite":2147699320,"calledTarget":2147698868,"context":"","framePointer":2155392568},{"callSite":2147699484,"calledTarget":2147699192,"context":"","framePointer":2155393008},{"callSite":2153097312,"calledTarget":0,"context":"Thread handler","framePointer":2155393104},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155393200},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155393296},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155393392}],"instructionPointer":2153382444,"stackBottom":2155360720,"stackPointer":2155392088,"stackTop":2155393487,"threadId":184614918,"threadName":"","threadStatus":"READY"},{"callStack":[{"callSite":2153355972,"calledTarget":2153371816,"context":"","framePointer":2155429368},{"callSite":2153339776,"calledTarget":2153355716,"context":"","framePointer":2155429464},{"callSite":2150104252,"calledTarget":2153339624,"context":"","framePointer":2155429600},{"callSite":2150165692,"calledTarget":2150104236,"context":"","framePointer":2155429704},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155429816},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155429912},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155430008}],"instructionPointer":2153355972,"stackBottom":2155397336,"stackPointer":2155429368,"stackTop":2155430103,"threadId":184614919,"threadName":"SIPP","threadStatus":"WAITING_FOR_MESSAGE"},{"callStack":[{"callSite":2153345652,"calledTarget":2153369844,"context":"","framePointer":2155470528},{"callSite":2149111636,"calledTarget":2153345484,"context":"","framePointer":2155470664},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2155470920},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155471016},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155471112},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155471208}],"instructionPointer":2153345652,"stackBottom":2155438536,"stackPointer":2155470528,"stackTop":2155471303,"threadId":184614920,"threadName":"PlgNeuralNetwor","threadStatus":"UNKNOWN"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155511880},{"callSite":2148226116,"calledTarget":2153351796,"context":"","framePointer":2155512016},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155512136},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155512232},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155512328}],"instructionPointer":2153351948,"stackBottom":2155479656,"stackPointer":2155511880,"stackTop":2155512423,"threadId":184614921,"threadName":"rmtPool","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155544696},{"callSite":2147995112,"calledTarget":2153351796,"context":"","framePointer":2155544832},{"callSite":2148081436,"calledTarget":2147995028,"context":"","framePointer":2155544960},{"callSite":2148079996,"calledTarget":0,"context":"Thread handler","framePointer":2155545064},{"callSite":2148072724,"calledTarget":0,"context":"Thread handler","framePointer":2155545176},{"callSite":2148096856,"calledTarget":2148072692,"context":"","framePointer":2155545272},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2155545544},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155545640},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155545736},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155545832}],"instructionPointer":2153351948,"stackBottom":2155513160,"stackPointer":2155544696,"stackTop":2155545927,"threadId":184614922,"threadName":"PlgDetectionPar","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155578304},{"callSite":2148078652,"calledTarget":2153351796,"context":"","framePointer":2155578440},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155578560},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155578656},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155578752}],"instructionPointer":2153351948,"stackBottom":2155546080,"stackPointer":2155578304,"stackTop":2155578847,"threadId":184614923,"threadName":"rmtPool","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155610584},{"callSite":2147994912,"calledTarget":2153351796,"context":"","framePointer":2155610720},{"callSite":2148021756,"calledTarget":2147994828,"context":"","framePointer":2155610848},{"callSite":2148036060,"calledTarget":0,"context":"Thread handler","framePointer":2155610952},{"callSite":2148020960,"calledTarget":0,"context":"Thread handler","framePointer":2155611064},{"callSite":2150040728,"calledTarget":2148020928,"context":"","framePointer":2155611160},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2155611384},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155611480},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155611576},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155611672}],"instructionPointer":2153351948,"stackBottom":2155579000,"stackPointer":2155610584,"stackTop":2155611767,"threadId":184614924,"threadName":"PlgSrcMipi","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155644144},{"callSite":2148039264,"calledTarget":2153351796,"context":"","framePointer":2155644280},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155644400},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155644496},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155644592}],"instructionPointer":2153351948,"stackBottom":2155611920,"stackPointer":2155644144,"stackTop":2155644687,"threadId":184614925,"threadName":"rmtPool","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155676496},{"callSite":2147994812,"calledTarget":2153351796,"context":"","framePointer":2155676632},{"callSite":2148019592,"calledTarget":2147994728,"context":"","framePointer":2155676760},{"callSite":2148013232,"calledTarget":0,"context":"Thread handler","framePointer":2155676864},{"callSite":2148006204,"calledTarget":0,"context":"Thread handler","framePointer":2155676976},{"callSite":2150023692,"calledTarget":2148006172,"context":"","framePointer":2155677072},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2155677224},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155677320},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155677416},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155677512}],"instructionPointer":2153351948,"stackBottom":2155644840,"stackPointer":2155676496,"stackTop":2155677607,"threadId":184614926,"threadName":"PlgIspCtrl","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155709240},{"callSite":2147994912,"calledTarget":2153351796,"context":"","framePointer":2155709376},{"callSite":2148057416,"calledTarget":2147994828,"context":"","framePointer":2155709504},{"callSite":2148035796,"calledTarget":0,"context":"Thread handler","framePointer":2155709616},{"callSite":2148020680,"calledTarget":0,"context":"Thread handler","framePointer":2155709728},{"callSite":2150020388,"calledTarget":2148020648,"context":"","framePointer":2155709824},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2155710144},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155710240},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155710336},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155710432}],"instructionPointer":2153351948,"stackBottom":2155677760,"stackPointer":2155709240,"stackTop":2155710527,"threadId":184614927,"threadName":"PlgColorIsp1xPo","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155742904},{"callSite":2148039264,"calledTarget":2153351796,"context":"","framePointer":2155743040},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155743160},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155743256},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155743352}],"instructionPointer":2153351948,"stackBottom":2155710680,"stackPointer":2155742904,"stackTop":2155743447,"threadId":184614928,"threadName":"rmtPool","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155783960},{"callSite":2148057092,"calledTarget":2153351796,"context":"","framePointer":2155784096},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2155784312},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155784408},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155784504},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155784600}],"instructionPointer":2153351948,"stackBottom":2155751928,"stackPointer":2155783960,"stackTop":2155784695,"threadId":184614929,"threadName":"RmtI","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155816896},{"callSite":2147994912,"calledTarget":2153351796,"context":"","framePointer":2155817032},{"callSite":2148021756,"calledTarget":2147994828,"context":"","framePointer":2155817160},{"callSite":2148036060,"calledTarget":0,"context":"Thread handler","framePointer":2155817264},{"callSite":2148020960,"calledTarget":0,"context":"Thread handler","framePointer":2155817376},{"callSite":2148027020,"calledTarget":2148020928,"context":"","framePointer":2155817472},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2155817816},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155817912},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155818008},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155818104}],"instructionPointer":2153351948,"stackBottom":2155785432,"stackPointer":2155816896,"stackTop":2155818199,"threadId":184614930,"threadName":"RmtO","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155849816},{"callSite":2147994912,"calledTarget":2153351796,"context":"","framePointer":2155849952},{"callSite":2148021756,"calledTarget":2147994828,"context":"","framePointer":2155850080},{"callSite":2148036060,"calledTarget":0,"context":"Thread handler","framePointer":2155850184},{"callSite":2148020960,"calledTarget":0,"context":"Thread handler","framePointer":2155850296},{"callSite":2148027020,"calledTarget":2148020928,"context":"","framePointer":2155850392},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2155850736},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155850832},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155850928},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155851024}],"instructionPointer":2153351948,"stackBottom":2155818352,"stackPointer":2155849816,"stackTop":2155851119,"threadId":184614931,"threadName":"CRmO","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153348088,"calledTarget":1881162428,"context":"","framePointer":2155882688},{"callSite":2153353452,"calledTarget":2153347924,"context":"","framePointer":2155882792},{"callSite":2150301328,"calledTarget":2153353344,"context":"","framePointer":2155882912},{"callSite":2150371024,"calledTarget":2150301108,"context":"","framePointer":2155883016},{"callSite":2150371224,"calledTarget":2150370784,"context":"","framePointer":2155883128},{"callSite":2150098064,"calledTarget":2150371156,"context":"","framePointer":2155883224},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2155883656},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155883752},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155883848},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155883944}],"instructionPointer":2153348088,"stackBottom":2155851272,"stackPointer":2155882688,"stackTop":2155884039,"threadId":184614932,"threadName":"PlgPpEnc","threadStatus":"WAITING_FOR_SYSTEM_EVENT"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155916416},{"callSite":2148039264,"calledTarget":2153351796,"context":"","framePointer":2155916552},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155916672},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155916768},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155916864}],"instructionPointer":2153351948,"stackBottom":2155884192,"stackPointer":2155916416,"stackTop":2155916959,"threadId":184614933,"threadName":"rmtPool","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155950376},{"callSite":2148039264,"calledTarget":2153351796,"context":"","framePointer":2155950512},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155950632},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155950728},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155950824}],"instructionPointer":2153351948,"stackBottom":2155918152,"stackPointer":2155950376,"stackTop":2155950919,"threadId":184614934,"threadName":"rmtPool","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2155982512},{"callSite":2147994912,"calledTarget":2153351796,"context":"","framePointer":2155982648},{"callSite":2148021756,"calledTarget":2147994828,"context":"","framePointer":2155982776},{"callSite":2148036060,"calledTarget":0,"context":"Thread handler","framePointer":2155982880},{"callSite":2148020960,"calledTarget":0,"context":"Thread handler","framePointer":2155982992},{"callSite":2150040728,"calledTarget":2148020928,"context":"","framePointer":2155983088},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2155983312},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2155983408},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2155983504},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2155983600}],"instructionPointer":2153351948,"stackBottom":2155950928,"stackPointer":2155982512,"stackTop":2155983695,"threadId":184614935,"threadName":"PlgSrcMipi","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156015928},{"callSite":2148039264,"calledTarget":2153351796,"context":"","framePointer":2156016064},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156016184},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156016280},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156016376}],"instructionPointer":2153351948,"stackBottom":2155983704,"stackPointer":2156015928,"stackTop":2156016471,"threadId":184614936,"threadName":"rmtPool","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156056496},{"callSite":2147994812,"calledTarget":2153351796,"context":"","framePointer":2156056632},{"callSite":2148019592,"calledTarget":2147994728,"context":"","framePointer":2156056760},{"callSite":2148013232,"calledTarget":0,"context":"Thread handler","framePointer":2156056864},{"callSite":2148006204,"calledTarget":0,"context":"Thread handler","framePointer":2156056976},{"callSite":2150023692,"calledTarget":2148006172,"context":"","framePointer":2156057072},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2156057224},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156057320},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156057416},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156057512}],"instructionPointer":2153351948,"stackBottom":2156024840,"stackPointer":2156056496,"stackTop":2156057607,"threadId":184614937,"threadName":"PlgIspCtrl","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156089816},{"callSite":2147994912,"calledTarget":2153351796,"context":"","framePointer":2156089952},{"callSite":2148057416,"calledTarget":2147994828,"context":"","framePointer":2156090080},{"callSite":2148035796,"calledTarget":0,"context":"Thread handler","framePointer":2156090192},{"callSite":2148020680,"calledTarget":0,"context":"Thread handler","framePointer":2156090304},{"callSite":2150024940,"calledTarget":2148020648,"context":"","framePointer":2156090400},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2156090728},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156090824},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156090920},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156091016}],"instructionPointer":2153351948,"stackBottom":2156058344,"stackPointer":2156089816,"stackTop":2156091111,"threadId":184614938,"threadName":"PlgMonoIsp","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156123488},{"callSite":2148039264,"calledTarget":2153351796,"context":"","framePointer":2156123624},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156123744},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156123840},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156123936}],"instructionPointer":2153351948,"stackBottom":2156091264,"stackPointer":2156123488,"stackTop":2156124031,"threadId":184614939,"threadName":"rmtPool","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156156216},{"callSite":2148057092,"calledTarget":2153351796,"context":"","framePointer":2156156352},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2156156568},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156156664},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156156760},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156156856}],"instructionPointer":2153351948,"stackBottom":2156124184,"stackPointer":2156156216,"stackTop":2156156951,"threadId":184614940,"threadName":"RmtI","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156188568},{"callSite":2147994912,"calledTarget":2153351796,"context":"","framePointer":2156188704},{"callSite":2148021756,"calledTarget":2147994828,"context":"","framePointer":2156188832},{"callSite":2148036060,"calledTarget":0,"context":"Thread handler","framePointer":2156188936},{"callSite":2148020960,"calledTarget":0,"context":"Thread handler","framePointer":2156189048},{"callSite":2148027020,"calledTarget":2148020928,"context":"","framePointer":2156189144},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2156189488},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156189584},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156189680},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156189776}],"instructionPointer":2153351948,"stackBottom":2156157104,"stackPointer":2156188568,"stackTop":2156189871,"threadId":184614941,"threadName":"RmtO","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156221488},{"callSite":2147994912,"calledTarget":2153351796,"context":"","framePointer":2156221624},{"callSite":2148021756,"calledTarget":2147994828,"context":"","framePointer":2156221752},{"callSite":2148036060,"calledTarget":0,"context":"Thread handler","framePointer":2156221856},{"callSite":2148020960,"calledTarget":0,"context":"Thread handler","framePointer":2156221968},{"callSite":2148027020,"calledTarget":2148020928,"context":"","framePointer":2156222064},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2156222408},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156222504},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156222600},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156222696}],"instructionPointer":2153351948,"stackBottom":2156190024,"stackPointer":2156221488,"stackTop":2156222791,"threadId":184614942,"threadName":"MRmO","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156254528},{"callSite":2147994912,"calledTarget":2153351796,"context":"","framePointer":2156254664},{"callSite":2148021756,"calledTarget":2147994828,"context":"","framePointer":2156254792},{"callSite":2148036060,"calledTarget":0,"context":"Thread handler","framePointer":2156254896},{"callSite":2148020960,"calledTarget":0,"context":"Thread handler","framePointer":2156255008},{"callSite":2150040728,"calledTarget":2148020928,"context":"","framePointer":2156255104},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2156255328},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156255424},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156255520},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156255616}],"instructionPointer":2153351948,"stackBottom":2156222944,"stackPointer":2156254528,"stackTop":2156255711,"threadId":184614943,"threadName":"PlgSrcMipi","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156288088},{"callSite":2148039264,"calledTarget":2153351796,"context":"","framePointer":2156288224},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156288344},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156288440},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156288536}],"instructionPointer":2153351948,"stackBottom":2156255864,"stackPointer":2156288088,"stackTop":2156288631,"threadId":184614944,"threadName":"rmtPool","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156328840},{"callSite":2147994812,"calledTarget":2153351796,"context":"","framePointer":2156328976},{"callSite":2148019592,"calledTarget":2147994728,"context":"","framePointer":2156329104},{"callSite":2148013232,"calledTarget":0,"context":"Thread handler","framePointer":2156329208},{"callSite":2148006204,"calledTarget":0,"context":"Thread handler","framePointer":2156329320},{"callSite":2150023692,"calledTarget":2148006172,"context":"","framePointer":2156329416},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2156329568},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156329664},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156329760},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156329856}],"instructionPointer":2153351948,"stackBottom":2156297184,"stackPointer":2156328840,"stackTop":2156329951,"threadId":184614945,"threadName":"PlgIspCtrl","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156362016},{"callSite":2147994912,"calledTarget":2153351796,"context":"","framePointer":2156362152},{"callSite":2148057416,"calledTarget":2147994828,"context":"","framePointer":2156362280},{"callSite":2148035796,"calledTarget":0,"context":"Thread handler","framePointer":2156362392},{"callSite":2148020680,"calledTarget":0,"context":"Thread handler","framePointer":2156362504},{"callSite":2150024940,"calledTarget":2148020648,"context":"","framePointer":2156362600},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2156362928},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156363024},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156363120},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156363216}],"instructionPointer":2153351948,"stackBottom":2156330544,"stackPointer":2156362016,"stackTop":2156363311,"threadId":184614946,"threadName":"PlgMonoIsp","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156395688},{"callSite":2148039264,"calledTarget":2153351796,"context":"","framePointer":2156395824},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156395944},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156396040},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156396136}],"instructionPointer":2153351948,"stackBottom":2156363464,"stackPointer":2156395688,"stackTop":2156396231,"threadId":184614947,"threadName":"rmtPool","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156428416},{"callSite":2148057092,"calledTarget":2153351796,"context":"","framePointer":2156428552},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2156428768},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156428864},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156428960},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156429056}],"instructionPointer":2153351948,"stackBottom":2156396384,"stackPointer":2156428416,"stackTop":2156429151,"threadId":184614948,"threadName":"RmtI","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156460768},{"callSite":2147994912,"calledTarget":2153351796,"context":"","framePointer":2156460904},{"callSite":2148021756,"calledTarget":2147994828,"context":"","framePointer":2156461032},{"callSite":2148036060,"calledTarget":0,"context":"Thread handler","framePointer":2156461136},{"callSite":2148020960,"calledTarget":0,"context":"Thread handler","framePointer":2156461248},{"callSite":2148027020,"calledTarget":2148020928,"context":"","framePointer":2156461344},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2156461688},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156461784},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156461880},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156461976}],"instructionPointer":2153351948,"stackBottom":2156429304,"stackPointer":2156460768,"stackTop":2156462071,"threadId":184614949,"threadName":"RmtO","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156493688},{"callSite":2147994912,"calledTarget":2153351796,"context":"","framePointer":2156493824},{"callSite":2148021756,"calledTarget":2147994828,"context":"","framePointer":2156493952},{"callSite":2148036060,"calledTarget":0,"context":"Thread handler","framePointer":2156494056},{"callSite":2148020960,"calledTarget":0,"context":"Thread handler","framePointer":2156494168},{"callSite":2148027020,"calledTarget":2148020928,"context":"","framePointer":2156494264},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2156494608},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156494704},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156494800},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156494896}],"instructionPointer":2153351948,"stackBottom":2156462224,"stackPointer":2156493688,"stackTop":2156494991,"threadId":184614950,"threadName":"MRmO","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156526640},{"callSite":2147995112,"calledTarget":2153351796,"context":"","framePointer":2156526776},{"callSite":2148082068,"calledTarget":2147995028,"context":"","framePointer":2156526904},{"callSite":2148079732,"calledTarget":0,"context":"Thread handler","framePointer":2156527008},{"callSite":2148072584,"calledTarget":0,"context":"Thread handler","framePointer":2156527120},{"callSite":2149844236,"calledTarget":2148072552,"context":"","framePointer":2156527216},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2156527528},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156527624},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156527720},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156527816}],"instructionPointer":2153351948,"stackBottom":2156495144,"stackPointer":2156526640,"stackTop":2156527911,"threadId":184614951,"threadName":"RmtO","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156559560},{"callSite":2147995112,"calledTarget":2153351796,"context":"","framePointer":2156559696},{"callSite":2148080472,"calledTarget":2147995028,"context":"","framePointer":2156559824},{"callSite":2148923608,"calledTarget":0,"context":"Thread handler","framePointer":2156559928},{"callSite":2148918672,"calledTarget":0,"context":"Thread handler","framePointer":2156560040},{"callSite":2149841672,"calledTarget":2148918640,"context":"","framePointer":2156560136},{"callSite":2150000424,"calledTarget":0,"context":"Thread handler","framePointer":2156560448},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156560544},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156560640},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156560736}],"instructionPointer":2153351948,"stackBottom":2156528064,"stackPointer":2156559560,"stackTop":2156560831,"threadId":184614952,"threadName":"RmtO","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153382952,"calledTarget":2153371816,"context":"","framePointer":2156601320},{"callSite":2149115820,"calledTarget":2153382860,"context":"","framePointer":2156601456},{"callSite":2149119484,"calledTarget":2149114744,"context":"","framePointer":2156601808},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156601904},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156602000},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156602096}],"instructionPointer":2153382952,"stackBottom":2156569424,"stackPointer":2156601320,"stackTop":2156602191,"threadId":184614953,"threadName":"NeuralNetworkIn","threadStatus":"WAITING_FOR_MUTEX"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156634680},{"callSite":2149115864,"calledTarget":2148975920,"context":"","framePointer":2156634816},{"callSite":2149119484,"calledTarget":2149114744,"context":"","framePointer":2156635168},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156635264},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156635360},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156635456}],"instructionPointer":2153351948,"stackBottom":2156602784,"stackPointer":2156634680,"stackTop":2156635551,"threadId":184614954,"threadName":"NeuralNetworkIn","threadStatus":"WAITING_FOR_SEMAPHORE"},{"callStack":[{"callSite":2153348088,"calledTarget":1881162428,"context":"","framePointer":2156669376},{"callSite":2153347900,"calledTarget":2153347924,"context":"","framePointer":2156669480},{"callSite":2150033896,"calledTarget":2153347796,"context":"","framePointer":2156669600},{"callSite":2150034400,"calledTarget":2150033784,"context":"","framePointer":2156669760},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156669856},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156669952},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156670048}],"instructionPointer":2153348088,"stackBottom":2156637376,"stackPointer":2156669376,"stackTop":2156670143,"threadId":184614955,"threadName":"PlgSrcMipi","threadStatus":"WAITING_FOR_EVENT"},{"callStack":[{"callSite":2153355972,"calledTarget":2153371816,"context":"","framePointer":2156702224},{"callSite":2153339776,"calledTarget":2153355716,"context":"","framePointer":2156702320},{"callSite":2150035484,"calledTarget":2153339624,"context":"","framePointer":2156702456},{"callSite":2150037228,"calledTarget":2150035356,"context":"","framePointer":2156702680},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156702776},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156702872},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156702968}],"instructionPointer":2153355972,"stackBottom":2156670296,"stackPointer":2156702224,"stackTop":2156703063,"threadId":184614956,"threadName":"PlgSrcMipi","threadStatus":"WAITING_FOR_MESSAGE"},{"callStack":[{"callSite":2153348088,"calledTarget":1881162428,"context":"","framePointer":2156736888},{"callSite":2153347900,"calledTarget":2153347924,"context":"","framePointer":2156736992},{"callSite":2150033896,"calledTarget":2153347796,"context":"","framePointer":2156737112},{"callSite":2150034400,"calledTarget":2150033784,"context":"","framePointer":2156737272},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156737368},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156737464},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156737560}],"instructionPointer":2153348088,"stackBottom":2156704888,"stackPointer":2156736888,"stackTop":2156737655,"threadId":184614957,"threadName":"PlgSrcMipi","threadStatus":"WAITING_FOR_EVENT"},{"callStack":[{"callSite":2153355972,"calledTarget":2153371816,"context":"","framePointer":2156769736},{"callSite":2153339776,"calledTarget":2153355716,"context":"","framePointer":2156769832},{"callSite":2150035484,"calledTarget":2153339624,"context":"","framePointer":2156769968},{"callSite":2150037228,"calledTarget":2150035356,"context":"","framePointer":2156770192},{"callSite":2153370968,"calledTarget":0,"context":"Thread handler","framePointer":2156770288},{"callSite":1881162860,"calledTarget":0,"context":"Thread handler","framePointer":2156770384},{"callSite":1881162764,"calledTarget":0,"context":"Thread exit","framePointer":2156770480}],"instructionPointer":2153355972,"stackBottom":2156737808,"stackPointer":2156769736,"stackTop":2156770575,"threadId":184614958,"threadName":"PlgSrcMipi","threadStatus":"WAITING_FOR_MESSAGE"},{"callStack":[{"callSite":2153351948,"calledTarget":2153371816,"context":"","framePointer":2156804160},{"callSite":2147994812,"calledTarget":2153351796,"context":"","framePointer":2156804296},{"callSite":2148019592,"calledTarget":2147994728,"context":"","framePoint
When I used 60 fps, it seemed to work okay. But all the cameras on the Pro should be able to run at 120 fps, right?
With 60 fps I tested the strobe signal again:
The signals are the same as the previous scope screenshots.
Here the most important parts from the code:
def get_camera_settings(camera_settings_path):
config = configparser.ConfigParser()
config.read(camera_settings_path)
ctrl = dai.CameraControl()
exposure = config.getint('CONFIG', 'exposure')
iso = config.getint('CONFIG', 'iso')
whitebalancecolor = config.getint('CONFIG', 'whitebalancecolor')
ctrl.setManualExposure(exposure, iso) # exposure
ctrl.setManualWhiteBalance(whitebalancecolor) # colortemp metaphase illumination is 6000K
ctrl.setAutoWhiteBalanceMode(dai.CameraControl.AutoWhiteBalanceMode.OFF) # autowhitebalance mode off
ctrl.setAntiBandingMode(dai.CameraControl.AntiBandingMode.OFF)
saturation = config.getint('CONFIG', 'saturation')
contrast = config.getint('CONFIG', 'contrast')
brightness = config.getint('CONFIG', 'brightness')
sharpness = config.getint('CONFIG', 'sharpness')
luma_denoise = config.getint('CONFIG', 'luma_denoise')
chroma_denoise = config.getint('CONFIG', 'chroma_denoise')
ctrl.setBrightness(brightness)
ctrl.setContrast(contrast)
ctrl.setSaturation(saturation)
ctrl.setSharpness(sharpness)
ctrl.setLumaDenoise(luma_denoise)
ctrl.setChromaDenoise(chroma_denoise)
return ctrl
nnPath, config_path = find_model_and_config(args.directory)
with config_path.open() as f:
config = json.load(f)
nnConfig = config.get("nn_config", {})
# parse input shape
if "input_size" in nnConfig:
W, H = tuple(map(int, nnConfig.get("input_size").split('x')))
# extract metadata
metadata = nnConfig.get("NN_specific_metadata", {})
classes = metadata.get("classes", {})
coordinates = metadata.get("coordinates", {})
anchors = metadata.get("anchors", {})
anchorMasks = metadata.get("anchor_masks", {})
iouThreshold = metadata.get("iou_threshold", {})
confidenceThreshold = metadata.get("confidence_threshold", {})
print(metadata)
# parse labels
nnMappings = config.get("mappings", {})
labels = nnMappings.get("labels", {})
# sync outputs
syncNN = True
# Create pipeline
pipeline = dai.Pipeline()
pipeline.setOpenVINOVersion(version=dai.OpenVINO.VERSION_2021_4)
# Define sources and outputs
camRgb = pipeline.create(dai.node.ColorCamera)
monoLeft = pipeline.create(dai.node.MonoCamera)
monoRight = pipeline.create(dai.node.MonoCamera)
detectionNetwork = pipeline.create(dai.node.YoloDetectionNetwork)
xoutRgb = pipeline.create(dai.node.XLinkOut)
nnOut = pipeline.create(dai.node.XLinkOut)
xoutRgb.setStreamName("rgb")
nnOut.setStreamName("nn")
if not args.external_trigger:
fps = 10
# Properties
camRgb.setResolution(dai.ColorCameraProperties.SensorResolution.THE_800_P)
camRgb.setInterleaved(False)
camRgb.setColorOrder(dai.ColorCameraProperties.ColorOrder.BGR)
camRgb.setPreviewSize(W, H)
# manip = pipeline.create(dai.node.ImageManip)
# manip.setResize(W, H)
# # manip.setKeepAspectRatio(True)
# manip.setFrameType(dai.RawImgFrame.Type.BGR888p)
# camRgb.video.link(manip.inputImage)
# manip.out.link(detectionNetwork.input)
camControlIn = pipeline.create(dai.node.XLinkIn)
camControlIn.setStreamName('camControl')
camControlIn.out.link(camRgb.inputControl)
if args.external_trigger:
# camRgb.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT)
# monoLeft.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT)
# monoRight.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT)
numFramesBurst = 1
numFramesDiscard = 0
camRgb.initialControl.setExternalTrigger(numFramesBurst, numFramesDiscard)
monoLeft.initialControl.setExternalTrigger(numFramesBurst, numFramesDiscard)
monoRight.initialControl.setExternalTrigger(numFramesBurst, numFramesDiscard)
camRgb.setFps(60)
monoLeft.setFps(60)
monoRight.setFps(60)
else:
camRgb.setFps(fps)
monoLeft.setFps(fps)
monoRight.setFps(fps)
# Network specific settings
detectionNetwork.setConfidenceThreshold(confidenceThreshold)
detectionNetwork.setNumClasses(classes)
detectionNetwork.setCoordinateSize(coordinates)
detectionNetwork.setAnchors(anchors)
detectionNetwork.setAnchorMasks(anchorMasks)
detectionNetwork.setIouThreshold(iouThreshold)
detectionNetwork.setBlobPath(nnPath)
detectionNetwork.setNumInferenceThreads(2)
detectionNetwork.input.setBlocking(False)
# Linking
camRgb.preview.link(detectionNetwork.input)
detectionNetwork.passthrough.link(xoutRgb.input)
detectionNetwork.out.link(nnOut.input)
if args.save_frames:
os.makedirs(args.savelocation, exist_ok=True)
session_dirs = os.listdir(args.savelocation)
output_folder = os.path.join(args.savelocation, 'session_{:05d}'.format(len(session_dirs)))
os.makedirs(output_folder, exist_ok=True)
# Connect to device and start pipeline
with dai.Device(pipeline) as device:
qControl = device.getInputQueue(name="camControl")
qControl.send(get_camera_settings(args.camera_settings))
# Output queues will be used to get the rgb frames and nn data from the outputs defined above
qRgb = device.getOutputQueue(name="rgb", maxSize=4, blocking=False)
qDet = device.getOutputQueue(name="nn", maxSize=4, blocking=False)
Thanks for your help!
Thanks! I can reproduce this issue with the STROBE as well, there is one more period, vs. the expected number of frames in burst.
However, it appears that the frame being streamed on MIPI properly follows the expected exposure/strobe interval. We'll check more on why OV9282 has this behavior, and if there's a way to disable generating that extra strobe interval.
I took some scope captures with the below configurations. Signals measured at sensor side (1.8V). Fsync signal was generated for test from a Script node (similar to luxonis/depthai-pythonmain → alex-luxonis
:depthai-python:fsync_gpio_ffc_4p )
cam[c].setFps(100) # just to have a nice 10ms strobe period on scope
burst = 1, exposure = 4ms
cam[c].initialControl.setManualExposure(4000, 100) cam[c].initialControl.setExternalTrigger(1, 0)
^ it can also be noticed that when the unexpected second strobe period starts, there's some extra blanking (idle time) on MIPI, which is a bit weird, but shouldn't cause issuesexposure = 1ms
cam[c].initialControl.setManualExposure(1000, 100) cam[c].initialControl.setExternalTrigger(1, 0)
burst = 2 (with ignore = 1), exposure = 1ms
cam[c].initialControl.setManualExposure(1000, 100) cam[c].initialControl.setExternalTrigger(2, 1)
About .setFps(120)
, that should work as well, and even up to 129.6 (auto-capped if higher) at THE_800_P
. In the quick tests I did, it seemed good, I'll test more and see if possible to replicate the crash you have observed. I have tested on the depthai-python develop
branch, on top of the v2.24.0.0 release.
And unrelated to the latest discussions, for the crash observed after some time with GPIO.setInterrupt(AUX_GPIO, GPIO.RISING, 1)
, it's caused by the priority - last parameter of 1
. Currently that issue doesn't happen if that number is set 16
or higher (range 0..255). We'll fix this is firmware, to be translated to a safe range.
Nice that you were able to reproduce the error. What strobe pulse should I look for when the scene was captured? Is it the first rising edge?
It's good to know that there will be a firmware upgrade for the interrupt. If I had the time, I would surely test it with a different priority value. For the time being, I'm working on getting my system to operate with the OAK-D PRO as a cam.
Thank you for your replies.
fredrik
Yes, on the OAK device M8 connector where the signals are inverted due to opto-isolators:
- the falling edge of FSYNC is the trigger
- if no frames are set to be discarded on trigger, then first pulse (inverted, low-active) marks the exposure window: exposure start on first falling edge, exposure end on next rising edge. The frame is streamed out on MIPI immediately after exposure end.