[Spark] Kleinere GUI Fehler

Entwicklung
Space_2063
Einsteiger
Einsteiger
Beiträge: 294
Registriert: Samstag 8. Dezember 2001, 00:00

[Spark] Kleinere GUI Fehler

Beitrag von Space_2063 »

Ich habe heute mal eine aktuelle Version eingespielt und bin ueber 3 GUI Probleme gestoplert, die ich gerne mal reporten moechte.

1. Streifen (Ausgabemodus 1080p50)

Siehe beigefuegtes Bild beim Scrollen

2. Pumpen der Infobar

Direkt nach dem Umschalten oder per Infotaste scharf auf die Uhr in der rechten Ecke schauen

3. Anzeige der Aufloesung in der Infobar funktioniert nur bei 720p und 576i, nicht aber bei 1080i (bleibt leer)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
AudioSlyer
Erleuchteter
Erleuchteter
Beiträge: 450
Registriert: Sonntag 28. Juli 2002, 01:18

Re: [Spark] Kleinere GUI Fehler

Beitrag von AudioSlyer »

zu 1: Die Streifen habe ich auch über SCART. Da bleiben Reste vom Selekierbalken stehen.
zu 2: Das Pumpen kommt immer, wenn der (Doppel-)Punkt zwischen der Uhrzeit HH:MM eingeblendet wird. Könnte an der Blit-Funktion liegen.
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: [Spark] Kleinere GUI Fehler

Beitrag von dbt »

Space_2063 hat geschrieben:Ich habe heute mal eine aktuelle Version eingespielt und bin ueber 3 GUI Probleme gestoplert, die ich gerne mal reporten moechte.

1. Streifen (Ausgabemodus 1080p50)

Siehe beigefuegtes Bild beim Scrollen

2. Pumpen der Infobar

Direkt nach dem Umschalten oder per Infotaste scharf auf die Uhr in der rechten Ecke schauen

3. Anzeige der Aufloesung in der Infobar funktioniert nur bei 720p und 576i, nicht aber bei 1080i (bleibt leer)
Ist das in allen Fenstern so oder nur hier?
mohousch
Einsteiger
Einsteiger
Beiträge: 362
Registriert: Mittwoch 14. Dezember 2005, 03:25

Re: [Spark] Kleinere GUI Fehler

Beitrag von mohousch »

das kommt weil da immer eine bestimmte Area geblittet wird und wenn 2 Areas die vom Groesse her sind unterscheiden nacheinander blittet dass die eine von andere was abschneidet, mal vorsichtig die richtige brutale Lösung ist. den ganzen Bildschirm zu blitten dazu soll man aus dem mal Widget paar blit() sparren (rausnehmen):

Code: Alles auswählen

void CFrameBuffer::blit()
{
#ifdef __sh__  
	STMFBIO_BLT_DATA  bltData; 
	memset(&bltData, 0, sizeof(STMFBIO_BLT_DATA)); 

	bltData.operation  = BLT_OP_COPY;

	// src
	bltData.srcOffset  = 1920 *1080 * 4;
	bltData.srcPitch   = xRes * 4 /*stride*/;

	bltData.src_left   = 0; 
	bltData.src_top    = 0; 
	bltData.src_right  = xRes; 
	bltData.src_bottom = yRes;

		
	bltData.srcFormat = SURF_BGRA8888;
	bltData.srcMemBase = STMFBGP_FRAMEBUFFER;
	
	// get variable screeninfo
	if (ioctl(fd, FBIOGET_VSCREENINFO, &screeninfo) == -1)
		perror("frameBuffer <FBIOGET_VSCREENINFO>");

	/* dst */
	bltData.dstOffset  = 0; 
	bltData.dstPitch   = screeninfo.xres * 4;

	bltData.dst_left   = 0; 
	bltData.dst_top    = 0; 
	bltData.dst_right  = screeninfo.xres; 
	bltData.dst_bottom = screeninfo.yres;

	bltData.dstFormat = SURF_BGRA8888;		
	bltData.dstMemBase = STMFBGP_FRAMEBUFFER;

	if ( (bltData.dst_right > screeninfo.xres) || (bltData.dst_bottom > screeninfo.yres) )
	{
		printf("CFrameBuffer::blit: values out of range desXb:%d desYb:%d\n", bltData.dst_right, bltData.dst_bottom);
	}

	if (ioctl(fd, STMFBIO_BLT, &bltData ) < 0) 
		perror("STMFBIO_BLIT");
	
	// sync bliter
	if(ioctl(fd, STMFBIO_SYNC_BLITTER) < 0)
		perror("ioctl STMFBIO_SYNC_BLITTER");
#else
	// set manual blit
	unsigned char tmp = 1;
	
	if (ioctl(fd,FBIO_SET_MANUAL_BLIT, &tmp)<0)
		perror("FBIO_SET_MANUAL_BLIT");
	
	// blit
	if (ioctl(fd, FBIO_BLIT) < 0)
		perror("FBIO_BLIT");
	
	// sync bliter
	int c = 0;
	if( ioctl(fd, FBIO_WAITFORVSYNC, &c) < 0 )
		perror("FBIO_WAITFORVSYNC");
#endif
}
AudioSlyer
Erleuchteter
Erleuchteter
Beiträge: 450
Registriert: Sonntag 28. Juli 2002, 01:18

