| 174 | |
| 175 | == __mjpeg__ == |
| 176 | |
| 177 | This multi-threaded application makes the decompression of a MJPEG bit-stream contained in a file. |
| 178 | It illustrates the "pipe-line" parallelism, and the message passing programming model, on top of the POSIX threads API, and the MWMR channels API. |
| 179 | The application is described as a TCG (Task and Communication Graph), and all communications between threads uses MWMR channels. |
| 180 | Each pipeline decompress one complete image, and there is one pipe-line per cluster. |
| 181 | It uses the chained buffer DMA component to display the stream of decompressed images on the graphic display. |
| 182 | It contains 6 types of threads (plus the "main" thread, that makes initialisation), and 7 types of MWMR communication channels: |
| 183 | * the TG thread dispatch the bit-stream to the pipeline. It is only mapped in cluster[0,0]. |
| 184 | * the 5 threads implementing the pipeline (DEMUX, VLD, IQZZ, IDCT, LIBU) are replicated in all clusters. |
| 185 | * the 7 MWMR channels are replicated in all clusters. |
| 186 | |
| 187 | The hardware constraints are the following |
| 188 | * The number of clusters cannot be larger than 16*16. |
| 189 | * The number of processors per cluster is not constrained. |
| 190 | * The frame buffer size must fit the decompressed images size. |
| 191 | * It uses one TTY terminal shared by all tasks. |
| 192 | |
| 193 | The source code can be found [source:soft/giet_vm/applications/mjpeg/mjpeg.c here], and the mapping is defined [source:soft/giet_vm/applications/mjpeg/mjpeg.py here]. |