home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pypil112.zip / PIL-1.1.2.zip / Lib / site-packages / PIL / MpegImagePlugin.py < prev    next >
Text File  |  2001-05-03  |  2KB  |  81 lines

  1. #
  2. # The Python Imaging Library.
  3. # $Id$
  4. #
  5. # MPEG file handling
  6. #
  7. # History:
  8. #       95-09-09 fl     Created
  9. #
  10. # Copyright (c) Secret Labs AB 1997.
  11. # Copyright (c) Fredrik Lundh 1995.
  12. #
  13. # See the README file for information on usage and redistribution.
  14. #
  15.  
  16. __version__ = "0.1"
  17.  
  18. import array, string
  19. import Image, ImageFile
  20.  
  21. #
  22. # Bitstream parser
  23.  
  24. class BitStream:
  25.  
  26.     def __init__(self, fp):
  27.         self.fp = fp
  28.         self.bits = 0
  29.         self.bitbuffer = 0
  30.  
  31.     def next(self):
  32.         return ord(self.fp.read(1))
  33.  
  34.     def peek(self, bits):
  35.         while self.bits < bits:
  36.             c = self.next()
  37.             if c < 0:
  38.                 self.bits = 0
  39.                 continue
  40.             self.bitbuffer = (self.bitbuffer << 8) + c
  41.             self.bits = self.bits + 8
  42.         return self.bitbuffer >> (self.bits - bits) & (1 << bits) - 1
  43.  
  44.     def skip(self, bits):
  45.         while self.bits < bits:
  46.             self.bitbuffer = (self.bitbuffer << 8) + ord(self.fp.read(1))
  47.             self.bits = self.bits + 8
  48.         self.bits = self.bits - bits
  49.  
  50.     def read(self, bits):
  51.         v = self.peek(bits)
  52.         self.bits = self.bits - bits
  53.         return v
  54.  
  55.  
  56. class MpegImageFile(ImageFile.ImageFile):
  57.  
  58.     format = "MPEG"
  59.     format_description = "MPEG"
  60.  
  61.     def _open(self):
  62.  
  63.         s = BitStream(self.fp)
  64.  
  65.         if s.read(32) != 0x1B3:
  66.             raise SyntaxError, "not an MPEG file"
  67.  
  68.         self.mode = "RGB"
  69.         self.size = s.read(12), s.read(12)
  70.  
  71.  
  72. # --------------------------------------------------------------------
  73. # Registry stuff
  74.  
  75. Image.register_open("MPEG", MpegImageFile)
  76.  
  77. Image.register_extension("MPEG", ".mpg")
  78. Image.register_extension("MPEG", ".mpeg")
  79.  
  80. Image.register_mime("MPEG", "video/mpeg")
  81.