1BERKELEY MPEG TOOLS (Version 1.0, Release 2; August 1995) 2 3Lawrence A. Rowe, Steve Smoot, Ketan Patel, Brian Smith, Kevin Gong, 4Eugene Hung, Doug Banks, Sam Tze-San Fung, Darryl Brown, and Dan Wallach 5 6-------------------- 7Changes since release one: 8 mpeg_encode - important bug fixes 9 mpeg_play - simple user interface added 10 others - small bugfixes 11-------------------- 12 13Computer Science Division-EECS University of California at Berkeley 14Berkeley, CA 94720-1776 15 16This distribution is a combined release of tools developed at 17Berkeley and elsewhere for manipulating MPEG-1 video. 18 19This release includes the following tools: 20 21 mpeg_play - software-only MPEG-1 video decoder 22 mpeg_encode - software-only MPEG-1 video encoder 23 mpeg_stat - a bitstream analysis tool 24 mpeg_blocks - an interactive tool to examine macroblock coding 25 mpeg_bits - an interactive tool to examine bit allocation to blocks 26 27The package is available at the URL 28 29 ftp://mm-ftp.cs.berkeley.edu/pub/multimedia/mpeg/bmt1r1.tar.gz 30 31For more information on MPEG standards and other MPEG software and 32hardware, see http://www-plateau.cs.berkeley.edu/mpeg/index.html. 33Other sites where you can find interesting MPEG related software 34and movies are: 35 36 ftp://sunsite.unc.edu/pub/multimedia/utilities 37 ftp://netcom.com:/pub/cf/cfogg/ 38 http://www.acm.uiuc.edu/rml/Mpeg 39 40The remainder of this file describes each tool including changes, 41if any, from previous releases and other information about the 42release. In the descriptions below reference is made to papers 43describing various aspects of these programs. These papers are 44also available at the Plateau WWW site (http://www-plateau.cs.berkeley.edu/) 45or in our FTP site in the directory pub/multimedia/papers. 46 47 48MPEG_PLAY (V2.3) 49 50This program decodes and displays an MPEG-1 video stream. The 51program has been written to be portable, which means it has not 52been optimized for specific platforms. The decoder is implemented 53as a library that will take a video stream and display it in an X 54window on an 8, 24 or 32 bit deep display. The main routine is 55supplied to demonstrate the use of the decoder library. Several 56dithering algorithms are supplied based on the Floyd-Steinberg, 57ordered dither, and half-toning algorithms that tradeoff quality 58and performance. Neither the library nor the main routine handle 59real-time synchronization or audio streams. 60 61A paper published at ACM Multimedia 93 describes the decoder and 62compares the performance of the program on several platforms (see 63pub/multimedia/papers/MM93.ps.Z). An updated version of this 64comparison is included in the file doc/mpegperf.ps in this 65distribution. This code has also been included in our Continuous 66Media Player (cmplayer) that plays synchronized audio and video 67across a network. This system adapts to the decoding performance 68of the destination machine. A paper describing these algorithms 69and the performance of the system was published at IS&T SPIE 94 70(see /pub/multimedia/papers/CMMPEG-SPIE94.ps.Z). 71 72This release fixes numerous bugs in the player including the motion 73vector problem that caused problems when playing MPEGs generated 74from computer-generated animations, the error in the color space 75equations, some IDCT problems, and a number of minor problems with 76installation on platforms with new OS releases. 77 78New features have also been implemented, chief of which are the ability 79to play system layer MPEG streams (discarding audio), gamma correction, and 80frame rate control. 81 82 83MPEG_ENCODE (V1.5R2) 84 85This program generates an MPEG-1 video bitstream given a sequence 86of images in an acceptable format (e.g., yuv, ppm, jpeg, etc.). 87It can be run on one computer (i.e., sequential) or on several 88computers (i.e., parallel). Our goal was to produce a portable, 89easy-to-use encoder that can be used to encode video material for 90a variety of desktop applications (e.g., video-on-demand). The 91parallelism is done on a sequence of pictures. In other words, 92you can spawn one or more children to encode continuous runs of 93pictures. The goal is to allow you to encode using multiple 94processors, think spare cycles on workstations, to speed up the 95encoding time. Although performance depends on the speed of 96individual processors, the file system and network, and the P/B 97frame search methods, we have encoded 3.75 frames/second on 8 HP 98Snakes running in parallel as compared with 0.6 frames/second on 991 Snake when coding CIF size images. The encoder has also been 100ported to an Intel supercomputer (Paragon) on which it has encoded CCIR 101601 images at 40 frames/second. 102 103A paper describing the parallel encoder and our experiments on a 104network of workstations was published at the 1994 Picture Coding 105Symposium (see /pub/multimedia/papers/mpeg-encode.ps.Z). A paper 106describing the port to the Intel supercomputer and the performance 107experiments on that system was presented at IS&T SPIE95 (see 108/pub/multimedia/papers/intelsc-mpeg-encode.ps.Z). This work was 109done jointly with Ed Delp and his student Ke Shen from Purdue. 110You can get a copy of the Intel code from /pub/dist/delp/spie95-coding 111at skynet.ecn.purdue.edu. 112 113This release fixed several bugs and added some new features. 114Specifically, the encoder has been modified to: 1) accept input 115images generated on the fly by another program, 2) generate constant 116bitrate bitstreams, 3) be much more flexible about input formats, 117and 4) allow a priori specification of motion vectors or Qscales on a 118macroblock level, to avoid repetitive motion searches when reencoding. 119 120MPEG_STAT (V2.2R2) 121 122MPEG_STAT has been modified to gather more statistics (e.g., bit 123rate, real Q-scale information, detailed motion vector/cbp information, 124constrained parameter checking, etc.) and fix some bugs. The major 125change (from 2.1) was to add some additional verification checks to help 126determine the validty of a bitstream including illegal motion 127vectors and CPB settings, and speed it up even more. 128 129 130MPEG_BLOCKS (V1.0R2) 131 132This program is a new tool that allows a user to examine how a 133movie has been encoded on a picture-by-picture basis. It shows 134size statistics on the different frame types and how each macroblock 135was coded. The program also shows the decoded image so you can 136see the effect of these coding parameters. 137 138The current version of this program only works on systems that 139support the X Windowing System and Tcl/Tk because it provides a 140user-friendly GUI. 141 142 143MPEG_BITS (V1.0R2) 144 145This program is also new in this release. It is based on the 146MPEG_BLOCKS program, but instead of showing block encoding, it 147shows how many bits were allocated to each block. It uses the same 148GUI interface. 149 150MPEG_BITS also allows you to specify a range of blocks that should 151receive more bits when recoding the sequence. The mpeg_encoder 152has not yet been modified to take this specification, but it will 153in a future release. 154 155 156ACKNOWLEDGEMENTS 157 158We gratefully thank Hewlett-Packard, Fujitsu, Hitachi, and Philips who 159provided financial support for this work. We also want to thank the 160following people and organizations for their help: 161 162 Jef Poskanzer who developed the pbmplus package. 163 164 Eiichi Kowashi of Intel and Avideh Zakhor of U.C. Berkeley who 165 provided valuable suggestions on motion vector searching. 166 167 Chad Fogg of Chromatic Research, Inc. who has helped us understand 168 many issues in MPEG coding and decoding. 169 170 Rainer Menes of the Technical University of Munich who 171 ported previous versions of the Berkeley MPEG encoder and 172 decoder to the Macintosh. He has provided us with many suggestions 173 to improve the code. 174 175 Robert Safranek of ATT for comments, suggestions, and most of 176 the code for custom quantization tables. 177 178 Jim Boucher of Boston University for jmovie2jpeg. 179 180 The San Diego SuperComputing Center for providing facilities 181 to develop some of the code contained within. 182 183 Tom Lane of the Independent JPEG Group who provided us with the basic 184 inverse DCT code used by our player. (tom_lane@g.gp.cs.cmu.edu) 185 186 Reid Judd of Sun Microsystems who provided advice and assistance. 187 188 Todd Brunhoff of NVR who provided advice and assistance. 189 190 Toshihiko Kawai of Sony who provided advice and assistance. 191