Kennt sich hier einer mit C++ und Assembly-Code aus?
-
- 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?
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
Also, wenn jemand Lust hat sich der Sache anzunehmen, bitte melden.
Cu leth
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
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) 54-mal heruntergeladen
kann zwar nicht die sprachen nicht , aber vielleicht hilfs dir weiter !
ist neuer als deine.
quelle:http://www.winbibel.de/de/mpegcut.htm
ist neuer als deine.
quelle:http://www.winbibel.de/de/mpegcut.htm
oder das hilf dir weiter
http://logicnet.dk/lib/
http://www.mpeg.org/MPEG/MSSG/
habe es oben rausgenommen , da gleiche..
http://logicnet.dk/lib/
http://www.mpeg.org/MPEG/MSSG/
habe es oben rausgenommen , da gleiche..
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
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]
[ProjectX 0.82.1.02] [Cuttermaran 1.66] [Muxxi V1.10.047] [DVDlabPro 1.55]
-
- Muxxi Dev
- Beiträge: 2645
- Registriert: Mo 04 Aug 2003, 16:22
- Wohnort: Pflach in Tirol :-)
- Kontaktdaten:
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!Wenn Du die DLL allerdings speziell für P4-Code anpasst, können alle PIII-Besitzer die DLL nicht mehr nutzen...
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 keineDa 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.
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
[Sockenmodus = OFF]
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.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?
MPEG2Schnitt ist in Delphi geschrieben. Da kannst Du mir auch gleich einen Chinesischen Text vorlegen, das hätte den selben Effekt
Cu leth
[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]
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
-----------------
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
-----------------
- jmittelst
- Co-Admin
- Beiträge: 11013
- Registriert: So 16 Nov 2003, 13:42
- Wohnort: Schildgen (Bergisch Gladbach)
- Kontaktdaten:
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
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!
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!
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 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
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 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]
[ProjectX 0.82.1.02] [Cuttermaran 1.66] [Muxxi V1.10.047] [DVDlabPro 1.55]
-
- Muxxi Dev
- Beiträge: 2645
- Registriert: Mo 04 Aug 2003, 16:22
- Wohnort: Pflach in Tirol :-)
- Kontaktdaten:
Tja, kennst mich jaDU FIESE SOCKE, DU!
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.Du willst den Video incl. Audio an eine DirectX-Blackbox senden, und das so schnell als möglich
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).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.
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
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....
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....
[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]
[ProjectX 0.82.1.02] [Cuttermaran 1.66] [Muxxi V1.10.047] [DVDlabPro 1.55]
-
- Muxxi Dev
- Beiträge: 2645
- Registriert: Mo 04 Aug 2003, 16:22
- Wohnort: Pflach in Tirol :-)
- Kontaktdaten:
Das würde ich ja gerne machen, nur bisher konnte mir noch niemand sagen, wie ich den Pointer an DirectX übergeben kann!Wenn Du schon einen Pointer aus der DLL bekommst, wieso reichst Du diese nicht einfach weiter? Sind die Feld-Typen nicht kompatibel?
Zu MPEG2Schnitt kann ich nur folgendes nochmal wiederholen:
Ich kann daraus so gut wie nichts rauslesen.leth hat geschrieben: MPEG2Schnitt ist in Delphi geschrieben. Da kannst Du mir auch gleich einen Chinesischen Text vorlegen, das hätte den selben Effekt
Cu leth
- jmittelst
- Co-Admin
- Beiträge: 11013
- Registriert: So 16 Nov 2003, 13:42
- Wohnort: Schildgen (Bergisch Gladbach)
- Kontaktdaten:
Hmm - von Cuttermaran gibt es doch auch Sourcen - worin ist das denn geschrieben? Oder macht Cuttermaran das wieder ganz anders?
cu
Jens
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!
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!