Obfuscated C++ contest?

Das Original Benutzerinterface Neutrino-SD incl. zapit, sectionsd, yWeb etc...
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Obfuscated C++ contest?

Beitrag von seife »

Hi,

im CVS-Log fiel mir folgendes auf (streaminfo2.cpp):

Code: Alles auswählen

+     if (w_max (710, 5) < 540 ? width = 540 : width = w_max (710, 5));               
+     if (h_max (560, 5) < 485 ? height = 486 : height = h_max (560, 5));
sowie

Code: Alles auswählen

+     if (g_info.delivery_system==1 ? q = 1000 : q = 1000000);
Ich würde das ja dann doch eher so schreiben:

Code: Alles auswählen

if (w_max(710, 5) < 540) {
    width = 540;
} else {
    width = w_max(710, 5);
}
oder, wenn es unbedingt der ternäre Operator sein muß, dann so:

Code: Alles auswählen

width = (w_max(710, 5) < 540) ? 540 : w_max(710, 5);
Zumindest die if()s außenrum sind so ziemlich nur "seltsam" :-)
rasc
Senior Member
Beiträge: 5071
Registriert: Dienstag 18. September 2001, 00:00

Beitrag von rasc »

Wobei die zeilen um w_max() und h_max() selbst auch obskur sind.


Ich hatte die Funktionen damals eingeführt um Neutrino auf 16:9 - TVs nutzbar zu machen, da die Ausgaben und Menues ansonsten immer abgeschnitten waren (stellenweise auch nicht mehr nutzbar).


Richtig wäre demnach einfach:

width = w_max (710, 5)
height = h_max (560, 5)

wenn eine Ausgabe einen Platzbedarf von 710x560 mit jeweils 5 Pixel Randbedarf (optisch Mussabstand zum Bildschirmrand) hat.

Aufgrund der zurückgemeldeten verfügbare Ausgabefläche (width und height) muss die Ausgaberoutine dann Anapssungen bzgl. z.B. Scrollbalken, Fontgröße oder weglassen von Informationen durchführen.

Wenn der verfügbare Bildschirm kleiner eingestellt ist, z.B.:

screen_max.cpp:
//
// 16:9 Zoom-Mode on a Thomson TV set will e.g. be 625x415
//
// 2004-03-17 rasc

... dann ist eben nicht mehr Platz da.


Die hart codierte h=485 im jetzigen Code passen also für 16:9 schonmal gar nicht... 8/


Man kann die Screen-Settings natürlich ignorieren, aber das ist nicht Sinn der Sache gewesen, dann hätte man alles bei hart auf 768x576 lassen können. ;-)

Meine einfache Anmerkung im Thread zu streaminfo2.cpp dazu wurde ja ignoriert. ;-)
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Beitrag von dbt »

Habt im Prinzip schon recht :wink: so wie seifes Vorschlag hatte war das ja erst, habs halt nur verkürzt, kann man natürlich wieder umstricken, ist ja kein Ding. So "seltsam" sind die Ifs allerdings auch nicht, aber wie gesagt, stimmt schon :wink:.
Die hart codierte h=485 im jetzigen Code passen also für 16:9 schonmal gar nicht... 8/
auch war, da müssten schon noch einige Zeilen mehr weg, aber es sollte nur gleichermaßen möglichst alles reinpassen und keine Zeilen überlappen, da da doch einiges an Infos untergebracht ist, wo es bei extremen Screensettings schon mal dumm aussehen könnte.
Wobei die zeilen um w_max() und h_max() selbst auch obskur sind.
Ist sicher zweifelhaft. Da könnte man w_max() und h_max() auch auch gleich weglassen. Allerdings hab ich bei mir in den Funktionen w_max() und h_max() noch was reingebaut, um 16:9 Status direkt vom SAA abzufragen, damit auch auf den 16:9ZoomMode direkt reagiert wird und so tuts ja keinen wirklich weh und wollte die daher drinn lassen. Die Übergabe vom SAA macht aber nur Sinn wenn der Modus über die dBox gesteuert wird und der TV mitspielt.. Da müsste man mal drüber reden :wink: oder zumindest mal testen. Es würden dadurch ja auch jede Menge andere Menüs beeinflußt werden. Das ist so momentan eigentlich ein Kompromiß.
Meine einfache Anmerkung im Thread zu streaminfo2.cpp dazu wurde ja ignoriert.
Insofern hatte ich ja auch etwas dazu bemerkt und bin nach wie vor deiner Meinung. Eine radikale Idee wäre, die Streaminfos generell im 4:3 Modus abzubilden, dann wäre das vom Tisch. Denkbar wäre auch eine Aufteilung auf mehrere "Infotafeln". Oder ist denn das Pig unbedingt notwendig?
rasc
Senior Member
Beiträge: 5071
Registriert: Dienstag 18. September 2001, 00:00

Beitrag von rasc »

