Kennt sich hier einer mit C++ und Assembly-Code aus?

Platz für Zwischenmenschliches....
Nachricht
Autor
leth
Muxxi Dev
Beiträge: 2645
Registriert: Mo 04 Aug 2003, 16:22
Wohnort: Pflach in Tirol :-)
Kontaktdaten:

Kennt sich hier einer mit C++ und Assembly-Code aus?

#1 Beitrag von leth » Mo 25 Okt 2004, 11:48

Hallo,

im Moment arbeite ich für Muxxi an einer Preview von MPEG2 Material. Dazu habe ich die MPEG2lib.dll mit eingebunden. Mittlerweilen habe ich es sogar geschafft die Sourcen selbst zu kompilieren und eine kleine Änderung durchzuführen.

Wenn ich die Sourcen richtig verstehe, dann wurde der Code für Pentium III (SSE und MMX) optimiert. Dazu existiert die Datei '\DVD2AVI\idctmmx.asm'. Nun ist der Code aus dem Jahre 2001 und in der Zwischenzeit gibt es Pentium IV und AMD 64 Prozessoren. Nun wäre echt super, wenn jemand das Ganze dafür anpassen könnte :-)

Außerdem bekomme ich während des kompilierens unter VS.NET 2003 einige Warnungen, die ich aber in der Source nicht ausbessern kann, weil ich davon einfach nichts verstehe!

Des Weiteren wurde die DLL bereits für Audio-Decoding vorbereitet, der Support aber nie richtig fertiggestellt. Auch das wäre mit Sicherheit eine Herausforderung :lol:

Also, wenn jemand Lust hat sich der Sache anzunehmen, bitte melden.

Cu leth
Dateianhänge
MPEG2Lib_Win32.zip
Hier die von mir leicht abgeänderten Sourcen als VS.NET 2003 Projekt.
(428.33 KiB) 51-mal heruntergeladen
This is leth!

Meine Box: Nokia SAT 2xi Avia 500

dj3d
Serienhai
Serienhai
Beiträge: 333
Registriert: Sa 07 Feb 2004, 8:04

#2 Beitrag von dj3d » Mo 25 Okt 2004, 12:03

kann zwar nicht die sprachen nicht , aber vielleicht hilfs dir weiter !
ist neuer als deine.


quelle:http://www.winbibel.de/de/mpegcut.htm

leth
Muxxi Dev
Beiträge: 2645
Registriert: Mo 04 Aug 2003, 16:22
Wohnort: Pflach in Tirol :-)
Kontaktdaten:

#3 Beitrag von leth » Mo 25 Okt 2004, 12:08

Danke, aber das was ich oben gepostet habe ist genau diese DLL, nur mit ein paar Änderungen für Mpeg2Schnitt und Muxxi.

Cu leth
This is leth!

Meine Box: Nokia SAT 2xi Avia 500

dj3d
Serienhai
Serienhai
Beiträge: 333
Registriert: Sa 07 Feb 2004, 8:04

#4 Beitrag von dj3d » Mo 25 Okt 2004, 14:42

oder das hilf dir weiter
http://logicnet.dk/lib/


http://www.mpeg.org/MPEG/MSSG/


habe es oben rausgenommen , da gleiche..

leth
Muxxi Dev
Beiträge: 2645
Registriert: Mo 04 Aug 2003, 16:22
Wohnort: Pflach in Tirol :-)
Kontaktdaten:

#5 Beitrag von leth » Mo 25 Okt 2004, 15:09

Nochmals ein herzliches 'Vergelt's Gott' :-)
Das ist wieder die Mpeg2lib.dll, die ich ja schon habe. Und die basiert auf:
:-)

War also leider wieder nichts. Aber der gute Wille zählt!

Vielen Dank!!

Cu leth
This is leth!

Meine Box: Nokia SAT 2xi Avia 500

Charles
Site Sponsor
Site Sponsor
Beiträge: 654
Registriert: Di 07 Okt 2003, 21:14

