AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VFW- Problem

Ein Thema von ft16a · begonnen am 19. Feb 2005 · letzter Beitrag vom 21. Feb 2005
Antwort Antwort
ft16a

Registriert seit: 19. Feb 2005
5 Beiträge
 
#1

VFW- Problem

  Alt 19. Feb 2005, 04:51
Hallo, Delphi- Freunde !
Wer kennt sich mit VFW aus ? Problem AVI- Capturen: Capturen funktioniert- hab' da schon was zusammenbekommen...Aber ich brauche noch die Anzahl der gecaptureten Frames, sowie der Dropped Frames...VFW bietet dazu unter CAPSTATUS an:
DWORD dwCurrentVideoFrame; # of video frames cap'td
DWORD dwCurrentVideoFramesDropped; # of video frames dropped

Sollte doch dem Namen nach so sein, daß man während des Capturens dort die Anzahl der gecaptureten Frames/ Dropped Frames abgreifen kann.

Ein Versuch, etwas anzuzeigen, schlägt aber fehl.

Weder die Anzeige in einem Editfeld (zeigt immer "1") noch dasselbe mit Hilfe
eines Timers funktioniert (zeigt immer "5346703717930793", egal, welches Timerintervall).

Gefunden habe ich auch nichts drüber. Nur einen Trick mit einem Timer, der nebenbei mitläuft und die Anzahl der Frames "künstlich" darstellt (Zeit/ Millisekunden für einen Frame), das kann es doch nicht sein...

In einigen Samples, die ich fand, wurde ein Errorstring von der AVICAP- Unit abgegriffen, der steht aber erst nach dem Capture- Vorgang zur Verfügung...

Hat da jemand 'ne Idee, was da falsch läuft ?

ft16a

Delphi-Quellcode:
procedure TMain.Timer1Timer(Sender: TObject);
VAR
 _CapStatus: TCapStatus ;
 _CapturedFrames: Int64 ;
begin
  _CapturedFrames:= _CapStatus.dwCurrentVideoFrame + _CapturedFrames ;
  Edit_Frame.Text := IntToStr(_CapturedFrames) ;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: VFW- Problem

  Alt 19. Feb 2005, 05:27
Eventuell findest du hier was: http://www.pjh2.de/delphi/demos/index.php?l=de
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: VFW- Problem

  Alt 19. Feb 2005, 09:00
ist doch irgendwo auch logich das sich da nix ändert.
Mit
_CapStatus: TCapStatus; legst du ja nur die Struktur an welche du dann mit
_CapturedFrames:= _CapStatus.dwCurrentVideoFrame + _CapturedFrames ; ausliest. Mich wundert eigentlich das der Compiler dir keine Meldung bringt das
"CapturedFrames"
und
"_CapStatus"
nie initalisiert wird. Du musst diese Struktur irgendwo dem Capturing-Prozess übergeben ansonsten werden eben diese Variablen nie geändert.

Der Wert "5346703717930793" kommt dann auch daher das die Variable nie geschrieben wird und in dem Speicher eben dieser Wert schon drin steht.

Das was du vesucht hast kommt folgendem Beispiel gleich
Delphi-Quellcode:
var i: Integer;
begin
  showmessage(inttostr(i));
und der Frage "Warum ist i nicht 5983", worauf die Antwort wäre das i nirgends ein Wert zugewiesen wird. Und in deinem Beispiel ist genau das gleiche der Fall, es wird den Variablen nie ein Wert zugewiesen und ich könnte fast wetten das der Compiler eine Warnung ausgegeben hat (Warnungen haben einen Sinn!!!).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
ft16a

Registriert seit: 19. Feb 2005
5 Beiträge
 
#4

Re: VFW- Problem

  Alt 19. Feb 2005, 11:47
Danke für die schnellen Antworten...!
Zur 1. Antwort:
Die genannten Samples hatte ich schon, fand darin nichts dazu...Wie eben überhaupt nicht zu dem Thema, außer dem Trick mit dem Timer...
Zu 2.:
Ja, Warnmeldung gibt es (für _CapturedFrames), ist klar...Ohne Timer hatte ich sie auch initialisiert, das mit dem Timer war nur ein Versuch, wenn ich die Variable global deklariere und in FormCreate mit 0 belege, dann lese ich "0".
Wenn eine Variable nicht initialisiert ist, müßte ihr dennoch ein Wert aus einer Funktion zugewiesen werden können...Hier kommt keiner, und dann krieg' ich den Wert, der gerade im Speicher steht. Frage also: Wieso bekomme ich keinen Wert...
Zitat:
Du musst diese Struktur irgendwo dem Capturing-Prozess übergeben ansonsten werden eben diese Variablen nie geändert
Hab's so versucht:
Delphi-Quellcode:
public
  _CapStatus: TCapStatus ;

