mikrocontroller.net

Forum: FPGA, VHDL & Co. jpg dekodieren


Autor: Nik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich wuerde gerne ein jpg Bild mit einem Spartan 3 FPGA (Xilinx) 
dekodieren.
Dabei kann angenommen werden, dass das jpg Bild bereits im RAM vom FPGA 
vorliegt. Die dekodierten Pixel Informationen werden wieder ins RAM 
zurueckgeschrieben.

Ich bin dankbar um jeden Loesungsansatz fuer das Problem. Dabei soll die 
einfache Implementierung im Vordergrund stehen. Notwendige Bibliotheken 
sollten wenn moeglich bereits vorhanden sein.

Meine bisherigen Ideen:
1) jpg IP core.
Problem: Bisher habe ich keinen frei verfuegbaren und bereits fertig 
abgeschlossenen (d.h. kein beta code) Core gefunden.

2) Microblaze mit normaler jpg bibliothek
Probleme:
 + Gibt es bereits angepasste jpg bibliotheken?
 + Ist das mit dem Microblaze ueberhaupt sinnvoll?

Besten Dank fuer alle Anregungen!!

Nik

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ob der Ansatz mit einem Softcore sinnvoll ist, hängt davon ab, wie oft 
bzw. schnell Du dein Bild dekodieren willst. Der Vorteil ist, das die 
Algorithmen im Netz verfügbar sind (in C) und schnell und direkt 
umgesetzt werden können.

Als IP Core kostet es halt Geld oder Zeit und passt möglicherweise nicht 
direkt an Deinen Speicher.

Duke

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst auch einen Mittelweg nehmen. Ein Softcore steuert die 
Dekomprimierung, aber oft nötige+aufwendige Rechenschritte sind als 
spezieller Maschinencode verfügbar, und als "Zusatzhardware" im FPGA.

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe auch als erstes an einen "Mittelweg" gedacht. Erstmal alles in 
Software, und dann solange die Geschwindigkeit nicht ausreicht, Teile in 
die Hardware verlagern (Huffman-Decoder, Floating Point Rechnerei, ...). 
Aber immer schön so, dass der Datenflußteil in Hardware, der 
Kontrollflußteil in Software erledigt wird, damit holst du am meisten 
Geschwindigkeit pro FPGA-Fläche raus.

Autor: Nik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Dekodierung muss nicht sehr schnell erfolgen. Das ganze ist fuer 
einen "digitalen Bilderrahmen" gedacht. So <2sec waere gut.

Daher erscheint mir der Ansatz mit dem Softcore ganz vernuenftig.
Ich hab nur kein Gefuehl dafuer, wieviel Aufwand notwendig ist um eine 
bestehende jpg bibliothek fuer einen softcore anzupassen (z.B. 
microblaze)?!

Wer hat so etwas schon einmal gemacht?


Gruesse und Danke fuer die Tipps!

Nik

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Nik (Gast)

>Die Dekodierung muss nicht sehr schnell erfolgen. Das ganze ist fuer
>einen "digitalen Bilderrahmen" gedacht. So <2sec waere gut.

Na dann nimm doch einfach BMP.

Duckundwech

Falk

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls du ein 10MPixel JPG Bild direkt von einer SD Karte dekodieren 
willst, dann wirst du <2s nicht mit einem Softcore schaffen (außer du 
optimierst die Routinen so, dass der Dekoder nicht die volle Auflösung 
dekodiert. Keine Ahnung ob sowas überhaupt geht, aber irgendwie kann man 
da bestimmt was machen). Selbst ein PC mit >2GHz braucht dazu braucht 
dazu fast 1s. Und als ganz grober Vergleich: Ein 640x480 jpg von SD 
Karte dekodieren braucht auf einem mit 40MHz getakteten dsPIC (16bit 
RISC) mit Festkommaroutinen etwa 5-10s je nach Kompression.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Benedikt K. (benedikt)

>Falls du ein 10MPixel JPG Bild direkt von einer SD Karte dekodieren
>willst,

Ob das auf einem digitalen Bilderrahmen sinnvoll ist? Die haben doch 
eher so SVGA Auflösung, oder? Da reicht, man glaubt es kaum, weniger als 
1 MPixel.

