Graph in der ROT registrieren - wie?
Graph in der ROT registrieren - wie?
Gibt es in PureBasic einen einfachen Weg, einen Directshow Graph in der Running Objects Table zu registrieren, oder den Graph in eine .grf Datei zu schreiben, so dass man mittels GraphEdit debuggen kann?
Ich habe auf der Microsoft website einige C++ Funktionen dafuer gefunden, kenne mich aber leider weder mit C++ noch mit PureBasic gut genug aus, um diese Funktionen anpassen und nutzen zu koennen.
Ich hoffe, dass schonmal jemand was damit gemacht hat.
Im Voraus vielen Dank!!!
Ich habe auf der Microsoft website einige C++ Funktionen dafuer gefunden, kenne mich aber leider weder mit C++ noch mit PureBasic gut genug aus, um diese Funktionen anpassen und nutzen zu koennen.
Ich hoffe, dass schonmal jemand was damit gemacht hat.
Im Voraus vielen Dank!!!
The manual said 'Windows XP or better' ... so I used Linux.
Öhm
Ich hab zwar nicht ganz verstanden, was du da machen willst, aber es hört sich so kompliziert an, dass du es als PB-Anfänger da wohl kaum was tun kannst.
Überleg mal, ob es Alternativen zu der Vorgehensweise gibt, die du beschrieben hast. Eventuell vielleicht bringt das die Lösung näher.
Greetz Laurin
Ich hab zwar nicht ganz verstanden, was du da machen willst, aber es hört sich so kompliziert an, dass du es als PB-Anfänger da wohl kaum was tun kannst.
Überleg mal, ob es Alternativen zu der Vorgehensweise gibt, die du beschrieben hast. Eventuell vielleicht bringt das die Lösung näher.
Greetz Laurin
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
And we're out of beta. We're releasing on time.
Die einzige Alternative, die mir bisher eingefallen ist, ist raten. Meine Erfahrung zeigt mir jedoch, dass diese Methode nicht immer sehr zuverlaessig ist.
Der Grund warum ich das machen will ist, herauszufinden, welche DirectShow Filter tatsaechlich verwendet werden und wie diese miteinander verbunden sind. Gerade wenn man verschiedene Renderer verwendet (Overlay, VMR7, VMR9, windowed, windowless, ...) dann ist es wichtig zu wissen, ob auch tatsaechlich der gewuenschte Renderer verwendet wird.
Noch wichtiger wird das ganze wenn man Capture Devices mittels WDM Filter verwendet. Ich kann mir vorstellen, dass es ohne eine Debugmoeglichkeit mit GraphEdit zu einem Alptraum werden kann, einen Fehler zu finden.
Der Grund warum ich das machen will ist, herauszufinden, welche DirectShow Filter tatsaechlich verwendet werden und wie diese miteinander verbunden sind. Gerade wenn man verschiedene Renderer verwendet (Overlay, VMR7, VMR9, windowed, windowless, ...) dann ist es wichtig zu wissen, ob auch tatsaechlich der gewuenschte Renderer verwendet wird.
Noch wichtiger wird das ganze wenn man Capture Devices mittels WDM Filter verwendet. Ich kann mir vorstellen, dass es ohne eine Debugmoeglichkeit mit GraphEdit zu einem Alptraum werden kann, einen Fehler zu finden.
The manual said 'Windows XP or better' ... so I used Linux.
Da braucht man wohl Kenntnisse in DirectX, die hier im Board die Meisten sicher nicht haben (sonst hätten die schon was gepostet).Der Grund warum ich das machen will ist, herauszufinden, welche DirectShow Filter tatsaechlich verwendet werden und wie diese miteinander verbunden sind.
Du hattest gepostet, dass es C++ Codes für dein Anliegen gibt. Vielleicht kann man sie nach PB portieren. Poste sie doch bitte hier.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
And we're out of beta. We're releasing on time.
Hast ja Recht, ich haette diese Funktionen schon lange mal hier posten koennen.
Hier sind mal zwei Links.
Graphen in der ROT registrien:
http://msdn.microsoft.com/library/en-us ... frame=true
Graphen in eine .grf Datei schreiben:
http://msdn.microsoft.com/library/en-us ... frame=true
Wie gesagt, ich habe keine Ahnung, wie ich diese Funktionen nach PB uebersetzen koennte. Vielleicht kann das ja jemand anders.
Hier sind mal zwei Links.
Graphen in der ROT registrien:
http://msdn.microsoft.com/library/en-us ... frame=true
Graphen in eine .grf Datei schreiben:
http://msdn.microsoft.com/library/en-us ... frame=true
Wie gesagt, ich habe keine Ahnung, wie ich diese Funktionen nach PB uebersetzen koennte. Vielleicht kann das ja jemand anders.
The manual said 'Windows XP or better' ... so I used Linux.
Sieht auf den ersten Blick wirklich nicht allzu kompliziert aus.normen hat geschrieben:Graphen in der ROT registrien:
http://msdn.microsoft.com/library/en-us ... frame=true
Graphen in eine .grf Datei schreiben:
http://msdn.microsoft.com/library/en-us ... frame=true
Wie gesagt, ich habe keine Ahnung, wie ich diese Funktionen nach PB uebersetzen koennte. Vielleicht kann das ja jemand anders.
Wie wär's wenn Du einfach mal anfängst, das ganze zu übersetzen (Bitte aus
den SDK-Examples, nicht von der MSDN-Seite). Sobald Du auf Probleme stösst,
können diese sicherlich im Forum "gemeinsam erarbeitet" werden.
Du hast ja bereits einen Code in der Hand, der quasi 1:1 aus dem SDK übersetzt
wurde - mit ein wenig Transferleistung und meinetwegen google sollte dies
IMHO auch für jemanden, der C/C++ nicht fliessend spricht, zu bewerkstelligen
sein.
Viele hier, einschließlich mir, sind sicherlich gerne bereit Dir dabei zu helfen.
Persönlich weigere ich mich aber, Dir einfach den kompletten Code zu übersetzen
Weil Du immer so lieb danke sagst
, habe ich Dir - entgegen meinen Grundsätzen -
mal eben die Funktion AddToRot() übersetzt. Ist wirklich nichts schlimmes.
Das sollte Dich zumindest (so hoffe ich) auf den richtigen Weg bringen:
Ich hab's mal ausprobiert - funktioniert sogar 
(graphedit.exe -> File / Connect to Remote Graph)
Bzgl. der etwas hakelig aussehenden WideChar-Konstrukte bin ich für Vorschläge offen.
Makros wären cool...
Achso: Wg. des LCase() bin ich mir nicht sicher, ob das tatsächlich benötigt wird,
der Original-Code generiert aber auch kleine Buchstaben (%08x / %08X)
Man hätte natürlich auch direkt wsprintfW() (user32.dll) benutzen können,
ich fand's so aber einfach anschaulicher.
So... ich hoffe, das hilft!
mal eben die Funktion AddToRot() übersetzt. Ist wirklich nichts schlimmes.
Das sollte Dich zumindest (so hoffe ich) auf den richtigen Weg bringen:
Code: Alles auswählen
#ROTFLAGS_REGISTRATIONKEEPSALIVE = $01
Structure WCHAR
c.w[#MAX_PATH]
EndStructure
Procedure.l AddToRot(*pUnkGraph.IUnknown, *pdwRegister.l)
*pMoniker.IMoniker
*pROT.IRunningObjectTable
If GetRunningObjectTable_(0, @*pROT) <> 0
ProcedureReturn #E_FAIL
EndIf
sz.s = "FilterGraph "+LCase(RSet(Hex(*pUnkGraph), 8, "0"))+" pid "+LCase(RSet(Hex(GetCurrentProcessId_()), 8, "0"))
MultiByteToWideChar_(#CP_ACP, 0, sz, -1, @wsz.WCHAR, Len(sz))
MultiByteToWideChar_(#CP_ACP, 0, "!", -1, @wsz2.WCHAR, 1)
hr.l = CreateItemMoniker_(wsz2, wsz, @*pMoniker)
If hr = 0
hr = *pROT\Register(#ROTFLAGS_REGISTRATIONKEEPSALIVE, *pUnkGraph, *pMoniker, *pdwRegister)
*pMoniker\Release()
EndIf
*pROT\Release()
ProcedureReturn hr
EndProcedure
(graphedit.exe -> File / Connect to Remote Graph)
Bzgl. der etwas hakelig aussehenden WideChar-Konstrukte bin ich für Vorschläge offen.
Makros wären cool...
Achso: Wg. des LCase() bin ich mir nicht sicher, ob das tatsächlich benötigt wird,
der Original-Code generiert aber auch kleine Buchstaben (%08x / %08X)
Man hätte natürlich auch direkt wsprintfW() (user32.dll) benutzen können,
ich fand's so aber einfach anschaulicher.
So... ich hoffe, das hilft!
traumatc,
Ich weiss gar nicht, wie ich das alles wieder gut machen kann. (Mal wieder) Vielen, vielen Dank.
Aber von nun an moechte ich, dass Du zu Deinen Grundsaetzen stehst.

Ich weiss gar nicht, wie ich das alles wieder gut machen kann. (Mal wieder) Vielen, vielen Dank.
Aber von nun an moechte ich, dass Du zu Deinen Grundsaetzen stehst.
Damit hast Du voellig Recht. Asche auf mein Haupt.Wie wär's wenn Du einfach mal anfängst, das ganze zu übersetzen (Bitte aus
den SDK-Examples, nicht von der MSDN-Seite). Sobald Du auf Probleme stösst,
können diese sicherlich im Forum "gemeinsam erarbeitet" werden.
...
Viele hier, einschließlich mir, sind sicherlich gerne bereit Dir dabei zu helfen.
Persönlich weigere ich mich aber, Dir einfach den kompletten Code zu übersetzen
The manual said 'Windows XP or better' ... so I used Linux.