Multi-processor Motion JPEG decoder

1. Introduction
2. Implementation

1. Introduction

The Motion JPEG Decoder application is only suitable for the extended MiniNoC platform with a shared memory node. Due to the memory space constraints of the original mNoC, a new shared memory node was implemented in order to handle more data. Applications like MJPEG Decoder can only run in systems with big memory storage resources; which is the case of the extended mNoC.

This application is based on the JPEG decoder, and it consist in a continuously decoding of each JPEG frame from a MJPEG flow. 

2. Implementation

JPEG Decoder application is divided in three tasks; which are mapped in three extended mMIPS nodes. First task is reading data from its own mMIPS local memory processing it in some way; and results are sent to the second node. Second task will proceed in the same way sending resulting data to third task; which finish this process obtaining the decoded image and storing it on its local mMIPS memory.

During the decoding of a single image those nodes could be idle in certain moments. For example, at the beginning of the process third node is waiting for data processed by node two; which means inefficiency using mNoC resources. Something similar happens at the end of the process; where first node has finished but still waiting for node three to finish.

Implementing a Motion JPEG Decoder this aspect is improved. In this new case a new image is immediately decoded after a previous one has finished; therefore nodes are working in parallel decoding different images at the same time. When task 1 finish processing data from image 1, the third one still working on it. Is in this moment when image 2 starts to be decoded by node 1; therefore two images are now in the system and nodes are not idle.

For this reason, it could be tested that decoding two images with MJPEG Decoder is faster than decoding two separate images with a JPEG Decoder. Figure 1 tries to show this fact. Figure a) is the execution time of JPEG Decoder application, where total execution time is t1+t2. Figure b) is execution time of MJPEG Decoder application where total execution time is lower than t1+t2.


Figure 1
: JPEG Decoder (a) and MJPEG Decoder (b) execution time

As Motion JPEG Decoder was created from the JPEG Decoder application, it was necessary to perform some changes on the original application. First, it was necessary to modify the source code of the application in order to upload several input images in shared memory. New pointers to the input images on they new location were added to the application, as well as the location for the output decoded images was also changed to shared memory. Each node has to continue working until all images in shared memory have been decoded; therefore a loop with parameters like current image or number of images were added to the application. On this way the content of shared memory after executing the application is the one shown on Figure 2:


Figure 2
: Shared memory content after a MJPEG Decoder execution

Motion JPEG Decoder application is located in the folder ./c_prog/motionjpeg_mmips of the package.