2016-08-11 4 views
2

Diese Frage über die Verwendung von Windows Media-API zur Ausgabe auf ein 4-KByte WMV-Video ist wirte (obwohl theoretisch WMV nicht ausgegeben zu 4K unterstützt)IWMWriter Einrichten 4K Video

Nach IWMWriter-> BeginWriting() aufgerufen sowohl 32bit als auch 64bit Win10 (auf beiden Systemen gibt BeginWriting() S_OK zurück), Programm benötigt ca. 450MB Speicher.

Danach benutze ich IWMWriter-> AllocateSample(), um Beispielpuffer zuzuordnen und schreiben Sie es mit IWMWriter-> WriteSample() zu sinken.

Auf 64-Bit-Win10 kann Umwandlung beenden anmutig aber auf 32-Bit-Win10, WriteSample() nicht mit „out of memory“ Fehler nach mehreren Frames geschrieben werden.

Der einzige Unterschied, den ich auf 2 Systemen sehen kann, ist: vor dem Aufruf von BeginWriting() benötigt 64Win10 110 MB Speicher, so dass nach dem Aufruf von BeginWriting() 110 + 450 verwendet wird. Bei 32bit Win10 werden vor BeginWriting() 150 MB verwendet, danach werden 150 + 450 verwendet. nur 761MB ist, kann jeder wissen, warum in diesem Fall WriteSample() gibt den Speicher

Die Spitze der ausgefallenen Umwandlung Workingset. Gibt es einen Workaround dafür?

== Update: ========================================== ===

die Quelle Video enthält sowohl Video- als auch Audio, in dem ausgefallenen Fall das Programm sowohl Video- als auch Audio schreibt und gescheiterte Video zu schreiben.

Wenn ich Audiospur nehme aus der Datei, so dass es nur Video enthält, dann kann Umwandlung anmutig beenden. Die maximale Arbeitsmenge beträgt 716 MB.

Antwort

0

Es geht um Speicher der Video-Encoder-Anforderungen: bei dieser Auflösung der Anwendung nicht Standard 2 GB Adressraum einer 32-Bit-Anwendung paßt. Möglicherweise möchten Sie mit /LARGEADDRESSAWARE verknüpfen, um den Speichermangel zu umgehen.

+0

Vielen Dank für Ihre Anregung Roman. Aber große Adress bewusst ist bereits aktiviert. Das gleiche Beispielprogramm läuft auch korrekt auf einem 32-Bit-Win7-System. – rhbc73

+0

Ihr Code "wie ist" verursacht Zugriffsverletzung in "BeginWriting" Aufruf auf meinem System in 32-und 64-Bit-Versionen. Jedoch vor der Einstellung/LARGEADDRESSAWARE 32-Bit-Version ging tatsächlich in den Speichermangel Zustand. Also ich denke immer noch, dass es das Problem für 32 Bits und hohe Auflösung ist. Win 7-Encoder ist möglicherweise weniger gierig im Speicherbedarf und funktioniert sofort. –

+0

Danke Roman. Dieses Problem ist etwas gelöst. Wie gesagt, ich habe einen "out of memory", wenn BeginWriting aufgerufen wird. Das liegt daran, dass ich den Medientyp nicht richtig eingemischt habe. memset (p, size, value) wurde beim Setzen der Eingabeeigenschaften in memset (p, value, size) geschrieben. – rhbc73

Verwandte Themen