2007/11/3, Klaus Schmidinger <Klaus.Schmidinger@xxxxxxxxxx>: > VDR reduces the colors if the output device can't display all of them. > > Maybe the dxr3 device doesn't correctly respond to the CanHandleAreas() > call? > > See cDvbSubtitleConverter::FinishPage(), the calls to sr->ReduceBpp() > and sr->ShrinkBpp(). Yes, I think you are probably right. I looked at the code and modified it so that bpp ís always reduced to 2 (I think) - hack included. I'm not a programmer and know nothing about C++, really. But it works for me (kind of - see below). Of course, this is not a proper fix. But, I think from previous the discussion here, that the color depth dxr3 can handle isn't that straightforward for. It can handle 8bpp but in a limited way; so just reducing bpp would not use the dxr3 hardware to the full potential. Some additional checking and processing is needed? Though I'm just an end user really, I don't know really, I'm kind of guessing =). Anyways, the subtitles look really good even with 2bpp, so in this case I think just reducing is sufficient. There's still problem even after reducing the bpp; I think the OSD levels isn't properly implemented in the CVS (dxr3-0-2 branch). I'll post about this in the dxr3plugin-users list. (Symptoms: No other OSD is shown while subtitles are shown, previous subtitles aren't "cleared"). - Ville -- Ville Aakko - ville.aakko@xxxxxxxxx
diff -Naur vdr-1.5.10/dvbsubtitle.c vdr-1.5.10.old/dvbsubtitle.c --- vdr-1.5.10/dvbsubtitle.c 2007-11-04 13:01:35.000000000 +0200 +++ vdr-1.5.10.old/dvbsubtitle.c 2007-11-04 12:59:42.000000000 +0200 @@ -984,10 +984,10 @@ int NumAreas = Page->regions.Count(); int Bpp = 8; bool Reduced = false; -// while (osd->CanHandleAreas(Areas, NumAreas) != oeOk) { + while (osd->CanHandleAreas(Areas, NumAreas) != oeOk) { int HalfBpp = Bpp / 2; if (HalfBpp >= 2) { - while (int i = 0; i < NumAreas; i++) { + for (int i = 0; i < NumAreas; i++) { if (Areas[i].bpp >= Bpp) { Areas[i].bpp = HalfBpp; Reduced = true; @@ -997,7 +997,7 @@ } else return; // unable to draw bitmaps -// } + } if (Reduced) { for (int i = 0; i < NumAreas; i++) { cSubtitleRegion *sr = Page->regions.Get(i);
_______________________________________________ vdr mailing list vdr@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr