Hi all,
I used to follow the vdr development between 1.3.x and 1.6.0. I stopped
updating my system around 2007, because it was working well enough for
me.
This year, I bought a Samsung SmartTV, hoping that it could be replace
the old PC. Little did I know that the USB interface does not deliver
enough power to USB-powered hard disks, or that the TV wants to encrypt
all recordings with a device-specific key, in *.srf files.
So, I decided to revive my aging VDR setup, and maybe use DLNA or the
http://projects.vdr-developer.org/projects/plg-smarttvweb/wiki/SamsungSmartTVClient
as the primary output method once the system has been upgraded. I
installed a recent Debian distribution and compiled vdr 2.0.4, DirectFB
1.0.1, DFB++ 1.0.1, ffmpeg (latest 0.5 or 0.6 IIRC; 0.9 was already too
new) and latest softdevice-cvs. I had to patch softdevice a little.
Finally, I got a smooth picture with -P'softdevice -vo dfb:mgatv' on a
nearly-HDTV VGA panel. Not bad for 11-year-old hardware.
The only remaining problem is that I do not see any OSD menu. Usually
when I activate the OSD, I get a random square (often white) somewhere,
sometimes on the top left corner of the screen. It turned out that this
square is being written by osd.c. cSoftOsd in softdevice is derived from
cOsd. It overrides cOsd::SetAreas() so that it can ignore OSD events
when the output is suspended. Otherwise, it is just calling the method
in the base class. You can see the code at
http://cvs.berlios.de/cgi-bin/viewcvs.cgi/softdevice/softdevice/SoftOsd.c?view=annotate
From the Softdevice diagnostic messages and code I understood that the
Matrox MGA450 might not support an alpha channel on the primary layer
that is overlaid on top of the back end scaler (BES) layer. Instead, it
could simply be a color key (black is transparent). The pixel format of
the OSD seems to be 32bpp nevertheless.
The problematic code is in cOsd::SetAreas(), vdr-2.0.4/osd.c:1811
onwards:
isTrueColor = NumAreas == 1 && Areas[0].bpp == 32;
if (isTrueColor) {
width = Areas[0].x2 - Areas[0].x1 + 1;
height = Areas[0].y2 - Areas[0].y1 + 1;
cPixmap *Pixmap = CreatePixmap(0, cRect(Areas[0].x1, Areas[0].y1, width, height));
Pixmap->Clear();
bitmaps[numBitmaps++] = new cBitmap(10, 10, 8); // dummy bitmap for GetBitmap()
}
else {
If I change the assignment to isTrueColor=false, the square goes away
and I will get the familiar gray rectangles on the screen (from the
"else" block that I omitted above). For example, when I press OK, there
will be a rectangle at the bottom. Unfortunately, the rectangles are all
gray, no other colours or text in them. According to strace, fontconfig
and some *.ttf fonts are being loaded, so I suppose that the graphics
are being generated, and the problem is somewhere in cOsd or cSoftOsd.
Could someone help me get more than the rectangles on the screen?
Best regards,
Marko
_______________________________________________
vdr mailing list
vdr@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr