1. Klassifizieren Sie, ob Sie insgesamt niedrige MIPS oder geringe Komplexität benötigen.
Lassen Sie mich ein wenig frei, um dieses Problem in zwei Teile aufzuteilen.
- Codierung mit geringer Komplexität - Dies ermöglicht weniger Ressourcen (insbesondere im Speicher), um eine schnell reagierende Codierung im angegebenen System zu ermöglichen.
- Niedrig explizit in der Berechnung (MIPS). - die sich nur mit minimal möglichen CPU-Zyklen befassen.
Es gibt dritte Kriterien - bei denen von "geringer Latenz" die Rede ist - für Anwendungen wie Videokonferenzen, bei denen Rechenressourcen möglicherweise keine Rolle spielen - aber die durch Codierung verursachte Gesamtverzögerung
Was zu beachten ist, ist, dass in Systemen mit geringerer Komplexität der Zugriff auf den Speicher (Speicherbusgeschwindigkeit und -breite) und manchmal die E / A im Allgemeinen extrem langsamer sind, weshalb die MPEG-Algorithmusklasse leidet, obwohl der Rechenalgorithmus einfach sein könnte.
Bevor Sie die Anforderung an den Codec beurteilen, sollten Sie versuchen, ein Budget in Bezug auf Folgendes zu erstellen:
ein. CPU-Zyklen pro Sekunde.
b. Maximaler Speicherdurchsatz.
c. IO-Latenz
2. Sie sollten MPEG anpassen, anstatt es neu zu erfinden.
Im Allgemeinen bietet Ihnen die Codec-Klasse MPEG sehr flexible Mechanismen, um dies zu tun. In diesem Sinne müssen Sie den Codec nicht ganz neu erfinden, sondern MPEG 2 oder MPEG 4 anpassen , um Ihre Arbeit zu erledigen.
Lassen Sie uns zunächst sagen, was alle Elemente die Komprimierung ermöglichen, und sie in der Reihenfolge ihrer Komplexität anordnen:
- Bewegungsschätzung und Bewegungskompensation. 1.a. Vorwärtsvorhersage (P-Frames) 1.b. Doppelte Vorhersage (B-Frames) 1.c. hochauflösende Bewegungsvektoren
- Intra-Codierung - DCT (+ IDCT)
- Qunatization - und Auswahl des Encoder-Modus
- VLC - Codierung mit variabler Länge. (CABAC in H.264)
- Koeffiziente Vorhersage [In mpeg2 hat nur die DC-Vorhersage - MPEG4 hat mehr]
In der MPEG-Klasse von Algorithmen werden die DCT-basierte Codierung und VLC ohne große Auswahl ziemlich obligatorisch - aber der Rest aller Mechanismen ist sehr wichtig
Beispielsweise ist die Bewegungsschätzung und Bewegungskompensation eines der Elemente mit dem höchsten MIPS-Verbrauch. Wenn Sie dazu keine Ressourcen haben, können Sie einfach alle Frames als I-Frames codieren (was MJPEG ziemlich ähnlich macht - aber der Standard-MPEG-Decoder kann dies decodieren). Wenn Sie sich etwas mehr Ressourcen leisten können - Sie können mithilfe des Frame-Unterschieds eine geringfügige Bewegungskompensation vornehmen -, anstatt jedes Frame als Intra zu senden, können Sie jeden Block vom vorherigen Frame-Block subtrahieren. Wenn die Differenz höher als das ursprüngliche Signal ist, senden Sie es als Intra.
Natürlich - all dies würde bedeuten, dass Sie die von dem oben genannten Encoder versprochene Effizienz verlieren -, aber ich denke, Sie sind bereit, darauf zu verzichten!
BEARBEITEN:
Sie können die folgenden Codecs als gute Referenzpunkte betrachten:
MSSG: http://www.mpeg.org/MPEG/video/mssg-free-mpeg-software.html
Gut zum Verständnis, aber möglicherweise am langsamsten auf der Welt.
FFMPEG: http://ffmpeg.org/
Wahrscheinlich der schnellste der Welt. Gut, um als Black Box zu beginnen, aber versuchen Sie nicht, den Code von innen zu ändern. Könnte Ihnen gute Möglichkeiten bieten, Dinge zu steuern, wenn Sie die Bibliotheks-API verwenden. Es ist bereits auf vielen Plattformen portiert - aber es auf einer neuen Plattform zu machen, könnte eine Aufgabe sein.
FAME: http://fame.sourceforge.net/
Dies wurde ursprünglich mit dem von Ihnen beschriebenen Zweck gestartet. Ich bin zwar ein bisschen außer Kontakt - aber Sie können es versuchen.
Xvid: http://www.xvid.org/
Dies ist MPEG-4. Dies ist eine der besten Balance zwischen sauberem Code und angemessener Geschwindigkeit. Sollte am einfachsten zu handhaben sein, wenn Sie sich im Inneren des Encoders befinden.
JPEG: http://www.ijg.org/
Dies ist JPEG. Dies ist eine der besten Bibliotheken, um sie plattformübergreifend zu portieren. Außerdem ist JPEG von Natur aus einfacher als einige Aspekte von MPEG. Vielleicht sollten Sie dies zuerst versuchen. Die meisten Kameras auf der Welt haben diese Bibliothek wahrscheinlich so verwendet, wie sie ist - anstatt etwas Eigenes zu erstellen!
Vielleicht irre ich mich bei der Verwendung von MPEG! Aber das ist eine Art Risiko, das es wert ist, eingegangen zu werden.
Die wahrscheinlich beste Maßnahme, um zu überprüfen, ob dies funktioniert oder nicht, ist - versuchen Sie einfach, eine Standard-8x8-DCT mit Quantisierung Ihres Bildes zu erstellen. Optimieren Sie genau dies. Wenn Sie in der Lage sind, Ihre Echtzeitanforderungen zu erfüllen, sind Sie meiner Meinung nach gut darin, alle JPEG-Frames oder den gesamten I-Frame-MPEG-Codec zu bearbeiten. Wenn Sie weit vom Ziel entfernt sind - dann lohnt es sich nicht.