Und um nochmal auf BMP zurück zu kommen. Das meinte ich schon ein wenig 
ernst. Einfach BMP und dann per ZIP komprimieren. Oder PNG direkt 
nehmen.

MFG
Falk

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner wrote:

>>Falls du ein 10MPixel JPG Bild direkt von einer SD Karte dekodieren
>>willst,
>
> Ob das auf einem digitalen Bilderrahmen sinnvoll ist?

Naja, das macht jeder digitale Bilderrahmen. Die Auflösung wird dann 
entsprechend runtergerechnet. Der Sinn davon ist, dass man die SD Karte 
von der Digicam direkt einstecken kann, ohne alle Bilder voher in ein 
passendes Format konvertieren zu müssen.
Ich hatte selbst mal versucht sowas zu bauen (mit einem dsPIC als JPEG 
Dekoder, einem S1D13504 LCD Controller und einem 800x600 Notebook TFT. 
Es lief prinzipiell, nur das Laden eines Bildes direkt von der Digicam 
dauerte bis zu 15 Minuten je nach Auflösung und Kompression...

Autor: Nik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bmp vs. jpg:

Dem Argument von Benedikt K. stimme ich voll zu.
Es waere schoen, wenn ich jpg Bilder (von der Digi Cam, von Freunden, 
etc.) auf die Karte kopieren und von dort direkt abspielen koennte. Das 
Downsampling auf z.B. 640x480 wird dann beim laden des Bildes erledigt.

>Und um nochmal auf BMP zurück zu kommen. Das meinte ich schon ein wenig
>ernst.
Falls das mit dem jpg dekomprimieren nicht klappt, werde ich auf alle 
faelle die bmp loesung nehmen. ist halt etwas weniger komfortabel.

Autor: Nik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Benedikt K.

>Ich hatte selbst mal versucht sowas zu bauen (mit einem dsPIC als JPEG
>Dekoder, einem S1D13504 LCD Controller und einem 800x600 Notebook TFT.
>Es lief prinzipiell, nur das Laden eines Bildes direkt von der Digicam
>dauerte bis zu 15 Minuten je nach Auflösung und Kompression...

Welche jpg library hast du denn verwendet? Was muss man dabei anpassen?
Ich denke zumindest die Funktionen fuer das Laden der Daten (z.B. von 
der SD Karte), mussten an deine HW angepasst werden, richtig?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab die Lib von Microchip:
http://www.microchip.com/stellent/idcplg?IdcServic...

Die kann man recht einfach anpassen: Microchip verwendet ein virtuelles 
Dateisystem im Flash auf das mit ein paar Befehlen zugegriffen wird. Die 
muss man durch die entsprechenden eigenen Funktionen ersetzen.

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich hatte selbst mal versucht sowas zu bauen (mit einem dsPIC als JPEG
> Dekoder, einem S1D13504 LCD Controller und einem 800x600 Notebook TFT.
> Es lief prinzipiell, nur das Laden eines Bildes direkt von der Digicam
> dauerte bis zu 15 Minuten je nach Auflösung und Kompression...

Zum dsPIC kann ich jetzt nichts sagen, aber für einen FPGA kommt mir die 
Zeit auf jeden Fall zu lange vor. Ein moderner PC braucht nicht mehr als 
100 ms zum dekodieren eines JPEG (wahrscheinlich noch sehr viel weniger, 
aber rechnen wir mal vorsichtig). Ein FPGA ist mit ca. 1/50 der modernen 
CPU getaktet, aber der Datenpfad ist nicht auf JPEGs optimiert, d.h. 
abgesehen vom Takt bekommt man mit einem FPGA mindestens denselben 
Durchsatz. Das wären dann gaaaanz(!) vorsichtig gerechnet immer noch 
weniger als 5 Sekunden. Mit einem optimierten Datenpfad vermute ich eher 
auch um die 100ms.

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ein FPGA ist mit ca. 1/50 der modernen CPU getaktet, aber der Datenpfad ist 
nicht auf JPEGs
> optimiert

Nachtrag: Das sollte natürlich heißen "der Datenpfad der CPU ist nicht 
auf JPEGs optimiert"

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.