Re: [Spark] Kleinere GUI Fehler

Beitrag von AudioSlyer »

Cool, danke.
Ich habe es gerade eingebaut und das Pumpen in der Infobar ist weg und die Streifen im Menü auch.
Keine Nachteile festgestellt.
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: [Spark] Kleinere GUI Fehler

Beitrag von dbt »

Ich glaube ich muss mir auch mal so'n Teil holen, sonst wirds langweilig :D
lintux
Interessierter
Interessierter
Beiträge: 69
Registriert: Montag 13. Februar 2012, 21:10

Re: [Spark] Kleinere GUI Fehler

Beitrag von lintux »

Wow ! :up: :D
Debian...sid
###--- Gott sei Dank, ich bin weg vom Fenster ---###
Wait and see... it's going to be great!
AudioSlyer
Erleuchteter
Erleuchteter
Beiträge: 450
Registriert: Sonntag 28. Juli 2002, 01:18

Re: [Spark] Kleinere GUI Fehler

Beitrag von AudioSlyer »

Hier als Diff - kein Pumpen oder andere Reste mehr. @Mosch: Danke

Code: Alles auswählen

diff --git a/src/driver/framebuffer_spark.cpp b/src/driver/framebuffer_spark.cpp
old mode 100644
new mode 100755
index a1ca027..81c224f
--- a/src/driver/framebuffer_spark.cpp
+++ b/src/driver/framebuffer_spark.cpp
@@ -1577,82 +1577,51 @@ void CFrameBuffer::mark(int xs, int ys, int xe, int ye)
 
 void CFrameBuffer::blit()
 {
-	if (to_blit.xs == INT_MAX)
-		return;
-
-	int srcXa = to_blit.xs;
-	int srcYa = to_blit.ys;
-	int srcXb = to_blit.xe;
-	int srcYb = to_blit.ye;
-
-	STMFBIO_BLT_DATA  bltData;
-	memset(&bltData, 0, sizeof(STMFBIO_BLT_DATA));
-
-	bltData.operation  = BLT_OP_COPY;
-	//bltData.ulFlags  = BLT_OP_FLAGS_BLEND_SRC_ALPHA | BLT_OP_FLAGS_BLEND_DST_MEMORY; // we need alpha blending
-	// src
-	bltData.srcOffset  = lbb_off;
-	bltData.srcPitch   = stride;
-
-	bltData.src_left   = srcXa;
-	bltData.src_top    = srcYa;
-	bltData.src_right  = srcXb;
-	bltData.src_bottom = srcYb;
-
-	bltData.srcFormat = SURF_BGRA8888;
-	bltData.srcMemBase = STMFBGP_FRAMEBUFFER;
-
-	/* calculate dst/blit factor */
-	fb_var_screeninfo s;
-	if (ioctl(fd, FBIOGET_VSCREENINFO, &s) == -1)
-		perror("frameBuffer <FBIOGET_VSCREENINFO>");
-
-	if (s.xres != last_xres) /* fb resolution has changed -> clear artifacts */
-	{
-		last_xres = s.xres;
-		bltData.src_left   = 0;
-		bltData.src_top    = 0;
-		bltData.src_right  = xRes;
-		bltData.src_bottom = yRes;
-	}
-
-	double xFactor = (double)s.xres/(double)xRes;
-	double yFactor = (double)s.yres/(double)yRes;
-
-	int desXa = xFactor * bltData.src_left;
-	int desYa = yFactor * bltData.src_top;
-	int desXb = xFactor * bltData.src_right;
-	int desYb = yFactor * bltData.src_bottom;
-
-	/* dst */
-	bltData.dstOffset  = 0;
-	bltData.dstPitch   = s.xres * 4;
-
-	bltData.dst_left   = desXa;
-	bltData.dst_top    = desYa;
-	bltData.dst_right  = desXb;
-	bltData.dst_bottom = desYb;
-
-	bltData.dstFormat = SURF_BGRA8888;
-	bltData.dstMemBase = STMFBGP_FRAMEBUFFER;
-
-	//printf("CFrameBuffer::blit: sx:%d sy:%d sxe:%d sye: %d dx:%d dy:%d dxe:%d dye:%d\n", srcXa, srcYa, srcXb, srcYb, desXa, desYa, desXb, desYb);
-	if ((bltData.dst_right > s.xres) || (bltData.dst_bottom > s.yres))
-		printf("CFrameBuffer::blit: values out of range desXb:%d desYb:%d\n",
-			bltData.dst_right, bltData.dst_bottom);
-
-	blit_lock();
-	if(ioctl(fd, STMFBIO_SYNC_BLITTER) < 0)
-		perror("CFrameBuffer::blit ioctl STMFBIO_SYNC_BLITTER 1");
-	msync(lbb, xRes * 4 * yRes, MS_SYNC);
-	if (ioctl(fd, STMFBIO_BLT, &bltData ) < 0)
-		perror("STMFBIO_BLT");
-	if(ioctl(fd, STMFBIO_SYNC_BLITTER) < 0)
-		perror("CFrameBuffer::blit ioctl STMFBIO_SYNC_BLITTER 2");
-
-	to_blit.xs = to_blit.ys = INT_MAX;
-	to_blit.xe = to_blit.ye = 0;
-	blit_unlock();
+   STMFBIO_BLT_DATA  bltData;
+   memset(&bltData, 0, sizeof(STMFBIO_BLT_DATA));
+
+   bltData.operation  = BLT_OP_COPY;
+
+   // src
+   bltData.srcOffset  = 1920 *1080 * 4;
+   bltData.srcPitch   = xRes * 4 /*stride*/;
+
+   bltData.src_left   = 0;
+   bltData.src_top    = 0;
+   bltData.src_right  = xRes;
+   bltData.src_bottom = yRes;
+
+      
+   bltData.srcFormat = SURF_BGRA8888;
+   bltData.srcMemBase = STMFBGP_FRAMEBUFFER;
+   
+   // get variable screeninfo
+   if (ioctl(fd, FBIOGET_VSCREENINFO, &screeninfo) == -1)
+      perror("frameBuffer <FBIOGET_VSCREENINFO>");
+
+   /* dst */
+   bltData.dstOffset  = 0;
+   bltData.dstPitch   = screeninfo.xres * 4;
+
+   bltData.dst_left   = 0;
+   bltData.dst_top    = 0;
+   bltData.dst_right  = screeninfo.xres;
+   bltData.dst_bottom = screeninfo.yres;
+
+   bltData.dstFormat = SURF_BGRA8888;      
+   bltData.dstMemBase = STMFBGP_FRAMEBUFFER;
+
+   if ( (bltData.dst_right > screeninfo.xres) || (bltData.dst_bottom > screeninfo.yres) )
+   {
+      printf("CFrameBuffer::blit: values out of range desXb:%d desYb:%d\n", bltData.dst_right, bltData.dst_bottom);
+   }
+
+   if (ioctl(fd, STMFBIO_BLT, &bltData ) < 0)
+      perror("STMFBIO_BLIT");
+   
+   // sync bliter
+   if(ioctl(fd, STMFBIO_SYNC_BLITTER) < 0)
+    perror("ioctl STMFBIO_SYNC_BLITTER");
 }
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: [Spark] Kleinere GUI Fehler

Beitrag von seife »

Und wie sieht es mit der Performance aus? IIRC war das relativ langsam, immer alles zu blitten...
AudioSlyer
Erleuchteter
Erleuchteter
Beiträge: 450
Registriert: Sonntag 28. Juli 2002, 01:18

Re: [Spark] Kleinere GUI Fehler

Beitrag von AudioSlyer »

Ich merke da keinen Unterschied, bin vielleicht nicht sensibel genug.
Der Nutzen bzw. die korrekte Darstellung schlägt den minimalen Performance-Verlust in meinem Fall... :blind
Bin kein Powerzapper ;)
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: [Spark] Kleinere GUI Fehler

Beitrag von seife »

ok, ich probiers mal aus.
AudioSlyer
Erleuchteter
Erleuchteter
Beiträge: 450
Registriert: Sonntag 28. Juli 2002, 01:18

Re: [Spark] Kleinere GUI Fehler

Beitrag von AudioSlyer »

Und wenn man einen kleinen Blit-Offset einbaut. +5 Pixel oder so...?
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: [Spark] Kleinere GUI Fehler

Beitrag von seife »

Ja, das hatte ich mir auch schon überlegt.
Aber von den screenshots die ich bisher bekommen habe, sieht es eher nach einem Rundungsfehler aus, also als ob sich da manchmal was im Output verschiebt beim blitten.
Bei mir scheint z.B. auch die Grafik im Techinfo screen horizontal zu "wackeln", was auch auf sowas hindeuten könnte. Ich habe aber auch keine FullHD Display um das genauer zu untersuchen: das könnte nämlich auch vom scaler im Display kommen...

