Last Post

I felt like I should write one more final post here for the off chance someone reads through all of this.

In the prior post, I showed the working display correction using homographies. We all had stayed up all night because we had our checkoff with the professors at noon. I made the homographies work in a satisfactory way around 10am that morning. The checkoff went OK for me at least -- the professors were somewhat dissatisfied with a couple other parts of the project.

We thought we would polish everything up in the week between checkoffs and our final presentations. Instead, all momentum was lost. That was the first weekend I had taken off for the entire quarter. Prior to that, I came in almost every day and probably averaged 50 hours a week working in lab (and many more sitting there doing homework or reading or something else for myself). Leaving our lab and graduating on July 14th felt very strange to me. During the summer, I made a few return trips to gather my things from the lab that was not ours anymore.

I essentially lived in there during my final quarter, and while it was a satisfying climax for my undergraduate career, it was a grueling experience. In retrospect, it was satisfying overall, I suppose. I wish our project had turned out more complete than it did. I regret that the display correction code occupied most of my time; there were several other parts of the project that I wanted to attack. I did not get around to implementing any of the "to do" ideas from my previous post. I resurrected my older mouse driver toward the end, and almost had it completely working.

At the beginning of summer, I gave Tom (a grad student who inherited our work) a debriefing of everything. The first things he wanted to complete were the parts I had attacked or started: improve the display correction, implement a mouse driver, improve the networking.

After that debriefing, I ended up almost blocking out the project. I almost cringe when I think about large touchscreens now, only because I dumped so much time into that project. At the Penny Arcade Expo this summer, I saw a Microsoft Surface. Amusingly, it looked very familiar: people had pulled up a diagnostic program that showed the raw camera feeds inside the table.

Working on Scimp, and Compiz in particular, made me feel empowered to work on open source projects in my free time. During the summer though, I did not act on that impulse very much. Maybe I was too drained from the quarter, maybe my Florida vacation in July broke me, or maybe I am just fundamentally too lazy (I have been meaning to write this post for a while now..)

I spent most of my summer lounging around in Santa Cruz and trying to find a job. At the end of summer, shortly before I had to move out of my current place, I found a job as a temp worker at Google. On my resume, I had mentioned that we won first place in the senior design contest. The interview for this particular job (I got turned down late in the process interviewing for another Google position) was the first time the project came up in any detail. They seemed impressed.

I'm still in Santa Cruz now, commuting to Mountain View to work at Google for the next 9 months. After that, who knows. I would like to make a try at graduate school I think, but I am not sure how things will play out. I am still trying to get used to a normal 9-5 schedule which also requires me to get up early. I think I want to maintain the university philosophy and lifestyle in myself. I am fortunate to be working at Google, even if it is temporary: they maintain a very university-like environment, the people around me are brilliant, and I get exposure to working in a leading technology company.


Image Correction

Jas's latest homography is pretty good. It takes us from this:

To this:

I still need to implement mouse remapping support and make it read the homography out of a file. Currently, I have to recompile it to change the homography (I did only get it working 2 hours before checkoff). It is possible for me to pull Jas's entire OpenCV homography generation code into the plugin's startup code as well. These are all ideas for the coming week.



I've spent all of my lab time since discovering the bug mention in my last post trying to resolve it. I've tried all of the interesting Nvidia xorg.conf settings, all of the interesting settings from their config tool, several Xgl settings, and turning on Twinview. I haven't tried *permutations* of all these yet (ich), but I don't think it would help since I have observed no difference in Xgl's behavior. I am good at reproducing the bug, however.

Of course spending the last 30 hours troubleshooting it is time away from the plugin. I *need* to be able to run Compiz across all the video outputs for display correction to work as I've written it so far. Anything else would be a bit of an architecture shift.

Therefore, I'm suggesting we perhaps return the 9800 GTs I picked up and order a couple of these to run with one of Renau's cards.

It is a box that will split a single vga or dvi input into 3 dvi outputs. It does whatever hardware magic needs to happen to simple present one high-resolution screen to the PC. With two of them, we could drive 6 projectors from one videocard using one framebuffer which avoids the problem I'm having now.

The downside is the price: $600. On the other hand, we are doing OK on our budget right? And I did drop $120 x 3 on videocards this weekend so it isn't too extreme. Also, the whole setup tops out at 6 projectors I think.. unless we can daisy chain them..

The upside is that display correction will work and it liberates our software stack a lot. Using one card, there is no longer a dependency on Xinerama and therefore on Xgl and therefore on an older X server. Not using Xgl yields better performances, as does not using Xinerama -- graphics data does not have to be copied between cards. Not having to run an older X server lets us run with newer distros, and even better, with MPX.

Obviously it is a bit late now to realize all of those improvements. Just getting display correction working will be enough for now.

I remember talking about the triplehead2go boxes near the beginning of the quarter, and we did balk at them being pricy. I think more of what happened though is that I became focused on a certain approach because of the cards Renau gave us initially, and I did not realize when I stopped using the cards that the design could change in this way. There is probably some Ideo design pattern I should have been remembering in order to avoid that trap.



I spent the entire night trying to debug a showstopper bug I came across.

I put all those videocards into our computer, and noticed that windows would smear or draw incorrectly when moved across GPUs. I don't remember noticing it before when I had set up the GX2s back in the corner, but I can't recall having observed it being *correct* in these cases either. Although using it more while debugging, it is super annoying so I think I would have noticed.

I posted about it on Nvidia's forums, and linked them a video (had to host on my own because Google doesn't want me to put files over 11mb in the locker). I hope someone has a solution. If not, then the display side is kind of screwed.

It seems possible that it could be a bug in Xgl, but again, I am surprised I did not notice sooner. When I run a window manager on the display Xgl draws into, I can kind of manipulate the glitch by causing Xgl to redraw sometimes myself. That would kind of imply it is a problem with Xgl and/or (maybe) Damage, but the fact that it primarily occurs across gpus points back to Nvidia.

It figures something like this would take me down a notch right after I get a proof of concept going for the display correction.



I picked up three of these 9800 GTs at Frys on my way back from Maker Faire for $120 (after tax) each. Notice the connector on the right? It is component output, but I wonder if that can be converted back to composite? If so, we could run three projectors from 1 card..

Also, they come with molex to 6-pin power converters, so now *ONLY* the power supply wattage out to be an issue.

I was choosing between these and some 1024MB Geforce 9500 GTs which were about $75 before taxes. The 9800 has way more processing power, but I wasn't sure if the video memory would be a performance issue with a 3D desktop.

There used to be issues with video memory on Nvidia cards and a compositing window manager like Compiz, because each window needed to be backed by video memory. I just checked though, and it looks like it may have been fixed in this driver release, which is a bit older than even the old driver I'm installing on the final table.

Moment of truth

Compiz Plugin

My plugin may be doing the distortion now. I left last night when it seemed to be drawing a proper unmodified screen.

I need to reread my graphics book a little bit about display transforms and make up a simple homography to try. The homographies the plugin uses are just Opengl transformation matrices, nothing particularly special. I'm crossing my fingers and hoping most everything is in order now.