Archive for February, 2008
Release 0.1.4: Pink-be-gone!
The big change in this release (or perhaps the one which will make the most people happy) is the fix for the “pink screen” issue affecting GMA X3100 video hardware. It turns out that there is a serious bug (apparently one of many!) in the OS X driver which completely breaks support for the negation of constants in shaders. I had to modify the output of the NVidia compiler to make sure that constants were never negated (the constants are the things like “c[0].x”). I can’t even tell you how serious a bug this is. Just imagine if this were the case in a C++ compiler… Many thanks to d4rk for showing me how to get the shader compiling in the first place.
Here the the other changes in this release:
- NEW: Support for using the scroll wheel with the mouse.
- FIX: International character sets (and funky characters in English) now work. Go Spanish! Non Western European characters probably work too with that Unicode font. N.B. There is still a problem when displaying *filesystem* entries; I’m working on it.
- FIX: Don’t dim the screen when the screensaver kicks in unless we’re in full-screen mode. It’s scary and makes people think their LCD is dying.
- NEW: Make ‘Done’ the default key selected in the virtual keyboard. It really makes keyboard entry much more natural. Thanks to ScottTFrazer for the suggestion!
- NEW: All standard output logging has been moved to the /var/tmp/xbmc.log file. This means that (a) I will never ask you to run from the terminal again and (b) I’ll be asking you for that file a lot more.
- FIX: The audio output is no longer stuck in digital mode.
- NEW: Support for mounting SMB filesystems using the OS’ support for it. This was introduced by vulkanr in this change. It seems to work well, but if the SMB share is inaccessible, XBMC hangs on start for quite a while waiting for the mount to timeout. Let me know which options provides better performance.
- FIX: Store mediasources.xml in the Application Support/XBMC directory, instead inside the application bundle. You’ll have to move yours there if you want to maintain settings.
- FIX: There was a naming conflict between the SMB client code and some other library I can’t remember, which was causing the application to crash quite a bit when using SMB.
- FIX: The infamous hang-or-crash-on-exit bug has been nailed. I double-dare any of you to hang XBMC on exit!
- NOTE: Make sure your vertical sync is enabled (set to Always Enabled). People were complaining of video issues and tearing. It’s in Settings -> Appearance -> Screen.
- NOTE: I’ve been able to play FLAC files without a problem. I’m not sure why people (or only a couple of people?) are unable to play them.
The surprise feature in this release is basic support for the Apple Remote. It’s very basic and will be enhanced much more, but here is what’s supported for now:
- Left, Right, Up, Down: As expected, and no support for volume (isn’t everyone using their receiver remote for this anyway?)
- Play/pause: As expected.
- Menu: Up one level.
- Double-click Play brings up context menu.
- When in full-screen video, the menu button brings up the menu, and holding down the menu button stops and returns you to the browser.
Really simple, but hopefully useful, and also hopefully it doesn’t break people who are using Remote Buddy.
As usual, enjoy the release, brought to you by Barkley and my sweet wife, who have both been really supportive of all my late nights.
X3100 problem fixed!
I need to clean up some code and then I’ll make a release later on tonight (and check in my changes, sorry it’s been so long). It turned out to be a blatant bug in the fragment shader runtime or assembler, which I have worked around. More details later.

X3100 Battle Continues
Very strange…there appears to be something fundamentally wrong or different with the X3100, as best I can tell from my extremely limited experience with such things. Which probably means I’m completely wrong.
D4rk helped me get set up compiling my own fragment programs (thank you!). The approach I took is what I always do, which is get the working code on one end, the non-working code on the other, and then move towards the middle until you find out what breaks.
I took out all the matrix multiplication, and just started with some basic transformations to see what worked. While rgb.r = 1.164 * yuv.r; produced the expected pixel color rgb.r = 1.164 * (yuv.r – 16.0/256.0) + 1.596 * (yuv.b – 128.0/256.0); doesn’t (at least according to my Numbers spreadsheet). So tomorrow I’ll do some more back and forth to see if I can figure out why the second formula isn’t working. (Note that it DOES work on an NVidia card). Doing debugging where the only way to output debugging information is through 0-1 values in pixel color components has given me new respect for people who work in that field.
4 comments