LAME: Konvertierung der Samples
Für den Enkodiervorgang in LAME müssen die Samples im Gleitkomma-Format und getrennt in Kanälen vorliegen. Da in WAV-Dateien
die Samples im 16-Bit-Integer-Format und die Kanäle "interleaved" gespeichert sind, müssen sie zunächst konvertiert werden.
Dieser Vorgang ist in der Klasse "SamplePreprocessor" implementiert, die auch die optionale Skalierung der Samples
durchführt.
Folgende Abhängigkeiten existieren für diesen Vorgang:
-
Eingabedaten: Die Samples werden aus der Datei in 64K-Blöcken in den Hauptspeicher gelesen. Der Vorgang blockiert, wenn
keine Samples verfügbar sind.
-
Ausgabedaten: Die konvertierten Samples müssen ebenfalls in den Hauptspeicher geschrieben werden. Der Vorgang
kann blockieren, wenn gemäß der Speicherverwaltungsstrategie kein Speicher zur Verfügung gestellt werden kann.
Um nachfolgende Vorgänge möglichst schnell fortsetzen zu können, wird alle 1152 Samples Speicher zur weiteren Bearbeitung
freigegeben:
Da in diesem Vorgang keine Frame-Abhängigkeiten existieren, kann die Konvertierung unabhängig vom restlichen
Enkodiervorgang ausgeführt werden.
Der Konverter verwendet SSE4-Befehle und kann 4 Samples parallel verarbeiten. Dies lässt sich prinzipiell weiter
beschleunigen, indem die Eingabedaten auf mehrere Konverter aufgeteilt werden. Angesichts der Tatsache, dass die
weitere Bearbeitung eines Frames jedoch wesentlich langsamer als die Konvertierung ist, werden dadurch Performancesteigerungen kaum
feststellbar sein.
|