| |
VB.NET - Fortgeschritteneavifil32 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 | |
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. | |
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.
| |
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.
| |
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 | |
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 | |
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()); | |
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?
| |
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
| |
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]
| |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere Infos
|
|
|
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
|
|