#6 Beitrag von Charles » Mo 25 Okt 2004, 22:20

Hallo Leth,

warum willst Du eigentlich den "Code für Pentium III (SSE und MMX)" auf die neuen Prozessoren anpassen? Die Sonderbefehle im neueren SSE2 (und wie auch immer die alle heißen) sind halt erweitert worden, die neuen Prozessoren sind ja noch kompatibel mit dem "alten" Standards. Wenn Du die DLL allerdings speziell für P4-Code anpasst, können alle PIII-Besitzer die DLL nicht mehr nutzen...

Da die Mpeg2lib im Mpeg2Schnitt verwendet wird, kann ich aus den Userberichten schliessen, daß schon ab ca. 1 GHz aufwärts das Video ruckelfrei abgespielt werden kann - hängt aber auch von den anderen Komponenten ab - Grafikkarte und Soundschnittstelle.

Vielleicht kannst Du ja mal in den Quellen von Cuttermaran und Mpeg2Schnitt schauen wie die das Abspielen mit Sound gelöst haben, vielleicht kannst Du ja dann Dein Soundproblem umgehen?

Grüße,
Charles
[dBox2 Philips - JtG-Image] [JackTheGrabber 0.74c] [udrec 0.12q]
[ProjectX 0.82.1.02] [Cuttermaran 1.66] [Muxxi V1.10.047] [DVDlabPro 1.55]

leth
Muxxi Dev
Beiträge: 2645
Registriert: Mo 04 Aug 2003, 16:22
Wohnort: Pflach in Tirol :-)
Kontaktdaten:

#7 Beitrag von leth » Di 26 Okt 2004, 7:12

Wenn Du die DLL allerdings speziell für P4-Code anpasst, können alle PIII-Besitzer die DLL nicht mehr nutzen...
So hab ich das garnicht gemein. Dachte eher daran das um die neuen Befehlssätze zu erweitern, so dass ein P4 oder AMD 64 das entsprechend schneller abwickeln kann. Einen älteren Prozessor aussperren möchte ich natürlich nicht!
Da die Mpeg2lib im Mpeg2Schnitt verwendet wird, kann ich aus den Userberichten schliessen, daß schon ab ca. 1 GHz aufwärts das Video ruckelfrei abgespielt werden kann - hängt aber auch von den anderen Komponenten ab - Grafikkarte und Soundschnittstelle.
Ein Film mit einer Auflösung von 720x576 läuft auf meinem Athlon 64 3500+ mit ca. 30 bis 40 FPS. Das bei mpeg2lib.dll mitgelieverte Mpeg2view spielt das mit an die 100 FPS ab. Das Problem ist, dass ich zu blöde bin die Anzeige auf DirectX hinzubekommen. Die Managed DirectX Komponenten sind in der MSDN Library leider sehr schlecht dokumentiert und Bücher gibt es (zumindest auf Deutsch) noch keine :-(

Das Problem liegt jedoch nicht daran ein Bild über DirectX anzeigen zu lassen. Das hatte ich schon eingebaut, nur war das gleich schnell wie die Anzeige die ich über GDI+ realisiert habe. Ich muss wissen, wie man einen Pointer auf eine Bitmap, das liefert nämlich die MPEG2lib.dll, an DirectX übergeben kann und das Bitmap so anzeigen lassen kann.

[Sockenmodus = ON]
Es geht aber nicht nur darum den Film ruckelfrei abzuspielen, sondern schnellstmöglich zu decoden! Warum will ich hier noch nicht sagen :lol:
[Sockenmodus = OFF]
Vielleicht kannst Du ja mal in den Quellen von Cuttermaran und Mpeg2Schnitt schauen wie die das Abspielen mit Sound gelöst haben, vielleicht kannst Du ja dann Dein Soundproblem umgehen?
Also Cuttermaran macht es sich da relativ 'einfach' in dem es auf einen installierten MPEG2Decoder zurück greift und dazu den Mediaplayer mit einbindet. Das bringt mir aber nichts, weil ich an einzelne Bilder herankommen muss.

MPEG2Schnitt ist in Delphi geschrieben. Da kannst Du mir auch gleich einen Chinesischen Text vorlegen, das hätte den selben Effekt :-)

