Until the Kalman release, which I am still running, I could capture color camera images via a call on TangoService_connectOnFrameAvailable. This call still returns OK, but the provided callback function is never called, for either camera. I have forcibly removed and reinstalled the project tango core. I would check against reference code, but according to GitHub, there isn't a single call to this function in the C samples. I've walked this enough to be reasonably sure it ain't me. The callback simply never occurs. It used to. It needs to.
This is a bug confirmed by the dev team in a previous post
I am sure they will fix it soon.
Related
Foreword
Since this appears to be a bug in the d3d9 Emulation on the Windows side, this would probably best addressed to Microsoft. If you know where I could get into contact with the DirectX Team, please tell me.
For the time being, I'm assuming that the only real chance we have is working around the bug.
What
We're investigating an inresponsiveness found in the Game Test Drive Unlimited 2.
Only when opening the Map and only when having an "RTX" Card (I think the most precise we got is GDDR6, because AMD also seems affected).
After long debugging, we found out, that it's not a simple fault of the game, but instead Present returning D3DERR_DEVICELOST even when having the game in Windowed Mode.
When the Game is in Fullscreen Mode, it properly does the required roundtrip over TestCooperativeLevel and Reset, but after the next frame is rendered, Present has lost the device again, causing the Hangup.
Now I'm looking for pointers on how to solve this issue. While it's probably some internal state corruption of some sorts, it's definitely triggered by an API Call only present when rendering the Map in that Game.
We will try to dig into d3d9.dll, but my suspicion is that the error code just comes from some Kernel/Driver Call, where our knowledge and tooling ends.
Ideally I'd like to fuzzy-find the drawcall by just hooking everything and omitting random apicalls, but I guess it's just not so easy and causes a lot more errors in most conditions.
Also note that an APITrace we did, showed D3D_OK for every single call including EndScene, up until Present, so it's not as simple as checking the return codes.
Trying to use Direct X 9 in Debug/Diagnostic Mode is also not really possible on Windows 10 anymore apparently, even when installing the SDK from June 2010
Thanks in Advance for any idea and maybe addresses to direct this problem to.
I know this sounds like a weird question.
I have a Xamarin.Android app. I'm going through my code and cleaning up stuff that was too aggressively wrapped with calls to RunOnUiThread. My understanding is that code that runs in response to UI events, for example, is already on the UI thread and therefore doesn't need to be wrapped. I don't like the idea of RunOnUiThread calls just sprinkled everywhere like magical pixie dust.
I've removed a bunch of these calls, and preserved the ones I think are necessary. When I run the app, everything works great. But not even a single crash on the first try seemed almost too good to be true, so as a sanity check, I tried to intentionally crash the app by adding UI update code in places where I expected it to be required to be wrapped by RunOnUiThread. However, nothing I do causes that effect!
This makes me concerned that there is some magic happening somewhere that is preventing me from seeing a problem.
The last thing I tried, which I thought would surely crash the app, was to use a Java.Util.Timer to execute a Java.Util.TimerTask that sets the Alpha on an ImageView to 0.5. But still the app hums merrily along!
Now I am totally suspicious that something -- maybe some new OS feature -- is silently fixing things but that customers running in some other configuration will experience crashes. I want to see the error so that I can have confidence that when I don't see it, things are OK.
So, what can I do to intentionally get the Only the original thread that created a view hierarchy can touch its views error?
I'm using the Java sdk. I've set my TangoConfig to have autorecovery=false, so that I can prompt the user to reset motion tracking whenever she sees fit after receiving a Tango pose data with status=invalid. Currently, whenever I get my device to fail at continuing motion tracking, I see that it stops giving me new pose datas in the listener callback, but I never get an PoseData that is invalid to signify that tracking has ceased. This all used to work for me, but recent versions of the SDK have failed to provide this callback as necessary. Anyone else experiencing something similar? Any ideas at what to look for to understand if something may be incorrect here?
I have the same issue using the Unity integration.
I also tried getPoseAtTime() with time values of 0 or Time.realTimeSinceStartup. But I never get a pose with with an invalid status.
I know of another developer who also has this bug, and says it was introduced about 3 months ago.
The support page says that Tango devs monitor this tag, so hopefully they'll read this and fix it!
The UX Framework has an exception for loss of motion tracking. So that may be a work around in the meantime.
It appears that a large fraction of Tango users are experiencing issues since Leibniz was pushed out. I found this post in another thread and thought it might be why I am seeing so much instability in my app after the update:
This is from: TangoService_connectOnFrameAvailable() gets stuck or crashes using Google Tango Leibniz Release 1.10
"Apologies, that you are experiencing problems. Is this still happening? I am asking this because, there was a bit of leeway in timing between when the TangoCore was updated on PlayStore and when the OTA went out (which can potentially cause this issue, if OTA and TangoCore are mismatched). I just want to make sure that you are are updated on both TangoCore and OTA before diagnosing it. Also, make sure you have permissions for camera in the android manifestl." – r4ravi2008
I am pretty sure that the reason I am having problems is because I do have the mismatch described above. I have Tango Core updated through Google Play, but if I got to "About Tablet" I see:
Build number: KOT49H.150320
Also, my Kernel version has an updated date of Friday March 20th.
This build number is exactly the build number referenced here: https://developers.google.com/project-tango/hardware/depth-test
However, on this page it says that this build is for Kalman (not Leibniz). When I try the suggested step of going to "System Updates" and clicking "Check for Update" the system says that it is up to date (even though apparently it did not receive the latest OTA).
Two questions:
Am I correct in that Kernel (OTA) and project tango core are mismatched?
If so, how do I fix this?
Thanks in advance...
Apologies in advance as this is rather a comment than an answer to Voxel Scanner Voxxlr's post... But as I don't have 50 reputation points I cannot leave comments...
Well, like Mark I reset the device to factory settings and carefully updated everything (PlayStore, System Update)... Then, I made super sure that the correct tango_client_api.h/.so is used in my project... Et voila, suddenly it worked... Generally, it seems to be a good idea to spend as little time in the callbacks as possible... Otherwise you can observe these "hiccups" Mark is reporting... After considerable rearrangements in my code everything runs smoothly again... I can also confirm that the color frames are OK... If you are interested in my converter code: I posted it here link
My solution was to use a blunt instrument - force the Tango to do a full factory reset and let it start all over again- I can say that Explorer seems to work fine and the unity pointcloud and tracking samples work, but I'm just getting started and absolutely nothing in this statement should be misconstrued as an endorsement - remember, YMMV :-)
Yeah, no. The Unity Point Cloud sample hiccups all the time with respect to displaying point clouds, and crashes after a minute or two :-(
I believe so, I had similar problems where point cloud and motion tracking would get lost every couple seconds and eventually the app would crash. But just yesterday, my device said there was an update, while previous manual system checks kept saying it was up to date. After updating, the build number lists KOT49H.150414 (Kernel date is April 14, 2015), so that seems to be the actual Leibniz release on the device (not just the Core and SDK), and things are much more stable now.
Also just got the color data and displaying it like an AR image, but it's still in YUV format so everything is red. Working on converting it to RGB, but things seem to be working much better now.
Not sure if this technically qualifies as an answer, but I received this message from Google tango support:
Hi there,
What you are experiencing is a known bug that we have found fix too. Please stay tuned to our next OTA update that will fix this issue. We hope to push this update as soon as possible and thanks for your patience.
Best,
Monty
Project Tango Support
I am honestly not quite sure how to interpret this. What exactly is the bug? That my device won't download the latest OTA? Based on Brian's post, it really does seem that I have a mismatch between Tango Core and the kernel that needs to be remedied to get acceptable performance.
See Google+ Tango Page for info on the issue - there was an OTA update issue - it is being corrected
Not sure if this is an appropriate programming question or not; but here goes....
I've written a very simple add-on that displays text/plays a sound when certain spells become usable (Overpower / Revenge).
But I've been unable to find the appropriate event to listen for to check this. My hack-ish approach is to simply check the state of the spells I care about whenever any event is passed to me.
Is there a specific event that I can be using? I went through the docs on WoWWiki and didn't seem to find anything relevant.
There used to be an addon that kept you spelled up, I forgot its name... it was GREAT! For a while I had more rage than I knew what to do with. But Blizzard decided that that was taking too much action out of player hands, so they stopped generating events for this kinda thing. Specifically, since about 2 years ago their policy is that no player actions (moving, casting, etc.) can be initiated by game events.
Nowadays, addons hook into things like the movement keys and check the status of spellups whenever the player moves around. It's klutzy, but comes reasonably close to doing what you want.
Still, you're not looking to initiate player action, just diddle with the GUI. That should still be possible. Lemme take a look...
One of the best resources for WOW addon programming is the WoW Wiki, from which I've just quoted a link to the buff event list. It looks like the UNIT_AURA event might be the one you're looking for, but go see for yourself!
I'd recommend using COMBAT_LOG_EVENT_UNFILTERED.I use it in an addon I wrote to notify me of certain spell procs and it works great.
I usually use wowprogramming.com for API documentation but in this case wowwiki does have a better description of the event and how to use it.
With the recent 3.3 patch this event isn't firing correctly for certain spell procs so just keep that in mind if it doesn't seem to be working for you.