Hi @fredrik ,
I think using GPIO to read when to "capture" frames would be the best option as you mentioned, and then Script node can be used to determine which frames to send to the host.
Looking at connectors, you could use pin1 on m8 connector for GPIO (which is processors pin 52):
https://docs.luxonis.com/projects/hardware/en/latest/pages/NG9097s2/#connectors
WRT Strobe, you could log when you received a gpio signal (log timestamp), as imgFrame carries information about the capture time and exposure time.
Thoughts?
Thanks, Erik
How to get precise external timing on OAK-D S2 POE
Hello, @erik.
Thank you for your prompt reply.
Using GPIO52 appears to be the most effective solution.
But this pin does not have any protection like the FSYNC, correct?
Can the FSYNC and STROBE GPIOs be used in a different way than they are currently?
Is this not achievable because of firmware or hardware issues?
I will keep you updated about the solution.
Best wishes! Fredrik
Hi @erik ,
thanks for the explanation. The FSYNC is probably not needed to read as an IO since time logging is already supported in the firmware as far as I know.
To which cam is the STROBE connected?
Is there a description about the timing of the STROBE signal? In this case it's the blue signal. I didn't get yet why it's not one single pulse and what the edges mean.
Hope to hear from you.
Hi @Luxonis-Alex, do you perhaps know why the strobe has the strange short pulse (rising back up)?
@Luxonis-Alex @erik I connected the STROBE signal through an 1.2K Ohm resistor to an 12VDC source.
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.
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!