Forum: FPGA, VHDL & Co. Bild/Video Codec als IP-Core für Microblaze


von ChrisB (Gast)


Lesenswert?

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

von Maik H. (littlechip)


Lesenswert?

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.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

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?

von ChrisB (Gast)


Lesenswert?

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.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

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.

von ChrisB (Gast)


Lesenswert?

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.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

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
Noch kein Account? Hier anmelden.