Re: vdr-1.5.10, dxr3 and subtitles

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Util Linux NG]     [Xfree86]     [Big List of Linux Books]     [Fedora Users]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux