Da müste man mal in die Sourcen von Mpeg2Schnitt oder (wenn vorhanden) von Cuttermaran nachsehen.
In PARanoia nutze ich Avisynth, welches mir eine videoinfo Struktur übergibt um schon mal das Wichtigste über den Videoinhalt zu übergeben.
AspectRatio etc etc etc ist damit natürlich nicht möglich.
Für PureBasic wäre es am besten wenn solche immer wieder vorkommenden Formate via integrierten LIBs unterstützt werden. So z.B. mpeg2lib (imho LGPL), der kann Framegenau zugreifen und alle sehr weit entwickelten opensource projekte wie DgIndex/mpeg2source etc. nutzen dise Lib.
Ich finde Directshow recht tricky. Ist zwar sehr userfreundlich, aber komplex zu programmieren und alles hängt am Ende doch vom installierten Codec ab.
Xombie und ich wollten mal in der nächsten Zeit Libavcodec für PB hinbekommen. Ist genial. VOm Schema her wie VLC, also DAS was gebraucht wird ist enthalten und ist unabhängig von DirectX.
Bei Doom9 gibt es jede menge User deren DS Wiedergabe abfeift, wenn die sich Codecpacks installiert haben und die Merits durcheinandergebracht werden. Und schwupps stürzen manchmal sogar die Programme, welche DS nutzen sofort ab (ShrinkDVD, TmpgEnc via Dshow Environment, MediaplayerClassic, Zoomplayer etc etc etc).
Video Schneiden
Das Thema "Programmabsturz" beim Laden eines DS Filters kennen wir zur Genüge. Und wer sich mit der Materie Videobearbeitung beschäftigt hat schnell mal 300-400 DS Filter auf seinem System installiert.
Machmal stirbt das Programm bei CoCreateInstance mal beim AddFilter mal bei Connect.
Sehr zerstörerisch haben sich einige Filter von Cyberlink gezeigt.
Selbst GraphEdit von M$ stürzt ab, wenn man einen dieser "bösen" Filter in die Kette aufnehmen will.
Um herauszufinden welche Filter framegenau arbeiten, haben wir uns ein Hilfsttool geschaffen, mit dem man halbautomatisch und manuell Filterketten aufbauen und diese dann testen kann. Damit das Programm nicht dauern abstürzt haben wir zum Testen ob CoCreateInstance das Programm zum Absturz bringt extra einen Tread gestartet, der probehalber das CoCreateInstance ausführt. Wenn der Thread dabei abschmiert, lebt wenigsten das Programm weiter.
Unverschämt finde ich einige Filterhersteller wie sie ihre Filter mit Merrits ausrüsten, die alles andere in den Schatten stellen. Elecard ist z.B. einer davon.
Andere Hersteller entfernen ihre Filter beim Deinstallieren nicht, andere entfernen zwar die Dateien, lassen aber in der Registry die Verweise stehen.
Und dann wundert sich so manch ein Anwender, dass auf seinem System nichts mehr richtig läuft.
Machmal stirbt das Programm bei CoCreateInstance mal beim AddFilter mal bei Connect.
Sehr zerstörerisch haben sich einige Filter von Cyberlink gezeigt.
Selbst GraphEdit von M$ stürzt ab, wenn man einen dieser "bösen" Filter in die Kette aufnehmen will.
Um herauszufinden welche Filter framegenau arbeiten, haben wir uns ein Hilfsttool geschaffen, mit dem man halbautomatisch und manuell Filterketten aufbauen und diese dann testen kann. Damit das Programm nicht dauern abstürzt haben wir zum Testen ob CoCreateInstance das Programm zum Absturz bringt extra einen Tread gestartet, der probehalber das CoCreateInstance ausführt. Wenn der Thread dabei abschmiert, lebt wenigsten das Programm weiter.
Unverschämt finde ich einige Filterhersteller wie sie ihre Filter mit Merrits ausrüsten, die alles andere in den Schatten stellen. Elecard ist z.B. einer davon.
Andere Hersteller entfernen ihre Filter beim Deinstallieren nicht, andere entfernen zwar die Dateien, lassen aber in der Registry die Verweise stehen.
Und dann wundert sich so manch ein Anwender, dass auf seinem System nichts mehr richtig läuft.
Man wird alt wie 'ne Kuh und lernt immer noch dazu
Mein Tipp:
http://libmpeg2.sourceforge.net/downloads.html
Dank "Import" und "EndImport" kannst du die Lib bzw. die dll wrapper lib ohne Probleme beim Linken einbinden. Die Symbols welche du importieren musst, kannst du in mpeg2dec.c nachsehen. Dort kann man auch die Nutzung ganz gut ersehen. Ich meine mich zu erinnern, dass mpeg2dec sogar einen Programmstream demultiplexer inne hat. Bin aber nicht sicher.
Wenn du diese lib nutzt um eben mpeg wieder zu geben, gibts keinen Absturz. Es kann sogar der videoout modus gewählt werden. -o dxrgb32 -o dx ... sodann wird directx lediglich zur Darstellung genutzt, aber nicht zum dekodieren
Ich weiss jetzt nicht obs GPL oder LGPL ist. Wenns LGPL ist kannst du dir eine dll erstellen auf welche du zugreifst und umgehst somit nicht die Lizenz.
http://libmpeg2.sourceforge.net/downloads.html
Dank "Import" und "EndImport" kannst du die Lib bzw. die dll wrapper lib ohne Probleme beim Linken einbinden. Die Symbols welche du importieren musst, kannst du in mpeg2dec.c nachsehen. Dort kann man auch die Nutzung ganz gut ersehen. Ich meine mich zu erinnern, dass mpeg2dec sogar einen Programmstream demultiplexer inne hat. Bin aber nicht sicher.
Wenn du diese lib nutzt um eben mpeg wieder zu geben, gibts keinen Absturz. Es kann sogar der videoout modus gewählt werden. -o dxrgb32 -o dx ... sodann wird directx lediglich zur Darstellung genutzt, aber nicht zum dekodieren

Ich weiss jetzt nicht obs GPL oder LGPL ist. Wenns LGPL ist kannst du dir eine dll erstellen auf welche du zugreifst und umgehst somit nicht die Lizenz.