Hallo an Alle, gibt es einen IP-Core für Xilinx FPGA's mit dem es möglich ist Bilder oder sogar Videos zu komprimieren und wieder zu dekomprimieren? Am besten wäre sogar, wenn ein Microblaze die Verwaltung dafür übernimmt und dem IP-Core nur Anweisungen gibt, wie es auch bei einem DMA-Controller üblich ist. Das Ziel wäre Bilder aus einer CMOS Kamera von einem FPGA einzulesen und zu komprimiert, diese dann zu einem anderen System zu übertragen und dort wieder zu dekomprimieren. Grundsätzlich gibt die FPGA-Technologie das ja her, aber ich habe bisher leider nur IP-Cores gesehen, die zum Kauf angeboten werden. Hat sich jemand mal an einem solchen Projekt versucht bzw. gibt es eventuell einen frei einsetzbaren IP-Core für diesen Zweck? lg, ChrisB
Afaik nein, das wird schon durch die Lizenzbestimmungen der Codecs verhindert (wenn man mal von den ueblichen Verdaechtigen ausgeht). Es gab mal den Versuch den Theora Codec in VHDL zu implementieren, aber ich hab die Website gerade nichtmehr finden koennen.
Little Chip schrieb: > Afaik nein, das wird schon durch die Lizenzbestimmungen der Codecs > verhindert (wenn man mal von den ueblichen Verdaechtigen ausgeht). Es > gab mal den Versuch den Theora Codec in VHDL zu implementieren, aber ich > hab die Website gerade nichtmehr finden koennen. Ich habe mich daran schon versucht. Einen Huffmandecoder zur Decomprimierung habe ich fertig. Gescheitert bin ich am externen DDR2. Der Speicher ist notwendig um aus den "Kacheln" wieder ein Bild zusammenzusetzen. Dabei habe ich ich auch für Komprimierer interessiert. Unendlich kompliziert ist es auch nicht. Dabei nutzen alles ein paar Tricks. Die Zusammensetzung der Huffmantabelle ist statisch. Hast du Hardware?
Also ich habe mal nen JPEG Codec in C geschrieben, das war garnicht so schwierig. Es reicht aus die Wikipedia Seite zum Thema JPEG zu studieren und danach vorzugehn. Ist eigentlich kein großer Akt gewesen, aber das in Hardware zu implementieren... weiss da auch nicht genau wie man da rangeht. Man müsste sich mal überlegen, wie man den Codec in Hardware auslegt. Ich habe mir dabei überlegt, da man ein Bild früher oder später in 8x8 Pixel unterteilt, einen IP Core zu entwickeln, der grundsätzlich nur mit 8x8 Pixeln arbeitet. Das Bild teilen bzw. wieder zusammensetzen lässt sich ja ohne großen Aufwand von nem Microblaze übernehmen. Das schöne daran wäre, dass man diesen IP Core einfach mehrmals instanzieren um so schneller Bilder zu komprimmieren. Was ich bisher nicht gemacht habe und auch noch nicht weiss wie man so etwas realisierne kann ist der Zugriff des IP Cores auf den externen Speicher. Irgendwie müsste der IP-Core mittels PLB zum Multi Port Memory Controller verbunden sein. Nur wie macht man sowas am besten? Bei der RGB in YCrCb Umwandlung bin ich mir nicht ganz sicher, ob sich eine Hardware-Implementierung hier lohnt. Als Hardware benutze ich im Moment einen Xilinx Spartan 3E-1600K. Ich denke ich werde bei nächster Gelegenheit einfach mal probieren die aufwendigsten Teile der JPEG Komprimierung mit VHDL implementieren, so dass der IP Core von nem Microblaze über den PLB angesteuert werden kann.
Ja, genau, du muss nicht alles implementieren was es gibt. Die 8x8 Kachel ist ausreichend. Die Cosinustransformation lässt sich ganz einfach implementieren. Und mit etwas Grips kann man hier viel gut machen. Ich habe die IDCT das könnte ich überarbeiten in eine DCT. Da habe ich auch was da. Ich hätte auch Interesse an dem Projekt. Leider habe ich keine EDK, so dass ich nicht mit dem Microplaze mitreden kann.
Die Anbindung an einen Microblaze ist eigentlich relativ einfach. Ich habe mal einen IP Core für eine Motorsteuerung entwickelt. Mit dem EDK lässt sich ein Template erzeugen, dass die Verbindung zum Bus herstellt. Man kann dann einfach per Microblaze auf die Register des IP Cores zugreifen. Schwieriger stelle ich mir vor, dass der IP Core für den Codec als Master auf den externen Speicher zugreifen können muss. Was auch interessant wäre ist ein mpeg1, motion-jpeg oder sogar h.264 Codec als IP Core. Aber das ist sicher um einiges schwieriger zu Implementieren als ein JPEG Codec.
Zwischen jpg und Motion-jpeg ist kein Unterschied. Mpg hat noch Differenzbilder um die Framerate gering zu halten. Was jetzt eher die Renner werden, sind Wavelet-basierte Kompressionen. JPEG2000 oder Dirac. Doch bevor man sich an so etwas wagt, sollte man mit jpg anfangen. Bei einer richtigen Kamera kommen auch noch Eigenheit des Sensors hinzu. Das Ausregeln der Beleuchtung, bad pixel korrektur... Ich habe, an einer IP Kamera mitgearbeitet.Die Bildkompression läuft in einem FPGA und für die externe Anbindung, wie Netzwerk, ist ein ARM 9 zuständig. Der FPGA hat RAM und der ARM9 hat auch nochmal RAM. Das wurde nicht vermischt. René
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.