Cu leth
This is leth!

Meine Box: Nokia SAT 2xi Avia 500

Levithan
Site Founder
Site Founder
Beiträge: 2709
Registriert: Mo 04 Aug 2003, 16:22
Kontaktdaten:

#8 Beitrag von Levithan » Di 26 Okt 2004, 13:33

[Sockenmodus = ON]
Es geht aber nicht nur darum den Film ruckelfrei abzuspielen, sondern schnellstmöglich zu decoden! Warum will ich hier noch nicht sagen
[Sockenmodus = OFF]
:box: :zunge: :keks:
SAGEM black 2xI aktuelles JtG Team Image
SAGEM grey 2xI aktuelles JtG Team Image

Software: Gentoo stage1, KDE 3.4
Hardware: P4-3 GHz@3,2, Asus P4P800E-Deluxe, GF-6800LE@400:850:16/6,2048 MB RAM, NEC 1300A (gepatcht)

Warum ich gegen SuSE bin
-----------------

wingman
Site Sponsor
Site Sponsor
Beiträge: 801
Registriert: Mo 04 Aug 2003, 16:22
Kontaktdaten:

#9 Beitrag von wingman » Di 26 Okt 2004, 17:29

@leth: eyh, du bist sooo fies! :fight: :willnicht: :motz: :zunge: :unknown:

gibs zu, darauf hast du doch nur gewartet,
DU FIESE SOCKE, DU! ;)
SAGEM (Kabel) 1xI Avia 600 mit HDD Erweiterung, JTG Team Image mit akt. Snap
Premiere komplett

Benutzeravatar
jmittelst
Co-Admin
Co-Admin
Beiträge: 11013
Registriert: So 16 Nov 2003, 13:42
Wohnort: Schildgen (Bergisch Gladbach)
Kontaktdaten:

#10 Beitrag von jmittelst » Di 26 Okt 2004, 19:48

Irgendwie wird mir der Mund wässrig, satt bin ich aber schon ... hmmm ;)
Schade, das ich vom programmen keine Ahnung habe, hätte Dir gern geholfen. Kannst mal unter http://www.3dwin.net/forum/portal3dwin.php reinschauen. Dort gibt es ein Forum für Programmierer, ob Du da jemanden findest, der Dir weiterhelfen kann, kann ich Dir aber auch nicht versprechen. Zu den meisten Themen gibt es da aber schon kompetente Leute.
cu
Jens
VU+ Ultimo 4k
VU+ Duo²
VU+ Solo²


[Zitat]Es gibt 2 Dinge, die unendlich sind. Das Weltall und die Dummheit der Menschen. Beim Weltall bin ich mir aber nicht so sicher...[/Zitat]
Vorsicht! Lesen kann zu Bildung führen! Links, Suchfunktion, Wikis und Google deshalb nur mit Bedacht nutzen!

Charles
Site Sponsor
Site Sponsor
Beiträge: 654
Registriert: Di 07 Okt 2003, 21:14

#11 Beitrag von Charles » Di 26 Okt 2004, 21:28

Hallo Leth,

Alles klar: Du willst den Video incl. Audio an eine DirectX-Blackbox senden, und das so schnell als möglich. Da Du Dich über den Sinn der Blackbox (noch) ausschweigen willst :twisted: kann ich ja nur raten was da passieren soll.
Aber vielleicht kannst Du den gewünschten Video/Audio-Stream (Schnipsel?) ausschneiden und mit einem externen Tool dann decodieren bzw. umwandeln in das gewünschte Format, und kannst Dir so die eigene Decodierung sparen?

Ich habe mir das Mpeg2Schnitt angeschaut, und habe - so hoffe ich zumindest - die Rückgabe eines Bildes aus der Mpeg2Lib gefunden. Das Ergebnis des Aufrufes wird hier in eine Variable des Typs "PByteArray" geschoben. Das ist eine Dynamische Variable die nur den Pointer auf die tatächliche Position der Datenmenge im Speicher wiederspiegelt. Die Daten werden Byteweise abgelegt, was aber mit der nachfolgenden Verarbeitung zusammenhängen dürfte. Ein Feld des Typs PChar ist lt. Beschreibung das gleiche, wird aber anderes angesprochen. Diese Feldtypen SIND Pointer und könnten denzufolge auch an DirektX weitergegeben werden, wie Du es benötigst. Ich weiß natürlich nicht wie diese Typen in Deiner Programmiersprache heißen oder angewendet werden. In Delphi muss man vor der Benutzung erstmal Speicher zuweisen, die PChar müssen immer mit einem #0 (Low-Value) abgeschlossen werden.

Das Anzeigen im Mpeg2Schnitt wird dann Bild für Bild vorgenommen - das nachzuverfolgen würde aber länger daueren...

Ich hoffe Du kannst mit meinem Geschreibe was anfrangen...


Charles
[dBox2 Philips - JtG-Image] [JackTheGrabber 0.74c] [udrec 0.12q]
[ProjectX 0.82.1.02] [Cuttermaran 1.66] [Muxxi V1.10.047] [DVDlabPro 1.55]

leth
Muxxi Dev
Beiträge: 2645
Registriert: Mo 04 Aug 2003, 16:22
Wohnort: Pflach in Tirol :-)
Kontaktdaten:

#12 Beitrag von leth » Mi 27 Okt 2004, 11:29

DU FIESE SOCKE, DU!
Tja, kennst mich ja :lol: :-)
Du willst den Video incl. Audio an eine DirectX-Blackbox senden, und das so schnell als möglich
Nein, bei der DirectX Implementierung geht es darum die Anzeige zu beschleunigen. Im Moment schaft Muxxi mit meinem PC (Athlon 64 3500+) gerade mal ca. 45 FPS. Das ist zum Anschauen mehr als genug, doch nicht um die Position im Film mit einem Slider laufend zu verändern, da wären so etwa 100 FPS, wie es MPEG2View schafft, wünschenswert.
Ich habe mir das Mpeg2Schnitt angeschaut, und habe - so hoffe ich zumindest - die Rückgabe eines Bildes aus der Mpeg2Lib gefunden. Das Ergebnis des Aufrufes wird hier in eine Variable des Typs "PByteArray" geschoben. Das ist eine Dynamische Variable die nur den Pointer auf die tatächliche Position der Datenmenge im Speicher wiederspiegelt. Die Daten werden Byteweise abgelegt, was aber mit der nachfolgenden Verarbeitung zusammenhängen dürfte. Ein Feld des Typs PChar ist lt. Beschreibung das gleiche, wird aber anderes angesprochen. Diese Feldtypen SIND Pointer und könnten denzufolge auch an DirektX weitergegeben werden, wie Du es benötigst. Ich weiß natürlich nicht wie diese Typen in Deiner Programmiersprache heißen oder angewendet werden. In Delphi muss man vor der Benutzung erstmal Speicher zuweisen, die PChar müssen immer mit einem #0 (Low-Value) abgeschlossen werden.
Da liegt nicht das Problem. Die MPEG2lib.dll liefert mir einen Pointer auf eine Bitmap im Speicher. In VB.NET kann man aus diesem Pointer mit einer einzigen Zeile Code ein Bitmap Objekt erstellen und danach in einer PictureBox anzeigen, abspeichern, oder was auch immer. Das klappt ja auch, nur eben mit ca 40-45 FPS (speichern ist natürlich langsamer, so 10 Bilder pro Sekunde).

Wenn ich nun dieses Bitmap an DirectX übergebe bleibt die Geschwindigkeit gleich! Mit ein paar Tests habe ich nun festgestellt, dass die Erstellung des Bitmaps aus dem Pointer am meisten Rechenzeit benötigt und die Geschwindigkeit der Anzeige dadurch halbiert wird.

Nun suche ich eine Möglichkeit den Pointer direkt an DirectX zu übergeben, so dass die GPU daraus ein Bitmap macht und es anzeigt. Dass es geht weiß ich, denn MPEG2View macht genau dies. Nur das wie in VB.NET kann mir anscheinend niemand sagen :-(

Cu leth
This is leth!

Meine Box: Nokia SAT 2xi Avia 500

Charles
Site Sponsor
Site Sponsor
Beiträge: 654
Registriert: Di 07 Okt 2003, 21:14

#13 Beitrag von Charles » Mi 27 Okt 2004, 17:46

Wenn Du schon einen Pointer aus der DLL bekommst, wieso reichst Du diese nicht einfach weiter? Sind die Feld-Typen nicht kompatibel?
Oder warum nicht einfach das Ergebnis der DLL in einen PChar übergeben (Ohne Bitmap Konvertierung) und dieses weitergeben an DirektX. Bei Bedarf kannst Du dieses PChar wieder als Quelle für eine Bitmap-Konvertierung verwenden.

Ich glaube auch, daß beim Sliden nicht unbedingt jedes Bild angezeigt werden muss. Vielleicht ist es auch OK, nur jedes x. Bild anzuzeigen oder jeden I-Frame...

Ich würde Dir ja gerne mehr helfen, aber
A) Ich kann kein C
B) Ich habe auch kein VB.NET
Ich teile Dir einfach meine Gedanken mit - was ich probieren/testen würde mit Delphi...

Viel Glück noch,
Charles

PS: Auf jeden Fall freue ich mich schon auf das Ergebnis.... :lol:
[dBox2 Philips - JtG-Image] [JackTheGrabber 0.74c] [udrec 0.12q]
[ProjectX 0.82.1.02] [Cuttermaran 1.66] [Muxxi V1.10.047] [DVDlabPro 1.55]

leth
Muxxi Dev
Beiträge: 2645
Registriert: Mo 04 Aug 2003, 16:22
Wohnort: Pflach in Tirol :-)
Kontaktdaten:

#14 Beitrag von leth » Mi 27 Okt 2004, 18:37

Wenn Du schon einen Pointer aus der DLL bekommst, wieso reichst Du diese nicht einfach weiter? Sind die Feld-Typen nicht kompatibel?
Das würde ich ja gerne machen, nur bisher konnte mir noch niemand sagen, wie ich den Pointer an DirectX übergeben kann!

Zu MPEG2Schnitt kann ich nur folgendes nochmal wiederholen:
leth hat geschrieben: MPEG2Schnitt ist in Delphi geschrieben. Da kannst Du mir auch gleich einen Chinesischen Text vorlegen, das hätte den selben Effekt
Ich kann daraus so gut wie nichts rauslesen.

Cu leth
This is leth!

Meine Box: Nokia SAT 2xi Avia 500

Benutzeravatar
jmittelst
Co-Admin
Co-Admin
Beiträge: 11013
Registriert: So 16 Nov 2003, 13:42
Wohnort: Schildgen (Bergisch Gladbach)
Kontaktdaten:

#15 Beitrag von jmittelst » Do 28 Okt 2004, 4:47

Hmm - von Cuttermaran gibt es doch auch Sourcen - worin ist das denn geschrieben? Oder macht Cuttermaran das wieder ganz anders?
cu
Jens
VU+ Ultimo 4k
VU+ Duo²
VU+ Solo²


[Zitat]Es gibt 2 Dinge, die unendlich sind. Das Weltall und die Dummheit der Menschen. Beim Weltall bin ich mir aber nicht so sicher...[/Zitat]
Vorsicht! Lesen kann zu Bildung führen! Links, Suchfunktion, Wikis und Google deshalb nur mit Bedacht nutzen!

Antworten