Jump to content

Probleme Mit Dokumentation Der Plugin Api


Recommended Posts

Hi.

 

Ich hab mal angenfangen ein wenig mit dem Plugin SDK rumzuspielen... :robot:

Mit der "alten API" komme ich auch soweit ganz gut zurecht... nur frag ich mich, was IGraphbuilder für ein Typ/Objekt ist, was man bei "GetGraph" bekommt, das ist irgendwie nirgendwo erläutert (geschweige denn deklariert, so dass man compilieren könnte :bye:).

 

Zu dem ganzen Com Interface (der IGraphbuilder gehört auch irgendwie dazu, oder? Ist da aber auch nicht erklärt, glaub ich.. zumindest findet die suche ihn nicht): Gibts da irgendwie Beispiele, wie man das nutzt? :)

Das hört sich ja schon interessant an.. da kann man ja richtig viele Informationen auslesen, wäre also schon hoch interessant...

 

Noch eine spezielle Frage: kann man irgendwie feststellen, welches Gerät gerade genutzt wird? Das VideoRecorder Plugin zeigt ja so schön den Namen an.. irgendwie seh ich keinen Weg, wie es das macht. *grübel* Überhaupt erfährt man über die Geräte recht wenig, oder irre ich mich da? Wird die "cardnumber" immer noch ignoriert, wie es in der COM Interface Dokumentation steht?

 

Gruß

Moses

 

//Edit: Direkt noch ein Problem... die PidCallback Funktion wird nicht aufgerufen... beim Pid Dumper funktioniert das auch nicht.. *grübel*. Verstehe ich das richtig, dass man bei Execute die Pids setzt, zu denen man die TS Pakete haben will und dann wird PidCallback aufgerufen? Was passiert, wenn ich mehr als 11 Pids haben will? :) Oder wofür ist der PPluginPids Parameter bei Execute gut?

Ich bitte um Hilfe... die Erklärungen in der Hilfe sind leider recht "dünn" (Ich kann natürlich verstehen, dass ihr wenig Zeit/Lust für solche Dokumentation habt... ich kenn das *g*) ... und das Beispiel funktioniert halt auch irgendwie nicht *grübel*.

Edited by Moses
Link to comment

Der IGraphbuilder ist Bestandteil der DirectShow API von Microsoft. Damit kannst Du zugriff erlangen auf den Wiedergabegraphen des DVBViewers. Ist sehr ausführlich bei MSDN dokumentiert, eine Delphi Implementation findet man unter http://www.progdigy.com/ .

Link to comment
kann man irgendwie feststellen, welches Gerät gerade genutzt wird?

Teil einer Speziallösung, da das VRPlugin als Recorder selbst ein Gerät belegt und durch einen DVBViewer-internen Wrapper unterstützt wird, der Geräte-Anforderung, Freigabe usw. regelt.

 

Verstehe ich das richtig, dass man bei Execute die Pids setzt, zu denen man die TS Pakete haben will

Die Methode ist veraltet und wird nicht mehr unterstützt. So macht es das VRPlugin:

 

const
 WM_DVBVIEWER   = $B2C2;
 MSG_STARTFILTER= $2120;
 MSG_STOPFILTER = $2130;

function TfrmVideoRecorder.SetPids(DoSet: Boolean): Boolean;
var
 i,msg: Integer;
begin
 result := false;
 if nPids = 0 then exit;
 if DoSet then msg :=  MSG_STARTFILTER else msg :=  MSG_STOPFILTER;
 for i := 0 to nPids-1 do
SendMessage(dvbHandle,WM_DVBVIEWER,msg,Integer(Pids[i]));
 SendMessage(dvbHandle,WM_DVBVIEWER,msg,$FFFF);  //end of transmission
 result := true;
end;

 

dvbHandle ist dabei das durch SetAppHandle übergebene Handle des DVBViewer-Hauptfensters.

Link to comment

Ok, vielen Dank, das hilft mir doch schon sehr weiter.. :)

 

Allerdings lauf ich da direkt wieder in das nächste Problem und fürchte da ist noch was veraltet, kann das sein? Ich hab jetzt einfach den PID Dumper angepasst, mit den PID Filtern.. jetzt wird PIDCallback auch aufgerufen, nur schmiert dann der ganze DVBViewer ab... das ist sogar unabhängig davon, was ich mache, selbst wenn die Prozedur gar nichts tut!! Das führt mich zu der Annahme, dass das ganze keine Prozedur mehr ist, sondern der DVBViewer eine Rückgabe erwartet und dann versucht die zu lesen, richtig? *grübel*

 

Sorry, dass ich so nerve... <_< will doch nur etwas über die geheimnisse der Transport Streams und des DVB Viewers erfahren (und damit rumspielen.. ) :)

 

//edit: ok, es muss einfach nur ein pointer sein... interessant ist, dass das SDK den Pointer Typ definiert, aber nicht nutzt... hätte mich direkt stutzig machen sollen ;)

Edited by Moses
Link to comment
  • 4 months later...

Hi Leute,

 

ich grabe diesen alten Thread mal aus weil ich ein ähnlich gelagertes, und vermutlich leicht zu lösendes Problem habe:

 

Ich kann mit

 

SendMessage(dvbHandle,WM_DVBVIEWER,MSG_STARTFILTER, PID)

... hier evt. weitere PIDs "öffen"

SendMessage(dvbHandle,WM_DVBVIEWER,MSG_STARTFILTER, $FFFF)

 

den PID-Filter öffnen und die TS-Pakete der gewünschten PID(s) per PidCallback lesen, so wie es sein sollte.

 

Wenn ich damit fertig bin, will ich natürlich ordentlich sein und hinter mir aufräumen, sprich den / die PID-Filter die ich nicht mehr brauche wieder schließen. Dies ist insoweit auch wichtig, als das eine meiner Karten eine Cablestar2 ist, bei der bekanntlich Hardware Pid-Filter vorhanden sind, aber nur in begrenzter Anzahl. Folglich verwende ich dann:

 

SendMessage(dvbHandle,WM_DVBVIEWER,MSG_STOPFILTER, PID)

...

SendMessage(dvbHandle,WM_DVBVIEWER,MSG_STOPFILTER, $FFFF)

 

und wenn ich das mache, ranzt der DVBViewer an genau dieser Stelle ab.

 

Die Variable PID ist bei mir vom Typ Word, aber ich habe es auch als Integer probiert, daran liegt es also offenbar nicht.

 

Was mache ich falsch ?

 

C.U. NanoBot

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...