vdr-1.5.10, dxr3 and subtitles
Commit Message
2007/11/3, Klaus Schmidinger <Klaus.Schmidinger@cadsoft.de>:
> 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
@@ -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);