var
  Main: TMain;
   _CapturedFrames: Int64 ;

implementation
...
procedure TMain.FormCreate(Sender: TObject);
var
  ...
  ...
 begin
   _CapStatus := TCapStatus.Create ;
   _CapturedFrames := 0 ;
 ...

procedure TMain.Timer1Timer(Sender: TObject);
begin
  _CapturedFrames:= _CapStatus.dwCurrentVideoFrame + _CapturedFrames ;
  Edit_Frame.Text := IntToStr(_CapturedFrames) ;
end;
Klappt auch nicht- Fehlermeldung: Objekt oder Klassentyp erforderlich.
Ohne den Eintrag in Create: Bleibt der Wert der Variable "O".
Eine Struktur dem Cap- Prozeß übergeben, aus dem sie kommt...Grübel...
http://hometown.aol.de/OF001/gruebel_anim.gif
Könnte mich jemand erleuchten ?
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#5

Re: VFW- Problem

  Alt 19. Feb 2005, 11:55
Bei mir im PSDK steht dazu:
Zitat:
dwCurrentVideoFrame

Number of frames processed during the current (or most recent) streaming capture. This count includes dropped frames.
Also müssten eigentlich alle bis zu diesem Zeitpunkt vorhandenen Frames angezeigt werden
Julian J. Pracht
  Mit Zitat antworten Zitat
ft16a

Registriert seit: 19. Feb 2005
5 Beiträge
 
#6

Re: VFW- Problem

  Alt 21. Feb 2005, 10:59
Hallo, Delphi- Freunde !
Ich hab' nun doch eine brauchbare Lösung gefunden: Ich schnappe mir Strings, die von meiner
Videocapturing- Komponente (TVideo- Komponente für Delphi 5) erzeugt werden, die Dinger kann man an der Eigenschaft OnError und StatusCallback abgreifen.
So sehen die Strings etwa aus (Capture von einer Webcam, deshalb guibt es eine Errorstring- Ausgabe):
Zitat:
Status- String, während Capturing: 57 Einzelbilder aufgezeichnet (3 nicht verwendet) 3,205 s
Error- String, nach Capturing: 7 von 24 Einzelbilder (29.1%) während Aufnahme nicht verwendet.
Danach kann man den String sezieren und nur die gewünschten Teile anzeigen, wenn man das Geschwafel
nicht mit anzeigen will.
Das steht dann in der Main:
Delphi-Quellcode:
procedure TMain.CaptureWindowStatusCallback(
                                      Sender: TObject;
                                      nID: Integer;
                                      status: String
                                            );
Begin
  {Status live anzeigen}                                               
  Edit_Frame.Text := status ;
                                                                       
  if nID =IDS_CAP_STAT_VIDEOCURRENT then exit;
  ...
  ...
End ;

procedure TMain.CaptureWindowError(
                               sender: TObject;
                               nID: Integer;
                               errorstr: String
                                   );
begin
   Edit_CapturedFrames.Text := errorstr ;
end;
Nun, das funktioniert...aber ich würde doch gern mal die eigentlich dafür gedachten Ausgaben von
dwCurrentVideoFrame und dwCurrentDroppedFrames nutzen, die, wie ich schrieb, ja keine Variable mit einem
Wert beglücken...Hat da jemand eine Idee, was da undufte ist ?


Übrigens funktioniert eine Delphi- Videocapturing- Anwendung (Capturing von VHS- Videokamera) ausgezeichnet...Dropped Frames sind äußerst selten...
Deshab brauchte ich ja die Anzeige...greift wohl auf andere Windows- Komponenten zu, mit
Virtual Dub gibt es (bei Verwendung der selben Kompressions- Codecs und weitgehend derselben Einstellungen) jede Menge Dropped Frames.
ft16a
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz