354 lines
13 KiB
Plaintext
354 lines
13 KiB
Plaintext
|
|
DMPEG V1.1
|
|
|
|
Public Domain MPEG decoder
|
|
|
|
by Stefan Eckart
|
|
|
|
June 1993
|
|
|
|
1. Features
|
|
===========
|
|
|
|
DMPEG is another MPEG decoder/player for the PC:
|
|
|
|
|
|
- decodes (nearly) the full MPEG video standard
|
|
(I,P,B frames, frame size up to at least 352x288)
|
|
|
|
- can save decoded sequence in 8 or 24bit raw file for
|
|
fast off-line display (two pass mode)
|
|
|
|
- optional on-screen display during decoding
|
|
|
|
- several dithering options for 8 bit displays:
|
|
ordered dither, Floyd-Steinberg, grayscale
|
|
|
|
- selectable color-space
|
|
|
|
- runs under DOS, 640KB RAM, no MS-Windows or '386 required
|
|
|
|
- compact (small code / small data models, 16 bit arithmetic)
|
|
|
|
- supports VGA, many Super-VGAs (including VESA) and
|
|
some TrueColor SVGAs
|
|
|
|
|
|
2. Introduction
|
|
===============
|
|
|
|
DMPEG is a Public Domain decoder for files containing MPEG video
|
|
sequences. MPEG is a standardized format for compressed storage of video
|
|
(and audio), similar in concept to JPEG for individual images. It,
|
|
however, provides higher compression by exploiting the similarity of
|
|
consecutive images of a sequence, so called interframe coding. As with
|
|
JPEG, the compression factor depends on the source material and the
|
|
desired quality of the coded sequence. A compression to less than 5% of
|
|
the original material is not uncommon.
|
|
|
|
DMPEG supports the full MPEG video standard, except D-frame sequences.
|
|
Decoding is not very fast, therefore a two-pass mode was implemented:
|
|
during the first pass the sequence is decoded and stored in an unencoded
|
|
file which then can be played at maximum speed during the second pass.
|
|
Of course DMPEG also has a one-pass mode where the sequence is displayed
|
|
immediately but at lower speed. The speed is about one seventh of that
|
|
of the Xing MPEG decoder (see appendix A). The Xing player, however, can
|
|
only decode I frame sequences of size 160x120 and needs a '386. I
|
|
suggest to use DMEG in addition to Xing's MPEG.EXE 320x200 DOS player.
|
|
The latter is appropriate for real-time display of '160x120, I-frame
|
|
only' Xing files, DMPEG is more suitable for larger size 'real' MPEGs
|
|
containing I, P and B type, 352x288 sized frames or for faster and
|
|
better quality 'off-line' display of the 160x120 MPEGs. Try it on one of
|
|
the larger MPEG files (see appendix, my recommendation: flowg.mpg) to
|
|
see that MPEG can also be used (and is intended) for storing really
|
|
sharp, virtually noise-free sequences.
|
|
|
|
To give an impression of the attainable speeds, here are some figures
|
|
measured on a 386DX/33 with 4MB RAM and a Conner 3104 100 MB hard disk.
|
|
The decoding time for flowg.mpg (352x240) was about 4 sec per frame, 9
|
|
minutes for 150 frames. waterski.mpg (336x208 and higher compression)
|
|
required only 2.4 sec per frame. A decoded 150 frame raw data file is
|
|
12 MB long and can be displayed at 5.2 frames/s. 160x120 MPEGs reach
|
|
22 frames/s while the decoding speed is 1.9 sec/frame. The display frame
|
|
rate is limited by the transfer speed from hard disk to memory (about
|
|
550 kByte/s on my PC). If you have enough RAM, you can obtain much
|
|
higher speed by playing from a large RAM-disk (e.g 23 frames/s for a
|
|
352x240 sequence).
|
|
|
|
This program is Public Domain and I don't take any responsibility
|
|
regarding its fitness, usefulness etc. (#include
|
|
<your_favourite_disclaimer>). Comments, bug reports, questions to:
|
|
|
|
Stefan Eckart
|
|
Kagerstr. 4
|
|
D-81669 Muenchen
|
|
Germany
|
|
|
|
email: stefan@lis.e-technik.tu-muenchen.de
|
|
|
|
Any feedback is welcome.
|
|
|
|
|
|
3. Usage
|
|
========
|
|
|
|
dmpeg [options] input.mpg [output.raw]
|
|
|
|
dmpeg [options] input.raw
|
|
|
|
input.mpg any MPEG DIS 11172 compliant non multiplexed compression
|
|
layer video stream (D frame streams unsupported)
|
|
|
|
output.raw the decoded and dithered 8 or 24bit raw output file;
|
|
if omitted: output to screen only
|
|
|
|
input.raw previously decoded raw file to be displayed at maximum speed
|
|
|
|
Options:
|
|
|
|
-q quiet mode; no text output (except error messages)
|
|
-v verbosity level; can be increased by repeating this option;
|
|
enables display of decoded information (start codes, frame size,
|
|
quantization scales etc.), can't be combined with the -s option
|
|
|
|
-dx dithering options:
|
|
|
|
-d0 ordered, saturation dominant 4x4 dither (default)
|
|
-d1 Floyd-Steinberg error-diffusion / blue-noise-shaping (2 weights)
|
|
-d2 Floyd-Steinberg error-diffusion / blue-noise-shaping (4 weights)
|
|
-d3 undithered grayscale output
|
|
-d4 24 bit true color output
|
|
|
|
-p0 use full color range palette
|
|
-p1 use restricted color range palette (default)
|
|
|
|
-sn select graphics adapter:
|
|
|
|
-s0 either standard VGA or Super-VGA in 320x200x256 mode (default)
|
|
(options -d0..3) or a TrueColor VGA with VESA BIOS in
|
|
320x200x16M mode (option -d4)
|
|
-s1 VESA BIOS, either 640x480x256 (-d0..3) or 640x480x16M (-d4)
|
|
-s2 ET4000 \
|
|
-s3 ET3000 |
|
|
-s4 Video 7 |
|
|
-s5 Paradise | 640x480x256
|
|
-s6 Trident | (options -d0..3 only)
|
|
-s7 Chips & Technologies |
|
|
-s8 ATI |
|
|
-s9 Orchid |
|
|
-s10 Oaktech /
|
|
|
|
-lx delay (x=0..65535, default 0), used only for offline display
|
|
|
|
-b use 8 bit transfer (default: 16 bit) into (S)VGA memory
|
|
|
|
|
|
Options can be combined. Example:
|
|
|
|
dmpeg -d2s0 flowg.mpg flowg.raw
|
|
|
|
decodes MPEG file flowg.mpg to raw file flowg.raw using FS4 dithering
|
|
and displays it on the screen in 320x200x256 mode.
|
|
|
|
dmpeg -vvv flowg.mpg flowg.raw
|
|
|
|
as above but using ordered dither and printing much information about
|
|
startcodes, headers and parameters.
|
|
|
|
All SVGA drivers use the 640x480x256 display mode and require at least
|
|
512 kB of video memory. If your graphics card is not listed, the best
|
|
you can do (besides trying all drivers in the hope that one of them
|
|
might work) is to obtain a VESA BIOS extension for your card and use
|
|
mode -s1. A collection of such drivers had been posted to
|
|
comp.binaries.ibm.pc and is also available at
|
|
ftp.rahul.net:/pub/bryanw/pc/vesadrv2.zip (anonymous ftp).
|
|
|
|
All drivers except the standard VGA, ET4000, the VESA driver in
|
|
conjunction with the mentioned public domain VESA BIOS extension TSR for
|
|
the ET4000 and the TrueColor driver with a Cirrus Logic VGA are
|
|
untested. I'm very interested in email feedback which drivers work and
|
|
which don't.
|
|
|
|
The -l option controls playback speed. It is implemented as a simple
|
|
delay loop without synchronization to a timer or vertical retrace.
|
|
|
|
The -b option is probably superfluous. I don't have much experience in
|
|
PC graphics programming and since I saw some example driver routines
|
|
using bytewise transfer (rep movsb) instead of wordwise (rep movsw) I
|
|
preferred to include this as a fudge factor. You should try it only in
|
|
case of problems. Speed is reduced considerably if you activate this
|
|
switch (at least for cards with 16 bit bus interface).
|
|
|
|
Decoding can be terminated by pressing any key.
|
|
|
|
Offline display can be controlled with the following keys:
|
|
|
|
any key except
|
|
space, return
|
|
or escape halt display at current frame and step one frame
|
|
forward each time a key is pressed
|
|
|
|
space step one frame backwards
|
|
|
|
return continue display
|
|
|
|
escape quit program
|
|
|
|
|
|
4. Technical information
|
|
========================
|
|
|
|
The player is a rather straightforward implementation of the MPEG spec
|
|
[1]. The IDCT is based on the Chen-Wang 11 multiplication algorithm [2]
|
|
which was coded in assembler but does not use tables for multiplication.
|
|
Blocks with not more than two non-zero coefficients use a non-separated
|
|
direct multiply-accumulate 2D-IDCT, which turned out to be faster than a
|
|
'fast' algorithm in this (quite common) case. Dithering is pretty
|
|
standard. Main difference to the Berkeley decoder (except for the fewer
|
|
number of supported algorithms) is the use of 256 instead of 128 colors,
|
|
the (default) option to use a restricted color-space and the
|
|
implementation of a color saturation dominant ordered dither. This leads
|
|
to a somewhat superior quality of the dithered image.
|
|
|
|
Restricted color-space means that the U and V components are clipped to
|
|
+/-0.25 (instead of +/-0.5) and the display color-space points are
|
|
distributed over this restricted space. Since the distance between
|
|
color-space points is thus reduced by a factor of two, the color
|
|
resolution is doubled at the expense of not being able to represent
|
|
fully saturated colors.
|
|
|
|
Saturation dominant ordered dither is a method by which a color, lying
|
|
somewhere between the points of the display color-space, is approximated
|
|
by primarily alternating between two points of constant hue instead of
|
|
constant saturation. This yields subjectivly better quality due to the
|
|
lower sensitivity of the human viewing system to saturation changes than
|
|
to hue changes (the same reasoning as used by the PAL TV standard to
|
|
improve on NTSC). The improvement is particularly visible in dark brown
|
|
or redish areas.
|
|
|
|
|
|
5. File formats
|
|
===============
|
|
|
|
If you want to write your own player or to post-process the results,
|
|
here is the format of the 8 bit raw file:
|
|
|
|
Byte
|
|
|
|
0..7 compatibility bytes (to be ignored)
|
|
8..9 image width (MSB first)
|
|
10..11 image height (MSB first)
|
|
12..31 compatibility / unused
|
|
32..799 color table, R[0],G[0],B[0], ... R[255],G[255],B[255]
|
|
800.. image data in natural order (top left to bottom right,
|
|
all frames concatenated without any gaps or repeated
|
|
headers)
|
|
|
|
The format of 24bit true color files (-d4 option) is:
|
|
|
|
0..7 compatibility bytes (to be ignored)
|
|
8..9 image width (MSB first)
|
|
10..11 image height (MSB first)
|
|
12..31 compatibility / unused
|
|
32.. image data (3 bytes per pixel: B,G,R, top left to bottom
|
|
right, all frames concatenated without any gaps or repeated
|
|
headers)
|
|
|
|
The 8 bit format happens to be compatible with the raw format used by a
|
|
shareware program called Image Alchemy. In fact you can use that program
|
|
to view the first frame of the sequence and to convert it into other
|
|
formats.
|
|
|
|
|
|
6. Changes
|
|
==========
|
|
|
|
This is a list of major changes relative to version 1.0.
|
|
|
|
- speed improved by a factor of two through recoding of the IDCT and
|
|
interframe prediction routines in assembler and optimization of the
|
|
dithering algorithms
|
|
|
|
- support of TrueColor VGAs with VESA BIOS (only tested with Cirrus
|
|
Logic)
|
|
|
|
- DMPEG and DMPLAY merged into one program
|
|
|
|
- SVGA / TrueColor support for immediate display during decoding
|
|
|
|
- increased robustness against errors in the file to be decoded:
|
|
program tries to resynchronize on the next slice/frame header
|
|
instead of terminating
|
|
|
|
- format of the 24 bit raw file changed (B,G,R instead of R,G,B)
|
|
|
|
|
|
7. References
|
|
=============
|
|
|
|
1. Coding of moving pictures and associated audio for digital storage
|
|
media up to about 1,5 Mbit/s, Draft International Standard ISO/IEC
|
|
DIS 11172, 1992.
|
|
|
|
2. Chen, Wang, IEEE ASSP-32, pp. 803-816, Aug. 1984.
|
|
|
|
|
|
Appendix A: Related Software
|
|
============================
|
|
|
|
This list is probably incomplete, but it's all I'm aware of. Of course
|
|
there are programs for other systems as well (Mac, Amiga etc.).
|
|
|
|
cmpeg an MPEG encoder for the PC (DOS, 640K, no '386 req.)
|
|
for Targa, PBMPLUS and Alchemy RAW images
|
|
Author: myself
|
|
|
|
mpeg_play MPEG Video Software Decoder (Version 2.0; Jan 27, 1993)
|
|
Authors: Lawrence A. Rowe, Ketan Patel, and Brian Smith
|
|
Computer Science Division-EECS, Univ. of Calif. at
|
|
Berkeley
|
|
toe.cs.berkeley.edu:/pub/multimedia/mpeg/mpeg-2.0.tar.Z
|
|
|
|
mpgplay Online port of mpeg_play for DOS
|
|
by: Giampero Caprino, scompx@milano.oas.olivetti.com
|
|
(evaluation version, works only with Xing files)
|
|
mpeg386.exe Offline port of mpeg_play for DOS
|
|
by: Greg Ennis, 93gke@cs.williams.edu
|
|
(based on mpgplay, works only with Xing files)
|
|
mpegwin Online port of mpeg_play for MS-Windows
|
|
by: Michael Simmons, msimmons@ecel.uwa.edu.au
|
|
toe.cs.berkeley.edu:/pub/multimedia/mpeg/Ports/mpegw*
|
|
(HiColor & TrueColor support, Shareware)
|
|
|
|
mplay.exe,
|
|
mpeg.exe DOS MPEG players from Xing Technologies
|
|
(very high speed, but decodes only a small subset of the
|
|
MPEG standard)
|
|
|
|
MPEGv1.1/1.2alpha
|
|
MPEG Software Encoder/Decoder
|
|
Authors: Portable Video Research Group (PVRG)
|
|
havefun.stanford.edu:/pub/mpeg/MPEGv*.tar.Z
|
|
|
|
mpgcodec PVRG encoder/decoder for PC compiled with GNU gcc
|
|
('386 required)
|
|
posted in alt.binaries.pictures.utilities
|
|
|
|
|
|
APPENDIX B: MPEG files
|
|
======================
|
|
|
|
Two good sources for MPEG files:
|
|
|
|
toe.cs.berkeley.edu:/pub/multimedia/mpeg/movies
|
|
havefun.stanford.edu:/pub/mpeg
|
|
|
|
High quality MPEGs you simply can't afford to miss:
|
|
|
|
tennis.mpg
|
|
flowg.mpg
|
|
bike.mpg
|
|
|
|
--
|
|
Stefan Eckart, stefan@lis.e-technik.tu-muenchen.de, June 1993.
|