Einzelnen Beitrag anzeigen

Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#1

IMediaDet::GetBitmapBits liefert falsches Frame...

  Alt 12. Sep 2009, 12:45
Mahlzeit!

Ich nutze den DirectShow MediaDetector um an die Frames von AVIs zu kommen.
Nun gibts da ein Problem, das die Funktion IMediaDet::GetBitmapBits nur zu Beginn des Videos das richtige Frame liefert, dann weicht es 1-2 Frames, bei langen Videos schonmal 2 oder mehr ab.

An die Infos kommt man so ran:
Delphi-Quellcode:
   var StreamLength:Double;
    FFrameRate:Double;
    FFrames:Integer;

   // StreamLength
   If not Succeeded(MediaDet.get_StreamLength(StreamLength)) then
      Raise Exception(EStreamError);

   // FrameRate
   MediaDet.get_FrameRate(FFrameRate);

   FFrames:=Round(StreamLength * FFrameRate);
Interessant ist, das StreamLength (fast) bei allen Videos etwas zu lang ist und meist ein par Frames dazu gedichtet werden und dabei eine Kommastelle raus kommt.

Beispiel:
FPS: 25.0
Frames: 13475
Länge: 8:59.00

DS zeigt an:
FrameRate: 25.0
Frames (gerundet): 13477
Frames: 13477,000000000001
StreamLength: 539,080000000000041

Das Bild holt man so:
Delphi-Quellcode:
   StreamPos:=Frame / FFrameRate;
If not Succeeded(MediaDet.GetBitmapBits(StreamPos, @BufSize, nil, FWidth, FHeight)) then ...
So, nun würd ich gerne wissen, wie sich der Bug umgehen läßt

Grüße, Sun
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat