Version 1.5b of ISO/IEC MPEG-1 video decoder.


Contents

1.1 Introduction
1.2 Remaining tasks
1.3 Usage
1.4 Acknowledgements
1.5 vbv and conformance checks
1.6 History

1.1 Introduction

  Version 1.5b of the ISO/IEC 11172-5 MPEG-1 Video Decoder
  has been printed as the April, 1994 edition of CD 11172-5.
  Please contact the project editor, Chad Fogg (cfogg@netcom.com)
  if you have any questions.  Please note that the MPEG-2 sister
  project is much larger in scope, with the ability to encode and
  decode MPEG-1 streams in addition to MPEG-2 streams.

  
1.2 Remaining tasks

 1. Conformance bitstream checks.
 2. integrate correct 4:2:0 to 4:2:2 and 4:4:4 upsampling routines
    based on exact definition of Cb,Cr co-siting 

1.3 Usage

The parameter file, decode.ini, contains user selectable settings
which determine the tracelevel (how detail the statistics are
printed to stdout or file), and reconstruction file format.  
The .SIF format is also known as "Abekus."  YCbCr components are
interleaved (multiplexed) as a repeating sequence of {Cb,Y,Cr,Y} samples 
with 4:2:2 sampling ratio.  The .YUV format is compatible with Berkeley's
encoder.  Components are non-interleaved:  {Y picture buffer, Cb buffer, Cr
buffer} are concatenated into a single file.

1.4 Acknowledgements 

Peter Au
Ron Burns
Diana Choi
Stefan Eckart
Chad Fogg
T. Hanamura
Arian Koster
Kinya Oosa
Brian Quandt
Hiroshi Watanabe


1.5 VBV and conformance checks

[conformance checks implemented in CD 13818-5 currently]

1.6 History


Changes from 1.5 to 1.5b   (cfogg@netcom.com)

- readied for CD 11172-5 printing
- improved nomenclature in some modules
- corrected some minor bugs
- added .yuv format
- reorganized file structure to reflect stages of decoding process.

Changes from revision 1.4 to 1.5 (stefan@lis.e-technik.tu-muenchen.de):

Bug fixes:
- wrong motion vector reconstrution fixed: MV range was positive biased
  instead of negative (e.g.: for f_code=1 [-15..16] instead of [-16..15])
- fixed bug which caused pictures to be "displayed" (=stored) in wrong
  order (I/P frames were delayed for 2 I/P intervals instead of 1)
- error in predictor resetting fixed (DC predictors were not reset after
  an MB sequence of 'intra, skipped, intra' in P pictures)
- fixed interpolation expression (forward and backward prediction have
  to be rounded individually before averaging, these operations aren't
  commutative)
- Little Endian support: no longer casts a byte stream to an unsigned int array

Functional enhancements:
- arbitrary picture dimensions implemented
- allow repeat sequence headers
- arbitrary slice sizes implemented
- full pel motion vectors implemented
- additional output picture file formats: TGA, PPM
- optional trace output

General:
- separated decoder from encoder, moved all .c files into one directory
- changed most 'short' variables to 'int' (C converts them to int in
  expressions and function parameters / return values anyway and gcc's
  optimizer seems to have problems with shorts)
- SNR statistics output removed
- changed several variable names to match the 11172 terminology
- renamed mpeg1.h to types.h and BitCount.h to vlc.h

procMB.c:
- new procedure procBlock() introduced: block layer (2.4.2.8) and DC prediction
- procMB adapted to call procBlock()

procPicture.c:
- split into procPicture.c (picture layer) and procSlice.c (slice layer)
- decoding (i.e. skipping) of extension and user data fields
- simplified structure of procSlice

GlobalVar.h:
- redundant kMCType removed (also from consts.h)
- redundant entries in MB type tables removed

iquant.c:
- ambiguous reconstruction expressions paranthesized: q1*q2*v/8 -> (q1*q2*v)/8

FConstr.c:
FIConstr.c:
- simplified break-down of MVs into pel and half-pel offsets

GetBits.c:
- structure simplified: buffer is now refreshed before extracting the next bit,
  not afterwards.
- NextBits() introduced: returns next n bits without advancing current position

GetCode.c:
- changed error criterion in findCode() and findACCode from numBits > maxBits
  to numBits >= maxBits
- added mismatch error message to findCode()
- added checking for invalid level codes after escape
- merged findCode() and findACCode()
- AC VLC table short -> BYTE


changes from 1.3 to 1.4 (T. Hanamura, Sept. 1993 Brussels meeting of MPEG)

  Implementation of Video Buffering Verification (VBV) Operation by 
  T.Hanamura(hana), Waseda Univ., on Sep.2.93

  Changed file		Modifications
  =========================================================
  include/consts.h  - add macros "kMaxPictureDelay" and "kMaxVbvBufferSize"

  include/mpeg1.h   - add an integer member "vbvBufferSize" to a type
		      defined structure "tParameter".
		    - add a float member "vbvOccupy" and an integer
		    - member "vbvDelay" to a type defined structure
		      "tRateControl". 
			
  src/initial.c     - add the definition of "aParameter->vbvBufferSize"
		      and the initialization of "aRateControl->vbvOccupy"
		      in the function "Initial()"
		    - change the unit of "aParameter->bitRate" to in bit/s
		    - add a float value "vbvBufferStart"

  encoder/BitCount.c- modify the coding of "vbv_buffer_size" in the
		      function "BC_SequenceHeader()"
		    - modify the coding of "vbv_delay" in the
                      function "BC_Picture()"

  encoder/PreFrame.c- include a header file "flc.h"
		    - call the function "calcVbvDelay()"
		    - add the function "calcVbvDelay()"
		    - add the function "checkUpdateVbv()"

  encoder/encoder.proto
		    - add the definition of the function "calcVbvDelay()"
		    - add the definition of the function "checkUpdateVbv()"

  encoder/procPicture.c
                    - call the function "checkUpdateVbv()"

version 1.2 (New York City meeting of MPEG, July 1993)
 correction of some syntax bugs, incorrect VLC table entries.

version 1.1 (Peter Au, Hughes Aircraft)
 first release to Video Technical Report AHG, March 1993.