Also wenn es von der Performance her akzeptabel ist, dann wäre "immer alles blitten" auf jeden Fall die Lösung, die auch den Code einfacher machen würde.
AudioSlyer
Erleuchteter
Erleuchteter
Beiträge: 450
Registriert: Sonntag 28. Juli 2002, 01:18

Re: [Spark] Kleinere GUI Fehler

Beitrag von AudioSlyer »

kann das auch an Letterbox oder Fullscreen liegen?
Es wundert mich, dass das nicht Jeder hat
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: [Spark] Kleinere GUI Fehler

Beitrag von seife »

Ich denke es ist eher Hardware oder (Chip-)Firmwareabhängig. Hast du einen GM990 oder einen Pingulux?
AudioSlyer
Erleuchteter
Erleuchteter
Beiträge: 450
Registriert: Sonntag 28. Juli 2002, 01:18

Re: [Spark] Kleinere GUI Fehler

Beitrag von AudioSlyer »

gm990 reloaded
Space_2063
Einsteiger
Einsteiger
Beiträge: 294
Registriert: Samstag 8. Dezember 2001, 00:00

Re: [Spark] Kleinere GUI Fehler

Beitrag von Space_2063 »

Dito - bei mir auch ne GM990 (Ausgabe wie schon erwaehnt 1080p50)
AudioSlyer
Erleuchteter
Erleuchteter
Beiträge: 450
Registriert: Sonntag 28. Juli 2002, 01:18

Re: [Spark] Kleinere GUI Fehler

Beitrag von AudioSlyer »

Ich fahr die Reloaded über Scart im Schlafzimmer, guter alter Plasma ;o)
In dem Modus habe ich aber auch die Streifen und das Pumpen. Wenn ich mal wieder Zeit habe, dann werde ich das mal genauer testen.
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: [Spark] Kleinere GUI Fehler

Beitrag von seife »

Ich habe gestern was committed, was dem Code von Mohousch entsprechen sollte -- performancemässig habe ich direkt keinen Unterschied bemerkt.
Tann
Einsteiger
Einsteiger
Beiträge: 101
Registriert: Dienstag 6. März 2012, 13:24

Re: [Spark] Kleinere GUI Fehler

Beitrag von Tann »

dietmar w image

keine Striche -Reste, aber bei 1080i pder auch p

ist Bild immermal schlecht, z.b. wenn Test in Beiträgen eingeblendet wird ard zdf mittagsmagazin richtig zerfrannzt
schufti
Einsteiger
Einsteiger
Beiträge: 352
Registriert: Freitag 20. August 2004, 23:33

Re: [Spark] Kleinere GUI Fehler

Beitrag von schufti »

ja, das ist aber offensichtlich ein allgemeines Problem aller freien Linux basierten SH4 Implementationen.
Irgendwie scheint die closed source video firmware nicht dem Standard der z.B. Spark Firmware zu entsprechen bzw. die Anbindung von Player2 nicht optimal zu sein.

Ein direkter Vergleich von z.B. SD Sendern in Spark und Neutrino/E² läßt mich immer wieder an der Sinnhaftigkeit zweifeln...

aber nun on topic: mit den letzten Änderungen auch keine Striche mehr im Menü bei 1080er Auflösungen.