The decoder should include following features:
- It can decode MPEG2 video elementary bit-stream, up to main profile at main level;
- In order to test MPEG2 bitstream in DVD content, the decoder would be able to parse MPEG2 system bit-stream (like VOB data in DVD), and extract video data and decode it;
- The MPEG2 bit-stream data can be from a file, or from network. To handle both the both cases and be more general, the MPEG2 decoder should be able to accept MPEG2 bit-stream stored in a buffer, which will be passed to the decoder. The file reading part should be handled in application level, and the buffer should be big enough to hold bitstream for at least one frame.
- The decoded image will be sent back to the caller in YUV raw format after every frame is decoded. It is up to the caller (application) to decide how to handle the decoded image, whether to display, to store to a file, or to trans-code to other format.
- For most cases, the MPEG2 bitstream data are very big, we cannot read in all the data into a buffer (the memory) before decode. A shared buffer between application (who keeps reading data from file and put into the buffer) and MPEG2 decoder (who continuously consumes the data inside the buffer) should be established.
- One MPEG2 sequence contains many GOP (Group of pictures), and one GOP contains many frames (I-frame, P-frame and B-frames). However, in most cases, we do not know the boundary inside the bitstream. In other word, given certain length of bit-stream data, we do not know how many frames it contains, (unless we go through to parse the frame start header, which need two pass process). This means putting data into the shared buffer from application, and data consuming from decoder are “synchronized”. Some time, after application put in certain data, decoder takes long time (many frames) to consume, while sometimes, application may need to put in data after decoder decode every frame.
- A ring buffer structure can be used as the shared buffer. The buffer will be filled up by the application, before calling the decoder for the first time. Then, every time before calling decoding next frame, check how many data left in the buffer, if the buffer is half empty, start to fill in new data.
Download the package: mpeg2dec.zip
Package includes: MPEG2 decoder filter library, demo program source code with project files (for Windows) and make file (for Linux), example MPEG2 video clip and test script batch file. |