BUG : Channellist verschluckt letzte 1

Wünsche, Anträge, Fehlermeldungen
MarcM
Foren-Moderator
Beiträge: 1119
Registriert: Sonntag 9. Juni 2002, 13:28

BUG : Channellist verschluckt letzte 1

Beitrag von MarcM »

Hi,

irgendwie war mir hier stand schon mal ein Thread von rhabarber über genau das selbe Thema.... ich find ihn aber nicht mehr evtl. beim DB Crash verloren gegangen ? Da es mir gestern Abend wieder aufgefallen ist, hier also nochmal :

Wenn eine Sendung im EPG mit 1 endet, also so wie gestern Abend im "ZDF - Menschen 2011" verschluckt die Channelist die letzte 1. Die Infobar zeigts richtig, da ist alles OK...

Weiß nicht ob man das irgendwie reproduzieren kann....

Marc
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: BUG : Channellist verschluckt letzte 1

Beitrag von Gaucho316 »

Wird bei dir der Text links- oder rechtsbündig angezeigt?
MarcM
Foren-Moderator
Beiträge: 1119
Registriert: Sonntag 9. Juni 2002, 13:28

Re: BUG : Channellist verschluckt letzte 1

Beitrag von MarcM »

läßt sich das einstellen ?

schon immer linksbündig und ohne Fortschrittsbalken....

Marc
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: BUG : Channellist verschluckt letzte 1

Beitrag von Gaucho316 »

Dann ist wohl irgendwie die Berechnung der x-Position für die Methode RenderString in Zeile 1258 von channellist.cpp falsch.
Ich vermute, dass ein Teil der Berechnung x + numwidth + 10 + ch_name_len + 5 + prg_offset einen falschen Wert hat.
Vielleicht ist aber auch die gesamte Rechnung Murx.
MarcM
Foren-Moderator
Beiträge: 1119
Registriert: Sonntag 9. Juni 2002, 13:28

Re: BUG : Channellist verschluckt letzte 1

Beitrag von MarcM »

aber es ist doch nur die Zahl 1 die abgeschnitten wird.... eine 2, oder ein Buchstabe werden nicht abgeschnitten... es geht nur um eine 1
zumal die ganze Zeile eh ziemlich kurz war :
2. ZDF - Menschen 2011
andere Zeilen sind da deutlich breiter
3. RTL Television - Das Supertalent
you know what I mean ? wird da irgendwo auf Sonderzeichen in der EPG-Daqrstellung geparst ?

Marc
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: BUG : Channellist verschluckt letzte 1

Beitrag von Gaucho316 »

Ich weiß, was du meinst. In Zeile 1204 bis 1210 werden Werte berechnet, die dann später in Zeile 1252 bis 1259 genutzt werden. Vielleicht stimmt ja ch_desc_len nicht, wenn man mit schmalen Zeichen wie der 1 am Ende arbeitet.
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: BUG : Channellist verschluckt letzte 1

Beitrag von seife »

Ich hab das mal irgendwo gefixt. Ich such das mal raus.
MarcM
Foren-Moderator
Beiträge: 1119
Registriert: Sonntag 9. Juni 2002, 13:28

Re: BUG : Channellist verschluckt letzte 1

Beitrag von MarcM »

Wenn jemand mal nachvollziehen will... hab gerade mal das EPG durchforstet...

19:25Uhr - 20:15Uhr -> ATV2 (Bouquet ATV) -> Stargate: SG1

sollte in der Channellist verschluckt werden... ( wenn es alle 1 am Ende betrifft...)!!

Marc

Edit:

verdammt.... da passts, was ist das fürn Mist :dash:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: BUG : Channellist verschluckt letzte 1

Beitrag von rhabarber1848 »

MarcM hat geschrieben:irgendwie war mir hier stand schon mal ein Thread von rhabarber über genau das selbe Thema.... ich find ihn aber nicht mehr evtl. beim DB Crash verloren gegangen ?
hat also doch jemand gesehen ;)

Ich hatte genau dieselbe Fehlermeldung gepostet,
MarcM hat geschrieben:Wenn eine Sendung im EPG mit 1 endet, also so wie gestern Abend im "ZDF - Menschen 2011" verschluckt die Channelist die letzte 1. Die Infobar zeigts richtig, da ist alles OK...
allerdings wieder gelöscht, da es mit einem ungepatchten Image (inkl. ohne persönliche
Anpassungen von neutrino.conf) nicht mehr auftrat. Weitere Untersuchungen haben
ergeben, dass der Fehler nur auftritt, wenn der Wert für "Einstellungen/OSD/Schriftgrößen/
Kanalliste/Beschreibung" auf einen Wert ungleich des Standards von 20 geändert wird.

Wir sollten versuchen, den bug dieses Jahr noch zu beheben ;)
MarcM
Foren-Moderator
Beiträge: 1119
Registriert: Sonntag 9. Juni 2002, 13:28

Re: BUG : Channellist verschluckt letzte 1

Beitrag von MarcM »

