Seite 1 von 1

Movie-Frage?

Verfasst: 27.05.2006 12:51
von roherter
Da ich im movie bereich noch nicht viel gemacht habe habe ich hier mal ne anfängerfrage:Ist es normal das das movie erst nach bewegen des fensters angezeigt wird?
edit :Zumindest wenn ich innerhalb der repeatschleife nach einem event über eine if abfrage aufrufe. :freak:

Verfasst: 27.05.2006 13:25
von jear
Antwort von Radio Eriwan :
Im Prinzip ja. Dafür kann aber PB überhaupt nichts. Es hängt ganz allein davon ab, welcher Renderer auf Deinem System von DirectShow per Default benutzt wird.
Die Sache mit den DirectShow - Filtern ist eine ziemlich schwierige und dickichtartige Sache.
Wenn Du einsteigen willst, sorge dafür, dass der VMR9 als Renderer zum Default wird.

Verfasst: 27.05.2006 13:44
von roherter
Und wie mache ich das?
Ich meine wie setzte ich das als default über PB?

Verfasst: 27.05.2006 14:19
von roherter
Wenn ich das window neuzeichne wirds auch angezeigt aber danke,

Code: Alles auswählen

RedrawWindow_(WindowID(0), 0, 0, #RDW_INVALIDATE)
vielleicht liegts auch an meiner beta11 muss sie mal runterschmeissen.

Verfasst: 27.05.2006 16:47
von jear
Verschiebe mal das Video-Fenster oder überlagere es mit anderen Fenstern. Wird dann das Video von Windows wieder richtig dargestellt?
Mache mal einen Snapshot mit Strg-Druck und füge das Bild in ein Bildverarbeitungsprogramm ein. Ist dann das Video Bestandteil des Bildes?

Wenn ja, dann ist VMR9 der Default-Renderer. Den Default-Renderer von DShow kannst Du mit einem Filtermanager (z.B. im Zoom-Player enthalten) bestimmen, indem Du dem gewünschten Filter zu den höchsten Merits verhilfst. Von PB aus ist da nix zu machen. Es sei denn, Du programmierst direct am DShow-Interface.

Um eine saubere Darstellung mit anderen Renderern (zb VMR) zu erreichen, muss man auf die Repaint- und Redraw-Ereignisse reagieren. Aber Vorsicht. Das Repaint ist selbstnährend und verebbt wie ein Echo. Das sollte man per Timer-Ereignis entkoppeln. Flag setzen und alle halbe Sekunde bearbeiten ist meist ausreichend.

Verfasst: 27.05.2006 16:51
von ts-soft
Einfach While WindowEvent() : Wend einfügen, bevor du das Video anzeigst.
Es muß eine Event-Ansprechpartner da sein, bevor das Video angezeigt wird.

Verfasst: 27.05.2006 18:09
von roherter
Habs jetzt so gelöst:
Benutzte Lib Pbosl für Starttimer()

Code: Alles auswählen

Procedure redr()
  RedrawWindow_(WindowID(0), 0, 0, #RDW_INVALIDATE):
EndProcedure

If OpenWindow(0,0,0,200,250,"test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  If CreateGadgetList(WindowID(0))
    ButtonGadget(3,0,0,100,20,"play")
  EndIf
EndIf
InitMovie()

StartTimer( 5 , 200 , @redr() )




Repeat
  Event=WaitWindowEvent()
  
  GadgetID=EventGadget()
  If Event=#PB_Event_Gadget
    If GadgetID=3
      LoadMovie(2,"Das Movie.mpg")
      Laenge = MovieLength(2)
      
      If MovieStatus(2)<>0
      Else
        
        
        Debug Laenge/MovieInfo(2,0)
    ResizeMovie(2,0,30,200,200)
    If IsMovie(2): PlayMovie(2,WindowID(0)):EndIf 
    
  EndIf 
 
  EndIf
EndIf 
  Until Event=#PB_Event_CloseWindow
End

Verfasst: 27.05.2006 18:25
von ts-soft
Die Procedure entweder ganz nach Oben, oder declarieren und ans Ende.
Damit die Anfänger sich sowas garnicht erst angewöhnen :freak:
Zumindest in diesem Unterforum finde ich es so nicht so schön

Verfasst: 27.05.2006 18:27
von roherter
Ok habe ich geändert. :allright: