Project Stage 3: Improving PSNR

Due: 11:59pm, 13 November 2005

The objective in Stage 3 of the project is to improve the PSNR of the decoded video, subjected to bandwidth constraits.

You are to built on the source code given in Stage 2. You may use whatever methods you have learned in class or read elsewhere to improve the PSNR quality. Examples are interleaving with error concealment, unequal error protection, changing temporal pattern, etc. There are however, several constrants:

  • There is no feedback channel from the receiver to the sender. A consequence of this constraint, is that you cannot retransmit any packets that has been dropped.
  • There is a cap on the bandwidth. You cannot send as many FEC packets as you want. The percentage of overhead allowed must be given as a parameter to your program. If the overhead is k (0 < k < 1), then you are allowed to send (B + Bk) bytes (including RTP headers) where B is the file size in bytes of the MPEG video.
  • You cannot reencode the video from the original uncompressed YUV video (to prevent someone to send a higher quality video to begin with). You can, however, (simulate) transcoding of the video from the given MPEG.
  • Additional constraints might be added overtime to close any loopholes :)


Be creative with your methods. Do not limit yourself to the methods presented in class or existing papers. Some methods require more work than others (e.g. sophisticated error concealment). You are encourage to try easier methods first. You are strongly encourage to discuss your methods with me before actual implementation. I can help you with understanding certain parts of the code I wrote that you have not used before (e.g. MPEG decoder). Finally, as usual, please start early!

You can make whatever changes necessary (additional input parameters, additional MntComponents etc.) to implement your methods.

Simulating FEC, Transcoding etc.

You may simulate FEC packets instead of actually computing and sending the real FEC packets. Since we are simulating packet drops as well, we can simulate packet recovery by not dropping them if the corresponding FEC packets are not dropped.

You may simluate transcoding by reencoding the given MPEG file into different frame pattern offline, using tools such as ffmpeg. When your program needs to send a different frame pattern, you program can then read from the MPEG file with the right frame pattern.

If your method requires other "simulations", please check with me to see if they are acceptable.

Grading (30%)

Correctness (10%) Novelty/Creativity (8%) Report (8%) PSNR values (4%)


To submit your project, create a tarball of all yours sources, (please exclude sample videos, object files etc.), and put it into IVLE workbin. Your source code should be properly commented with explanations to help me understand your code. Please include a README.txt that explains how to compile/run your code and how your method is implementated.

In addition to source code, you should also submit a 4-6 page paper that explains your method. The paper should be of publication quality (with proper introduction, description of solution, and evaluation results of your methods). Please follow the ACM proceeding style guidelines. Please use the given LaTeX (recommended) or Word template so that to ensure that there are little variations in margin and font size.

The following resources might be helpful in your writing.