www.mikrocontroller.net

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


Autor: ChrisB (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Maik H. (littlechip)
Datum:

Bewertung
0 lesenswert
nicht 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.

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

Bewertung
0 lesenswert
nicht 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?

Autor: ChrisB (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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

Bewertung
0 lesenswert
nicht 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.

Autor: ChrisB (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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

Bewertung
0 lesenswert
nicht 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é

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.