dbt hat geschrieben:
Wobei die zeilen um w_max() und h_max() selbst auch obskur sind.
Ist sicher zweifelhaft. Da könnte man w_max() und h_max() auch auch gleich weglassen. Allerdings hab ich bei mir in den Funktionen w_max() und h_max() noch was reingebaut, um 16:9 Status direkt vom SAA abzufragen, damit auch auf den 16:9ZoomMode direkt reagiert wird und so tuts ja keinen wirklich weh und wollte die daher drinn lassen. Die Übergabe vom SAA macht aber nur Sinn wenn der Modus über die dBox gesteuert wird und der TV mitspielt.. Da müsste man mal drüber reden :wink: oder zumindest mal testen. Es würden dadurch ja auch jede Menge andere Menüs beeinflußt werden. Das ist so momentan eigentlich ein Kompromiß.

Die Umschaltung auf 16:9 bekommt die Box u.U. gar nicht mit, da man dies auch am TV machen kann - ggf. sogar automatisiert (die TVs "zoomen" automatisch in 16:9).

Klar wäre die SAA bzw. WSS-Abfrage ideal, aber auch das würde die vom Nutzer eingestellten Screen-Settings ignorieren.

Eine radikale Idee wäre, die Streaminfos generell im 4:3 Modus abzubilden, dann wäre das vom Tisch. Denkbar wäre auch eine Aufteilung auf mehrere "Infotafeln". Oder ist denn das Pig unbedingt notwendig?
Naja, wenn man das PIG rauswirft und auch noch das Diagramm für BER, etc. dann ist es fast das alte streaminfo.cpp... ;-) Das streaminfo2 hatte ich mit PG und Diagramm so gemacht, weicl ich die Infos nützlich fand - besonders beim Einrichten von Antennen bzw. Fehlersuche.

Warum nicht eine 2. Seite im Streaminfo anzeigen?
Dann hätte man reichlich Platz für weiteres.


Ich habe hier übrigens eine Version, wo man in den Streaminfos zappen kann. Allerdings passt das hinten und vorne nicht mehr zum CVS.

Prinzipiell kann man es aber so lassen.


Vorschläge:

- die Bitrate (großer Text) könnte raus, da diese doppelt ist (weil im Diagramm), oder besser: man ersetzt diese wieder durch die "max. Bitrate" aus den Descriptoren.

- Desweiteren "unten" "Bitrate" ersetzen durch "Vpid - kb/s".

- die Großen Fonts könnte man durch komplett kleine Fonts ersetzen.

- In der Großansicht des Diagramms sollte "Schliesen" Normalansicht" nach unten wandern, damit es von der Bedienung GUI-konform ist.
Zuletzt geändert von rasc am Dienstag 21. August 2007, 09:36, insgesamt 1-mal geändert.
dietmarw
Contributor
Beiträge: 1833
Registriert: Mittwoch 10. April 2002, 15:39

Beitrag von dietmarw »

rasc hat geschrieben: Ich habe hier übrigens eine Version, wo man in den Streaminfos zappen kann. Allerdings passt das hinten und vorne nicht mehr zum CVS.
das wär's..
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Beitrag von seife »

JFTR: Ich bleibe dabei, daß die if()s "seltsam" sind, da keine Anweisung auf sie folgt, die zuweisung ist innerhalb der if()-Bedingung.
Die if()s selbst machen ziemlich genau das selbe wie

Code: Alles auswählen

if (0);
if (1);
vermutlich optimiert es der Compiler eh weg, aber meinen Lese- und Verständnisprozess hat es leicht behindert ;-)
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Beitrag von dbt »

Ist jetzt wieder so wie vorher. Ist wohl so besser.

Wegen der 16:9 Anpassung müsste man sich da noch was überlegen.
Die Umschaltung auf 16:9 bekommt die Box u.U. gar nicht mit, da man dies auch am TV machen kann - ggf. sogar automatisiert (die TVs "zoomen" automatisch in 16:9).
Die Box sicher nicht. Bei 16:9 anamorph sollte das kein Thema sein, da ja die gleiche Bildfläche genutzt wird.
Beim 16:9 Zoom sieht das anders aus. Die Box kann sowas wie "Blackbardetection" selbst (noch) nicht, aber WSS-Signale zum TV schicken kann sie. Bei 4:3 TV's unwichtig aber für 16:9 TV's mit AutoZoom-Function interessant. An meiner Kiste klappt das jedenfalls perfekt. Ich zoome nur über die Box!
- die Bitrate (großer Text) könnte raus, da diese doppelt ist (weil im Diagramm), oder besser: man ersetzt diese wieder durch die "max. Bitrate" aus den Descriptoren.

- Desweiteren "unten" "Bitrate" ersetzen durch "Vpid - kb/s".

- die Großen Fonts könnte man durch komplett kleine Fonts ersetzen.

- In der Großansicht des Diagramms sollte "Schliesen" Normalansicht" nach unten wandern, damit es von der Bedienung GUI-konform ist.
Da ist was dran...
DrStoned
Tuxboxer
Tuxboxer
Beiträge: 2614
Registriert: Montag 20. Mai 2002, 10:49
Image: JTG-Image [IDE] Version 2.4.4
Image: (7025SS) Merlin

Beitrag von DrStoned »

- Desweiteren "unten" "Bitrate" ersetzen durch "Vpid - kb/s".
@dbt,

wird da nicht die komplette Bitrate des TS-Streams angezeigt? Denke schon, oder ?

Greetz von DrStoned :lol: :lol: :lol:
Greetz von DrStoned :lol: :lol: :lol:
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

genau