vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
avifil32 Funktion AVIStreamGetFrame liefert Rückgabewert 0 
Autor: mkkirchner
Datum: 11.06.14 08:35

Hallo,
Ich verwende in einem Projekt die Funktion AVIStreamGetFrame aus der AVIFIL32.dll.
Dies Funktioniert im Prinzip auch einwandfrei bis auf folgendes Problem:

Bei größeren Videos kommt es ab einem bestimmten Frames zu Fehleren (Rückgabewert 0 / System.NullReferenceException)

Bei einem Video mit 141428 Frames ab dem Frame 14310 und bei einem anderen Video mit 162781 frames ab frame 23174.

Mit kürzeren Videos läuft alles, woran kan das liegen??
Hat jemand eine Idee

//Liefert ab einem best. Frame Rückgabewert 0
  int dib = Avi.AVIStreamGetFrame(getFrameObject, firstFrame + position); 
  bih.bmiColors = this.palette;           
  bih.bmiHeader = (Avi.BITMAPINFOHEADER)Marshal.PtrToStructure(new _ IntPtr( _
    dib),bih.bmiHeader.GetType());
Vielen Dank!!!

Martin
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: avifil32 Funktion AVIStreamGetFrame liefert Rückgabewert 0 
Autor: Manfred X
Datum: 11.06.14 10:29

Hallo!

So weit mir bekannt, gibt es eine Obergrenze für die Größe von
AVI-Files, die von dieser Bibliothek (avifil32) verarbeitet werden (2GB).

Gibst Du den belegten Speicher und ggf. die sonstigen Ressourcen nach der
Verarbeitung eines Frame wieder frei?

Was sagt der Task-Manager?
Steigt beim Prozeß der Speicherbedarf, die Zahl der Handles oder die der
Objekte stark an?

Beitrag wurde zuletzt am 11.06.14 um 10:35:09 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: avifil32 Funktion AVIStreamGetFrame liefert Rückgabewert 0 
Autor: mkkirchner
Datum: 11.06.14 10:47

Der Taskmanager verhällt sich ruhig.
Der Speicger wird freigegeben.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: avifil32 Funktion AVIStreamGetFrame liefert Rückgabewert 0 
Autor: Manfred X
Datum: 11.06.14 10:59

Manchmal sind in einem AVI-Stream einzelne Frames (oder eine kurze
Folge von Frames) nicht lesbar, z.B. weil der jeweils verwendete AVI-Codec
eine benötigte Info nicht finden kann.


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: avifil32 Funktion AVIStreamGetFrame liefert Rückgabewert 0 
Autor: mkkirchner
Datum: 11.06.14 11:55

Manfred X schrieb:
Zitat:

Manchmal sind in einem AVI-Stream einzelne Frames (oder eine
kurze
Folge von Frames) nicht lesbar, z.B. weil der jeweils
verwendete AVI-Codec
eine benötigte Info nicht finden kann.





Daran dachte ich auch schon, allerdings kann ich keinerlei Frames nach dem ersten Frame, den ich nicht mehr lesen kann, lesen.

Soll heisen,
Ich lese alle Frames von 1 - 14309 problemlos und dann ist schluss.

martin
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: avifil32 Funktion AVIStreamGetFrame liefert Rückgabewert 0 
Autor: Manfred X
Datum: 11.06.14 12:12

AVI ist ein Container, der mehrere (unterschiedlich komprimierte) Streams
enthalten kann. Manchmal stehen im AVI-Container Rahmenangaben, die auf
den einzelnen Stream nicht zutreffen.

Ermittelst Du die Angaben zur Anzahl und Position (Index) der Frames im
Video-Stream durch die streambezogenen Methoden der AVIFil32-Bibliothek ?

'Erster gültiger Frame-Index
Private Declare Function AVIStreamStart Lib "avifil32.dll" _
    (ByVal pavi As Integer) As Integer
 
'Anzahl der Frames
Private Declare Function AVIStreamLength Lib "avifil32.dll" _
    (ByVal pavi As Integer) As Integer
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: avifil32 Funktion AVIStreamGetFrame liefert Rückgabewert 0 
Autor: mkkirchner
Datum: 11.06.14 13:22

Manfred X schrieb:
Zitat:

AVI ist ein Container, der mehrere (unterschiedlich
komprimierte) Streams
enthalten kann. Manchmal stehen im AVI-Container
Rahmenangaben, die auf
den einzelnen Stream nicht zutreffen.

Ermittelst Du die Angaben zur Anzahl und Position (Index) der
Frames im
Video-Stream durch die streambezogenen Methoden der
AVIFil32-Bibliothek ?


Ja, ich benutze im Prinzip den AVIFileWraper von http://www.codeproject.com/Articles/7388/A-Simple-C-Wrapper-for-the-AviFile-Library
[DllImport("avifil32.dll", PreserveSig=true)]
public static extern int AVIStreamStart(int pavi);
[DllImport("avifil32.dll", PreserveSig=true)]
public static extern int AVIStreamLength(int pavi);
Ja der FIRSTFRAME wird wie folgt ermittelt:

firstFrame = Avi.AVIStreamStart(aviStream.ToInt32());
countFrames = Avi.AVIStreamLength(aviStream.ToInt32());
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: avifil32 Funktion AVIStreamGetFrame liefert Rückgabewert 0 
Autor: Manfred X
Datum: 11.06.14 13:39

Diesen Wrapper kenne ich nicht.
Die AVIFil32 habe ich bisher nur für die Erstellung kurzer Film-Sequenzen verwendet.

Zu Testzwecken habe ich ein AVI-File erstellt (ein komprimierter VideoStream),
unter direkter Verwendung der Methoden aus der Bibliothek AVIFil32.DLL
(AviFileCreateStream, AVIMakeCompressedStream):
- Framegröße 720*576 Pixel
- 30000 Frames
- DivX10-Codec

Alle Frames des Video-Stream konnten danach durch Verwendung dieser
AVIFil32-Methoden gelesen werden (in einer VB.Net-Klasse):

AVIFileInit, AVIFileOpen, AVIFileInfo,
AviFileGetStream, AVIStreamInfo, AVIFrameFormatInfo,
AVIStreamGetFrameOpen, AVIStreamGetFrame.
(und die entsprechenden Close-/Release-Methoden).

Läuft Dein Video in einem Standard-Player ordnungsgemäß durch?


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: avifil32 Funktion AVIStreamGetFrame liefert Rückgabewert 0 
Autor: mkkirchner
Datum: 11.06.14 13:48

Mein Video läuft im StandardPlayer Problemlos!
MPEG-4 (XVID)
1920x1080
25fps
4:2:0 YUV
ca. 7,5 GB Dateigröße
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: avifil32 Funktion AVIStreamGetFrame liefert Rückgabewert 0 
Autor: Manfred X
Datum: 11.06.14 14:32

Wie ich bereits in meinem ersten Satz im ersten Beitrag angemerkt hatte:
Dateien werden von dieser Bibliothek maximal bis zu einer Byte-Position
von 2GB verarbeitet.

Dazu in einem MSDN-Forum:
[I]AVI is an ancient container format, dating from an era where wasting 2 Gigabytes
of hard disk space was unthinkable.
AVIStreamGetFrame() dates back to Windows 3.x, it probably uses fseek(FILE*, long, int)
somewhere, clipping file sizes to 2^31 bytes.[/I]


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel