BERKELEY MPEG TOOLS (Version 1.0, Release 2; August 1995) Lawrence A. Rowe, Steve Smoot, Ketan Patel, Brian Smith, Kevin Gong, Eugene Hung, Doug Banks, Sam Tze-San Fung, Darryl Brown, and Dan Wallach -------------------- Changes since release one: mpeg_encode - important bug fixes mpeg_play - simple user interface added others - small bugfixes -------------------- Computer Science Division-EECS University of California at Berkeley Berkeley, CA 94720-1776 This distribution is a combined release of tools developed at Berkeley and elsewhere for manipulating MPEG-1 video. This release includes the following tools: mpeg_play - software-only MPEG-1 video decoder mpeg_encode - software-only MPEG-1 video encoder mpeg_stat - a bitstream analysis tool mpeg_blocks - an interactive tool to examine macroblock coding mpeg_bits - an interactive tool to examine bit allocation to blocks The package is available at the URL ftp://mm-ftp.cs.berkeley.edu/pub/multimedia/mpeg/bmt1r1.tar.gz For more information on MPEG standards and other MPEG software and hardware, see http://www-plateau.cs.berkeley.edu/mpeg/index.html. Other sites where you can find interesting MPEG related software and movies are: ftp://sunsite.unc.edu/pub/multimedia/utilities ftp://netcom.com:/pub/cf/cfogg/ http://www.acm.uiuc.edu/rml/Mpeg The remainder of this file describes each tool including changes, if any, from previous releases and other information about the release. In the descriptions below reference is made to papers describing various aspects of these programs. These papers are also available at the Plateau WWW site (http://www-plateau.cs.berkeley.edu/) or in our FTP site in the directory pub/multimedia/papers. MPEG_PLAY (V2.3) This program decodes and displays an MPEG-1 video stream. The program has been written to be portable, which means it has not been optimized for specific platforms. The decoder is implemented as a library that will take a video stream and display it in an X window on an 8, 24 or 32 bit deep display. The main routine is supplied to demonstrate the use of the decoder library. Several dithering algorithms are supplied based on the Floyd-Steinberg, ordered dither, and half-toning algorithms that tradeoff quality and performance. Neither the library nor the main routine handle real-time synchronization or audio streams. A paper published at ACM Multimedia 93 describes the decoder and compares the performance of the program on several platforms (see pub/multimedia/papers/MM93.ps.Z). An updated version of this comparison is included in the file doc/mpegperf.ps in this distribution. This code has also been included in our Continuous Media Player (cmplayer) that plays synchronized audio and video across a network. This system adapts to the decoding performance of the destination machine. A paper describing these algorithms and the performance of the system was published at IS&T SPIE 94 (see /pub/multimedia/papers/CMMPEG-SPIE94.ps.Z). This release fixes numerous bugs in the player including the motion vector problem that caused problems when playing MPEGs generated from computer-generated animations, the error in the color space equations, some IDCT problems, and a number of minor problems with installation on platforms with new OS releases. New features have also been implemented, chief of which are the ability to play system layer MPEG streams (discarding audio), gamma correction, and frame rate control. MPEG_ENCODE (V1.5R2) This program generates an MPEG-1 video bitstream given a sequence of images in an acceptable format (e.g., yuv, ppm, jpeg, etc.). It can be run on one computer (i.e., sequential) or on several computers (i.e., parallel). Our goal was to produce a portable, easy-to-use encoder that can be used to encode video material for a variety of desktop applications (e.g., video-on-demand). The parallelism is done on a sequence of pictures. In other words, you can spawn one or more children to encode continuous runs of pictures. The goal is to allow you to encode using multiple processors, think spare cycles on workstations, to speed up the encoding time. Although performance depends on the speed of individual processors, the file system and network, and the P/B frame search methods, we have encoded 3.75 frames/second on 8 HP Snakes running in parallel as compared with 0.6 frames/second on 1 Snake when coding CIF size images. The encoder has also been ported to an Intel supercomputer (Paragon) on which it has encoded CCIR 601 images at 40 frames/second. A paper describing the parallel encoder and our experiments on a network of workstations was published at the 1994 Picture Coding Symposium (see /pub/multimedia/papers/mpeg-encode.ps.Z). A paper describing the port to the Intel supercomputer and the performance experiments on that system was presented at IS&T SPIE95 (see /pub/multimedia/papers/intelsc-mpeg-encode.ps.Z). This work was done jointly with Ed Delp and his student Ke Shen from Purdue. You can get a copy of the Intel code from /pub/dist/delp/spie95-coding at skynet.ecn.purdue.edu. This release fixed several bugs and added some new features. Specifically, the encoder has been modified to: 1) accept input images generated on the fly by another program, 2) generate constant bitrate bitstreams, 3) be much more flexible about input formats, and 4) allow a priori specification of motion vectors or Qscales on a macroblock level, to avoid repetitive motion searches when reencoding. MPEG_STAT (V2.2R2) MPEG_STAT has been modified to gather more statistics (e.g., bit rate, real Q-scale information, detailed motion vector/cbp information, constrained parameter checking, etc.) and fix some bugs. The major change (from 2.1) was to add some additional verification checks to help determine the validty of a bitstream including illegal motion vectors and CPB settings, and speed it up even more. MPEG_BLOCKS (V1.0R2) This program is a new tool that allows a user to examine how a movie has been encoded on a picture-by-picture basis. It shows size statistics on the different frame types and how each macroblock was coded. The program also shows the decoded image so you can see the effect of these coding parameters. The current version of this program only works on systems that support the X Windowing System and Tcl/Tk because it provides a user-friendly GUI. MPEG_BITS (V1.0R2) This program is also new in this release. It is based on the MPEG_BLOCKS program, but instead of showing block encoding, it shows how many bits were allocated to each block. It uses the same GUI interface. MPEG_BITS also allows you to specify a range of blocks that should receive more bits when recoding the sequence. The mpeg_encoder has not yet been modified to take this specification, but it will in a future release. ACKNOWLEDGEMENTS We gratefully thank Hewlett-Packard, Fujitsu, Hitachi, and Philips who provided financial support for this work. We also want to thank the following people and organizations for their help: Jef Poskanzer who developed the pbmplus package. Eiichi Kowashi of Intel and Avideh Zakhor of U.C. Berkeley who provided valuable suggestions on motion vector searching. Chad Fogg of Chromatic Research, Inc. who has helped us understand many issues in MPEG coding and decoding. Rainer Menes of the Technical University of Munich who ported previous versions of the Berkeley MPEG encoder and decoder to the Macintosh. He has provided us with many suggestions to improve the code. Robert Safranek of ATT for comments, suggestions, and most of the code for custom quantization tables. Jim Boucher of Boston University for jmovie2jpeg. The San Diego SuperComputing Center for providing facilities to develop some of the code contained within. Tom Lane of the Independent JPEG Group who provided us with the basic inverse DCT code used by our player. (tom_lane@g.gp.cs.cmu.edu) Reid Judd of Sun Microsystems who provided advice and assistance. Todd Brunhoff of NVR who provided advice and assistance. Toshihiko Kawai of Sony who provided advice and assistance.