tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
12
ZUGRIFFE
6749
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.630
    Blog-Einträge
    4
    Mahlzeit. Also mal wieder Ich. Es ist zum Heulen. Ich sitze in unregelmäßigen Abständen am Visualstudio2005 und versuche meine ersten Schritte in aktuellen Sprachen. Wenn ich doch zumindest eine Source runterladen und einfach kompilieren könnte, wäre zumindest ein kleines Glücksgefühl da.
    Nee Nee, so einfach ist das alles nicht #WÜRG# !

    Aufgabenstellung:
    Unter VS2005 - ob VB oder C# - einfach nur ein Previewfenster des Videoeingangs zeigen.
    Also FirewireCam angeschlossen und per WDM oÄ ansprechen.

    Sources mit 100% Lösungsansätzen:
    http://www.limegreensocks.com/DShow/
    http://sourceforge.net/project/showf...roup_id=136334

    Nun:
    Ich bekomme nicht mal "Capturetest" von der ersten Seite zum Laufen.
    Fehler/Warnungen: Directshowlib nicht referenziert.
    In der DirectX.Capture ist sie sauber verwiesen, in der Capturetest findet er sie nicht.

    Also:
    Suche Hilfe. Jemand der mit mir die Capturetest von Anfang bis zum erfolgreichem
    Release-Compile durchgeht.

    Nebenbei: Bin bereit, zu Donaten, wenn mir jemand die Basics von VB/C#.Net beibringt.
    Beispiel: Diese Seite - deren Codesnippets und ihre Anwendung in eigenen Projekten
    hinreichend erklären

    mfg chmee
    Geändert von chmee (23.10.06 um 13:58 Uhr)
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  2. #2
    Avatar von SixDark
    SixDark SixDark ist offline Mitglied Brokat
    Registriert seit
    Nov 2002
    Ort
    British Virgin Islands
    Beiträge
    424
    Warum löscht Du den defekten Verweis nicht und fügst ihn von Hand wieder hinzu?
    Könnte sein, dass die Version nicht stimmt oder ähnliche Probleme...
     

  3. #3
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.630
    Blog-Einträge
    4
    Danke Das mit dem neu Hinzufügen hat geklappt.

    Kommt davon, wenn ich es nicht gewohnt bin, dass ein einfacher Code einen
    Riesenunterbau benötigt ( Projektordner, IDE-Einstellungen )

    mfg chmee
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  4. #4
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.630
    Blog-Einträge
    4
    Zu guter Erst, Ich kenne es aus den mir innewohnenden Fachgebieten, dass nuub-Fragen
    echt ärgerlich sind. Und Meine Antwort ist das diplomatische "Die Welt ist voll von Tuts,
    also lerne !" Stehe nun als genau der "N o o b" da

    1. Video per Openfiledialog aussuchen - Läuft
    2. Graphbuilder erstellen - ?
    3. Videowindow initialisieren - ? Wo wird das Video dargestellt ? Form ?
    4. Video im Pause Modus auf Frame 0 darstellen UND auslesen können

    Ziel: Einzelbilder eines Videos mit Tastendruck durchgehen.

    Im Directshowlib2005-Sample(PlayWnd) ist natürlich ein Beispiel drin, aber leider mit so einem
    Overhead, dass ich nicht durchblicke.

    Nochmal: Ein bisschen unter die Arme greifen täte mir wirklich gut mfg chmee
    Geändert von chmee (25.10.06 um 20:03 Uhr)
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  5. #5
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    1. Sollte selbst für einen n o o b kein Problem darstellen. *fg*
    2. Benötigte Objekte
      Code csharp:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      
      IGraphBuilder m_objGraphBuilder = null;
       
      IBasicVideo2 m_objBasicVideo2 = null;
      IBasicAudio m_objBasicAudio = null;
       
      IVideoWindow m_objVideoWindow = null;
      IVideoFrameStep m_objVideoFrameStep = null;
       
      IMediaEventEx m_objMediaEventEx = null;
      //IMediaSeeking m_objMediaSeeking = null;
      IMediaPosition m_objMediaPosition = null;
      IMediaControl m_objMediaControl = null;
      /*-------------------------------------------------------------------------------------------*/
      const int WM_APP = 0x8000;
      const int WM_GRAPHNOTIFY = WM_APP + 1;
      const int EC_COMPLETE = 0x01;
      const int WS_CHILD = 0x40000000;
      const int WS_CLIPCHILDREN = 0x02000000;
      const int WS_CLIPSIBLINGS = 0x04000000;
      Interfaces Öffnen:
      Code csharp:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      
      void GetInterfaces( string clipFile ) {
          Type comtype = null;
          object comobj = null;
          try {
              try{
                  comtype = Type.GetTypeFromCLSID( Clsid.FilterGraph );
                  if ( comtype == null )
                      throw new NotSupportedException( "DirectX (8.1 or higher) not installed?" );
                  comobj = Activator.CreateInstance( comtype );
                  m_objGraphBuilder = (IGraphBuilder) comobj;
                  comobj = null;
       
                  int hr = m_objGraphBuilder.RenderFile( clipFile, null );
                  if ( hr < 0 )
                      Marshal.ThrowExceptionForHR( hr );
       
                  m_objMediaControl = (IMediaControl) m_objGraphBuilder;
                  m_objMediaEventEx = (IMediaEventEx) m_objGraphBuilder;
                  //m_objMediaSeeking = (IMediaSeeking) m_objGraphBuilder;
                  m_objMediaPosition = (IMediaPosition) m_objGraphBuilder;
       
                  m_objVideoWindow = m_objGraphBuilder as IVideoWindow;
                  m_objBasicVideo2 = m_objGraphBuilder as IBasicVideo2;
                  m_objBasicAudio = m_objGraphBuilder as IBasicAudio;
              }
              finally {
                  if ( comobj != null ){
                      Marshal.ReleaseComObject( comobj );
                      comobj = null;
                  }
              }
          }
          catch ( Exception ex ){
              throw new COMException( string.Format(
                  "DirectShow.NET Error!{0}Could not get interfaces. See InnerException for Details!{0}", Environment.NewLine ),
                  ex );
          }
          
      }
      Interfaces Schließen:
      Code csharp:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      
      public int CloseInterfaces() {
          int hr = 0;
          try {
              if ( m_objMediaControl != null ){
                  hr = m_objMediaControl.StopWhenReady();
                  m_objMediaControl = null;
              }
       
              if ( m_objMediaEventEx != null ){
                  hr = m_objMediaEventEx.SetNotifyWindow( IntPtr.Zero, WM_GRAPHNOTIFY, IntPtr.Zero );
                  m_objMediaEventEx = null;
              }
       
              if ( m_objVideoWindow != null ){
                  hr = m_objVideoWindow.put_Visible( DsHlp.OAFALSE );
                  hr = m_objVideoWindow.put_Owner( IntPtr.Zero );
                  m_objVideoWindow = null;
              }
       
              //m_objMediaSeeking = null;
              m_objMediaPosition = null;
              m_objBasicVideo2 = null;
              m_objVideoFrameStep = null;
              m_objBasicAudio = null;
       
              if ( m_objGraphBuilder != null )
                  Marshal.ReleaseComObject( m_objGraphBuilder );
              m_objGraphBuilder = null;
          }
          catch{}
          return hr;
      }}
    3. Input Typ Analysieren:
      Code csharp:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      
      internal enum ClipType
      {
          None,
          AudioVideo,
          VideoOnly,
          AudioOnly
      }
       
      ClipType clipType;
       
      void CheckClipType() {
          if ( m_objBasicAudio == null )
              clipType = ClipType.None;
          else
              clipType = ClipType.AudioOnly;
       
          if ( (m_objVideoWindow == null) || (m_objBasicVideo2 == null) )
              return;
       
          int visible;
          int hr = m_objVideoWindow.get_Visible( out visible );
          if ( hr < 0 )
              return;
          else{
              if ( m_objBasicAudio == null )
                  clipType = ClipType.VideoOnly;
              else
                  clipType = ClipType.AudioVideo;
          }
      }
      Video Laden:
      Das videoWindowHandle ist das Handle zu einem Control, in dem das Video "hineingemalt" werden soll.
      In der Regel ein Panel
      Das notifyWindowHandle ist has Handle zu dem Control an welches die EC_COMPLETE Nachricht gesendet wird.
      (Wenn die Wiedergabe abgeschlossen ist)
      Dieses Control sollte immer das Parent des Panels sein, in dem Du das Video wieder gibst.
      Code csharp:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      
      int PrepareToPlayback( out int hr, IntPtr videoWindowHandle, Rectangle videoWindowRectangle, IntPtr notifyWindowHandle ) {
          
          hr = -1;
       
          CloseInterfaces();
          if ( !GetInterfaces( sFileName ) )
              return hr;
       
          CheckClipType();
          if ( clipType == ClipType.None )
              return hr;
       
          hr = m_objMediaEventEx.SetNotifyWindow( notifyWindowHandle, WM_GRAPHNOTIFY, IntPtr.Zero );
       
          if ( (clipType == ClipType.AudioVideo) || (clipType == ClipType.VideoOnly) ){
              m_objVideoWindow.put_Owner( videoWindowHandle ); //Handle des Video Panel's holen
              m_objVideoWindow.put_WindowStyle( WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN );
              m_objVideoWindow.SetWindowPosition(
                  videoWindowRectangle.Left, //VideoFenstergröße dem Video Panel anpassen
                  videoWindowRectangle.Top,
                  videoWindowRectangle.Width,
                  videoWindowRectangle.Height );
          }
          else throw new Exception( "Tartegetfile has only Audio Stream!" );
       
          return hr;
      }
      Video Abspielen:
      Code csharp:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      
      public bool Play( IntPtr videoWindowHandle, Rectangle videoWindowRectangle, IntPtr notifyWindowHandle ) {
          try {
              int hr;
              
              PrepareToPlayback( out hr, videoWindowHandle, videoWindowRectangle, notifyWindowHandle );
              else
                  hr = 0;
       
              if ( hr >= 0 )
                  hr = m_objMediaControl.Run();
              return hr >= 0;
          }
          catch ( Exception ex ){
              throw new COMException( string.Format("DirectShow.NET{0}Could not start clip. See InnerException for Details!{0}", Environment.NewLine ), ex );
          }
      }
      Ende der Wiedergabe:
      Um festzustellen wann eine Datei abgespielt wurde, wird die WndProc-Methode des Controls überschrieben,
      welches in der Play Funktion als NotifyWindow angegeben wurde, um die EC_COMPLETE Nachricht abzufangen.
      Code csharp:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      
      DsEvCode DirectShowEventCode;
      int DirectShowEventParam1, DirectShowEventParam2, DXexec_hr = 0;
       
      protected override void WndProc( ref Message m ) {
          
          if ( m.Msg == myDirectShowPlayer.WMgraphnotify ) {
              try {
                  do {
                      v_DXexec_hr = myDirectShowPlayer.objMediaEventEx.GetEvent(
                          out DirectShowEventCode,
                          out DirectShowEventParam1,
                          out DirectShowEventParam2,
                          0 );
                      if ( DXexec_hr < 0 )
                          break;
       
                      DXexec_hr = myDirectShowPlayer.objMediaEventEx.FreeEventParams(
                          DirectShowEventCode,
                          DirectShowEventParam1,
                          DirectShowEventParam2 );
       
                      if ( DirectShowEventCode == DsEvCode.Complete ) 
                          myDirectShowPlayer.objMediaControl.Pause();
                  } while ( DXexec_hr == 0 );
              }
              catch ( Exception ex ) {
                  Trace.WriteLine( ex.ToString() );
              }
          }
          
       
          base.WndProc( ref m );
      }
    4. Video Stoppen und "zurück spulen":
      Code csharp:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
      public bool Stop() {
          try {
              m_objMediaControl.StopWhenReady();
              int hr = m_objMediaPosition.put_CurrentPosition( 0 );
              return hr >= 0;
          }
          catch ( Exception ex ){
              throw new COMException( string.Format("DirectShow.NET{0}Could not stop clip. See InnerException for Details!{0}", Environment.NewLine ), ex );
          }
      }
    Der Code ist kein Copy-Paste. Es sind snippeds meiner Implemtation,
    aus denen ich einiges an Statusangaben entfernt und anderen Sachen habe.
    Er zeigt Dir lediglich wie man die Interfaces öffnet, den Videotyp prüft, das Video abspielt, stoppt und das Ende der Wiederagabe fest stellt.

    Frag wenn Du noch offene Fragen hast.
    Geändert von Christian Kusmanow (22.01.07 um 10:12 Uhr) Grund: Rückgaberwert bei GetInterfaces auf void geändert (war überflüssig)
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  6. #6
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.630
    Blog-Einträge
    4
    Erstmal 1000 Dank. Leider komme ich gerade von Arbeit und muss gleich weiter,
    habe morgen Zeit, teste damit meine Knowledge und melde mich .

    mfg chmee

    **EDIT**

    zu 1. Doch Da ist nix Sequentielles mehr. Mein Problem ist - wie schon mehrmals angedeutet -
    dass ich in die OOP-Denke noch nicht reinfinden konnte. Aber dann eben jetzt mit der Brechstange.

    2.
    Interfaces öffnen - hmm , ok .. Darf man sowas Prozedur oder Funktion nennen ?
    Rückgabewert Bool ob oK oder nicht, right ? Warum ist hiervor kein Public ?

    Interfaces schließen - auch OK - und warum wird hier ein public gesetzt ?
    -- Eine Klammer am Ende zuviel ?

    Play - Wozu das Else da drin ?

    DSevCode ? Welche Klasse/Verweis ?
    ClsId - Woher das und woher Marshal

    Werde es jetzt auf meine Bedürfnisse umschreiben bzw. erst mal zum Laufen kriegen.
    Trial and Error to learn this Shice

    mfg chmee
    Geändert von chmee (27.10.06 um 18:45 Uhr)
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  7. #7
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Ohh mann, hättest ruhig einen neuen Post erstellen und den alten löschen können.
    Hab deine Antort gar net mitbekommen.
    1. GetInterfaces - Die Methode würde ich eine Funktion nenen, da sie einen Rückgabewert hat.
      Die Funktion ist nicht public, da sie nur intern verwendet werden soll. Also nur von den Wiedergabemethoden.
    2. CloseInterfaces - Die Methode ist public damit von aussen her alles abgebrochen werden kann.
      Zb bei'm schließen des Programms. Ich würde das sowieso explizit in der Dispose Methode deines Controls aufrufen!
      Also das mit der Klammer ist ja mal tragisch.
    3. Play - Das else ist drinnen, damit hr auf 0 gesetzt wird wenn die Widergabe nicht initialisiert werden konnte.
    4. DsEvCode ist in der DS Lib vorhanden, ergo musst sie auch referenzieren.
      Was Marshal ist, kannst in der MSDN oder in deinem Objektbrowser nachlesen.
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  8. #8
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.630
    Blog-Einträge
    4
    Nicht schlimm.. Musste mich eh n paar Tage damit beschäftigen.

    Habe jetzt ne Woche nicht dran gesessen, stand da vor dem Problem, dass ich
    den Pause-Modus bzw. frameweises Weitergehen nicht hinbekommen habe.

    Danke erstmal, ich merke, dass mir alle Hilfe nichts bringt, wenn ich es nicht restlos
    verstanden habe..

    mfg chmee
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  9. #9
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Dann debugge dich durch das Beispiel auf TheCodeProject. Das ist für mein verhältnisse einfach gestrickt und lauffähig.
    Ich denke wenn Du dir ein bissel mühe gibst, wirst das schon verstehen.
    Ich hab das auch nur mit Hilfe von dem Beispiel von TheCodeProject verstanden.

    Für das vor- und zurückspulen verwendest m_objMediaPosition.put_CurrentPosition.
    Als Control könntest eine TrackBar verwenden. TrackBar.MaxValue währe dann m_objMediaPosition.get_Duration.
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  10. #10
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.630
    Blog-Einträge
    4
    Hi Mal wieder die Zeit gefunden, um weiter am Modul Video zu drehen..

    Bin im Geiste C# näher gekommen.

    Also neue Fragen - nehmen wir den obigen SourceCode als Beispiel.
    Code :
    1
    
     m_objVideoWindow.put_Owner( videoWindowHandle );
    1. Das videoWindowHandle wäre im Falle des gemeinten Panel also Panel1.Handle ?
    ( bzw in Deinem Fall ein Panel namens videoWindowRectangle )

    Und das WindowNotify-Handle wäre als Parent zB Mainform.Handle ?

    Code :
    1
    
    PrepareToPlayback( [B]out hr[/B], videoWindowHandle, videoWindowRectangle, notifyWindowHandle );
    2. Was heisst das out hr ?

    Code :
    1
    2
    
    const int WM_APP = 0x8000;
    const int WM_GRAPHNOTIFY = WM_APP + 1;
    ist im DShow-Sample
    Code :
    1
    
    private const int WMGraphNotify = 0x0400 + 13;
    3. Ist 0x0400+13=0x8000+1 ? Hex-Kodierung und Dezimal gemischt?

    Letzte Frage für Heute:
    Code :
    1
    2
    3
    4
    5
    
    hr = mediaEventEx.SetNotifyWindow(Handle, WMGraphNotify, IntPtr.Zero);
    DsError.ThrowExceptionForHR(hr);
     
    [B]hr = videoWindow.put_Owner(this.Handle);[/B]
    DsError.ThrowExceptionForHR(hr);
    Ich bekomme trotz meines wachsenden Wissens an jener Stelle
    immer eine NullReferenceException - Instanz erstellen mit Neu.

    Hatte ich übrigens schon mehrere Male, dass ich gutgläubig Methoden
    aufgerufen habe ( Bitmap.Clone() ), die mir ein NullRef-Exc geworfen haben.
    4. Anfängerfehler ?

    Mit besten Grüßen und
    erstmal vielen Dank für erste erfolgreiche Schritte in eine neue Welt
    chmee
    Geändert von chmee (08.01.07 um 23:35 Uhr)
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  11. #11
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    @Christian: Wieso hast du bei deiner Methode GetInterfaces(string) einen bool als Rückgabewert? Entweder du bekommst eine Exception oder es hat funktioniert. Da brauchst du doch keinen Boolean als Rückgabe.
     

  12. #12
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.630
    Blog-Einträge
    4
    zu 1. Mit n bissel Trial&Error hab ichs rausgefunden..

    zu 2. Wenn eine Funktion mehrere Rückgabevariablen benötigt, nimmt man ein out , Right ?

    zu 4. Tja, hatte noch keine Instanz vom graphbuilder IVideoWindow gemacht.
    Code :
    1
    
    this.videoWindow = this.graphBuilder as IVideoWindow;

    @Christian:

    Habe es soweit am Laufen, versuche gerade die Trackbar für das MediaSeeking
    zu mißbrauchen. Wie ändere ich denn die Ausgabe von Get_Duration in Frames ?
    ScrollMedia -> Trackbar !
    Code :
    1
    2
    3
    
    hr = this.mediaSeeking.SetTimeFormat(TimeFormat.Frame);
     
    ScrollMedia.Maximum = this.mediaPosition.get_Duration;
    mfg chmee
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  13. #13
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Indem Du TrackBar.MaxValue entsprechend MediaPosition.StopTime einstellst und dann noch die TrackBar.TickFrequency anpasst. Wie genau Du die TrackBar.TickFrequency einstellst ist Dir überlassen, kannst sie aber immer in Bezug auf die Frames berechnen. Hier mal ein Beispiel, damit man sekündlich vor- und zurückspulen kann:
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    double
        m_stopTime,
        m_currentPosition
     
    // Initialisiert die TrackBar. Sollte immer dann aufrufen werden,
    // wenn sich das aktuelle Video geändert hat oder die Aufnahme abgeschlossen ist.
    public void SeekTrackBar_Init() {
        
        if( mediaPosition == null ) return;
        mediaPosition.get_StopTime( out m_stopTime );
        mediaPosition.get_CurrentPosition( out m_currentPosition );
     
        seekTrackBar.Maximum = (int) Math.Round( m_stopTime, 0 );
        seekTrackBar.Value = (int) Math.Round( m_currentPosition, 0 );
        if( m_stopTime > directXCapture.DXcapture.FrameRate )
            seekTrackBar.TickFrequency = (int) Math.Round( m_stopTime / capture.FrameRate, 0 );
        else
            seekTrackBar.TickFrequency = 1;
    }
     
    void seekTrackBar_Scroll( object sender, System.EventArgs e ) {
        if( mediaPosition == null ) return;
        mediaPosition.put_CurrentPosition( seekTrackBar.Value );
    }

    @Norbert Eder: Strimmt, der Rückgabewert ist bei GetInterfaces(string) überflüssig.
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

Ähnliche Themen

  1. Webcam auf Panel anzeigen und Bild/Video Speichern DirectShowLib
    Von Topia im Forum .NET Grafik und Sound
    Antworten: 1
    Letzter Beitrag: 16.12.08, 11:53
  2. FrameSize mit DirectShowLib
    Von PeteProgram im Forum .NET Grafik und Sound
    Antworten: 0
    Letzter Beitrag: 28.04.08, 16:26
  3. C# Directshowlib entfernen der Letterbox
    Von inuki im Forum .NET Grafik und Sound
    Antworten: 0
    Letzter Beitrag: 24.03.08, 09:21
  4. Antworten: 7
    Letzter Beitrag: 24.05.07, 13:50
  5. Antworten: 9
    Letzter Beitrag: 03.11.04, 11:57

Stichworte