rhabarber1848 hat geschrieben:Weitere Untersuchungen haben
ergeben, dass der Fehler nur auftritt, wenn der Wert für "Einstellungen/OSD/Schriftgrößen/
Kanalliste/Beschreibung" auf einen Wert ungleich des Standards von 20 geändert wird.
joa... kann ich bestätigen. Hab die Schriftgrößen alle eine Größe höher eingestellt....

Warum zum Henker lies es sich aber eben bei SG1 nicht reproduzieren ?!

Marc
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: BUG : Channellist verschluckt letzte 1

Beitrag von rhabarber1848 »

Die letzte "1" wird nur abgeschnitten, wenn die letzten beiden Zeichen "11" sind, warum auch immer...
Deshalb habe ich geschrieben:
rhabarber1848 hat geschrieben:Wir sollten versuchen, den bug dieses Jahr noch zu beheben ;)
Ich beobachte das Problem schon seit Monaten...
MarcM
Foren-Moderator
Beiträge: 1119
Registriert: Sonntag 9. Juni 2002, 13:28

Re: BUG : Channellist verschluckt letzte 1

Beitrag von MarcM »

11 = Hex 0B
11 = ASCII VT (Tabulator)
Hex 11 = Dez 17
Hex 11 = ASCII DC1 (Device Control 1)

hmm.... wie lang (wieviel Zeichen) ist denn ein Standard Tabulator ?
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: BUG : Channellist verschluckt letzte 1

Beitrag von seife »

Das problem ist im fontrenderer. GetRenderwidth hat irgendwo einen off-by-one error, die eigentliche Render-Routine braucht manchmal etwas mehr pixel zum tatsächlich rendern als getRenderWidth ursprünglich "vermutet" hat. Das führt dann (weil der Fontrenderer keine halben Buchstaben hinmalt) dazu, dass der Letzte character nicht gezeichnet wird.

Das ist Abhängig vom Font, der Fontgrösse, dem auszugebenden String etc.
Warum es die 1 hinten besonders oft erwischt weiss ich gerade auch nicht.

Das ist auch der grund, warum oftmals im Code beim Bestimmen der vorzusehenden Breite "getRenderWidth() + 1" genommen wird, obwohl das "+1" eigentlich keinen Sinn hat.

Ich habe das schon mal gefixt, ich muss den Code nur finden. Das wird dieses Jahr noch :-)
MarcM
Foren-Moderator
Beiträge: 1119
Registriert: Sonntag 9. Juni 2002, 13:28

Re: BUG : Channellist verschluckt letzte 1

Beitrag von MarcM »

Gestern Nacht hab ich nochmal einen Fall gesehen :

ServusTV Deutschland - Erzbergrodeo 2011

das hat die Zeile zu ca. 3/4 ausgefüllt.... komisch ist dass es immer nur die 1 trifft und nicht mal ein l.

Marc
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: BUG : Channellist verschluckt letzte 1

Beitrag von seife »

Versuch mal das:

Code: Alles auswählen

diff --git a/tuxbox/neutrino/src/driver/fontrenderer.cpp b/tuxbox/neutrino/src/driver/fontrenderer.cpp
index 032a849..0436d61 100644
--- a/tuxbox/neutrino/src/driver/fontrenderer.cpp
+++ b/tuxbox/neutrino/src/driver/fontrenderer.cpp
@@ -504,19 +504,19 @@ void Font::RenderString(int x, int y, const int width, const char *text, const u
                dprintf(DEBUG_NORMAL, "failed to get glyph bitmap.\n");
                continue;
        }
 
-       // width clip
-       if (x + glyph->xadvance + spread_by > left + width)
-               break;
-
        //kerning
        if(use_kerning)
        {
                FT_Get_Kerning(size->face, lastindex, index, 0, &kerning);
                x+=(kerning.x+32)>>6; // kerning!
        }
 
+       // width clip
+       if (x + glyph->xadvance + spread_by > left + width)
+               break;
+
        int stride  = frameBuffer->getStride();
        uint8_t * d = ((uint8_t *)frameBuffer->getFrameBufferPointer()) + (x + glyph->left) * sizeof(fb_pixel_t) + stride * (y - glyph->top);
        uint8_t * s = glyph->buffer;
        int w       = glyph->width;
Hintergrund: kerning.x kann negativ sein (ist es eigenltich fast immer IIRC) und das führt dann dazu, dass RenderString() abbricht, obwohl noch Platz wäre.
getRenderWidth() ist tatsächlich korrekt, aber RenderString() nutzt manchmal den Platz nicht aus.

Warum das bei der "1" eher auftritt ist auch klar: die hat eher einen grossen kerning-wert in x-Richtung.

Probiert es mal so aus.
Wenn es hilft, checke ich es ein.
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: BUG : Channellist verschluckt letzte 1

Beitrag von GetAway »

Hier mal ohne Patch, Schriftgröße 21:
Bild

...und hier mit Patch, Schriftgröße 18-26 getestet.
Bild

Ich vermute mal, dass niemand etwas dagegen hat, wenn du es eincheckst. ;)
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: BUG : Channellist verschluckt letzte 1

Beitrag von seife »

Mach ich sobald ich daheim bin.

Edit: ist drin.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: BUG : Channellist verschluckt letzte 1

Beitrag von rhabarber1848 »

Problem gelöst, danke!