Nullable<int> (int?) und +=

Na gut, vermutlich ist das ja ordentlich dokumentiert und ich war nur zu faul zum Suchen, aber hier mal eine kleine Erfahrung. Was erwartet man als Ergebnis von a += b; wenn a und b beide Nullable<int>, also int? sind?

Erst einmal ist der Code semantisch äquivalent zu a = a + b, also wird der Wert von a durch die Summe ersetzt – das ist in C# nur natürlich, liefert ja += für eine Zeichenkette auch eine neue Instanz, wenn die rechte Seite keine leere Zeichenkette ist.

Aber was ist denn nun a + b? Das Ergebnis ist null, wenn einer der Werte null ist und ansonsten wie zu erwarten die Summe der int Werte. Denkt man etwas darüber nach, kann es gar nicht anders sein, tut man das aber nicht (Nachdenken), ist man vielleicht überrascht, dass kein Fehler auftritt, sondern einfach eine null erscheint.

Beim Anschauen des tatsächlich erzeugten IL Codes ist mir auch die Methode Nullable.GetValueOrDefault aufgefallen, die ich vorher nur unterbewußt wahrgenommen habe. Bisher habe ich oft das Konstrukt a ?? 0 verwendet. Wenn allerdings der Rückfallwert der Defaultwerte des Datentyps ist (0, false, …), dann ist die Methode sehr viel effizienter.

Nur so Kleckerkram am Rande

Jochen

DVB.NET 3.5 – Ein Ausblick oder so

Nachdem ich nun doch schon DVB.NET 3.2 inklusive des DVB.NET / VCR.NET Viewers freigegeben habe, einige sehr rohe Gedanken zur nächsten Version – obwohl ich nicht glaube, dass ich vor Karneval 2008 anfangen werde, etwas Konkretes zu tun. Ich plane auch locker, die Versionsnummer statt auf 3.3 direkt auf 3.5 zu erhöhen. Erst mal überraschend, denn nach aussen hin sichtbar wird sich wenig tun.

Aber im Laufe der Jahre sind einige relativ umfangreiche Teile der Bibliothek relativ schnell enstanden, hier ist an mehreren Stellen mal eine Konsoldierung und ein Review notwendig, vielleicht sogar mal wieder eine Dokumentation für Entwickler (Stichwort Sandcastle – NDoc hat den Sprung nach .NET 2.0 ja nicht geschafft). Das betrifft vor allem die Unterstützung der BDA Treiber. In diesem Bereich werde ich aber vor allem die Anbindung der spezifischen DiSEqC Ansteuerung und (die zur Zeit noch gar nicht angedachte) PayTV Unterstützung via CI/CAM angehen. Für die nächste DVB.NET Version soll hier ein Provider Konzept her, dass eine Nutzung von anderen BDA Treibern durch eine Bereitstellung von kleinen Zusatzmodulen erlauben soll.

Auch der für den Viewer entwickelte Bereich der Anzeige von DirectShow Graphen soll noch einmal mit etwas Abstand betrachtet werden. An dieser Stelle kommt aber auch schon der zweite große Bereich ins Spiel, der etwas Auffrischung braucht. DVB.NET unterstützt heute mit einigen Klassen den Umgang mit Transport Streams: es gibt einen Parser, der zum Beispiel den Datenstrom vom Sender zerlegt, eine Klasse zum Erzeugen von Dateien und einen DirectShow Filter zum Einmischen in einen Graphen. Bei allen Aspekten gibt es noch offene Fragen, die möglicherweise Probleme verursachen. Der Parser verwendet für die Filter etwa keine eigenen Threads zur Datenverteilung, das könnte der Grund sein, warum einige PayTV HDTV Sender nicht gleichzeitig mit der Programmzeitschrift (EPG) aufgezeichnet oder fehlerfrei betrachtet werden können. Die Dateierzeugung hat einen Multiplexer auf Basis der TS Pakete, sondern verwendet die PES Struktur, was möglicherweise die Ursache dafür ist, dass Sender mit einem PES Paket pro GOP Aufzeichnungsdateien erzeugen, die nicht abgespielt werden können. Und die Einmischung von H.264 Material in DirectShow Graphen erkennt die innere Struktur des Datenstroms nicht und kann dem Graphen keine Hinweise auf so genannte Synchronisationspunkte geben, was vermutlich der Grund dafür ist, dass der Viewer FFDShow und andere Decoder nicht zur Anzeige von H.264 Material nutzen kann.

Ach ja: im Zusammenspiel mit dem Viewer wäre auch die Unterstützung einer Fernbedienung Thema für die nächste Version. Hier müsste ich mich auch mal schlau machen, was möglich ist, welche Software existiert und so weiter. Es geht schwerpunktmäßig um verteilte Szenarien, bei denen ein VCR.NET die DVB Hardware verwaltet, der Viewer aber auf einem anderen Rechner läuft und die Fernbedienung dort angeschlossen wird. Die bei den Karten mitgelieferten Fernbedienungen sind daher erst einmal nicht das Thema – auch wenn ich vielleicht damit anfange, da DVB.NET ja zumindest die Nexus diesbezüglich unterstützt.

Viel gesagt, viel Kram In-House, aber vielleicht kommen dabei einige ‚Bug Fixes‘ heraus. Und wie immer: mal schauen, was ich davon wirklich umsetzen kann.

Man darf gespannt sein (naja: ich bin es)

Viel Spaß weiterhin mit DVB.NET und Konsorten

Jochen

… und mit VideoText

Nun gut, es wird eine (nicht ganz vollständige) Unterstützung des untersten Konformitätslevels geben, aber vielleicht reicht das schon. Ob es für alle Anwendungsfälle was wird, weiß ich aber noch nicht: im Moment verhindern Probleme bei der Transparenz die Nutzung von Untertitelseiten – das, was mir eigentlich am wichtigsten wäre.

Wie dem auch sei, hier ein erster Eindruck:

VideoText mit dem DVB.NET / VCR. NET Viewer

Bis bald

Jochen

Zusatz: wieder ein kleiner Schritt, zwar nicht für die Menschheit, aber immerhin.

Und doch mit Transparent

FFDShow Unterstützung (H.264) erst einmal zurückgestellt

Ich werde für die 3.2er Versionen doch nichts mehr an der FFDShow Unterstützung machen – für MPEG-2 geht FFDShow, für H.264 allerdings nicht. Hintergrund ist, dass FFDShow die Hardwarebeschleunigung der Graphikkarten wohl nicht unterstützt. Auf den mir zur Verfügung stehenden Rechnern ist allerdings ein Softwaredecoding von H.264 nicht so möglich, dass eine flüssige Wiedergabe erzielt wird. Damit wird die Fehlersuche sehr mühsam, da vieles plötzlich nur Seiteneffekte sind – seit ich die HD 2600 Pro habe, sind alle Probleme, die ich mit dem DVB.NET / VCR.NET Viewer und H.264 zu haben glaubte, verschwunden.

Tatsächlich hat der Viewer allerdings auch noch den Nachteil, dass er wesentlich mehr Rechenzeit für sich benötigt, als etwa der Media Player Classic (MPC). Mit dem MPC kann man ohne Hardwarebeschleunigung und FFDShow auf dem Pentium D830 gerade mal so H.264 schauen, mit dem Viewer ist das nicht möglich. Auch mit Hardwarebeschleunigung ist die CPU Last beim Viewer mit 15-20% deutlich höher als die 5-10% bei H.264 im MPC (CyberLink / PowerDVD SE Codec mit den neuesten freien Patches). Da ist also sicher noch Potential.

Oder kurz: dieses Jahr wird es mit H.264 via FFDShow im DVB.NET / VCR.NET Viewer definitiv nichts mehr.

Sorry

Jochen