MpegImagePlugin.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. from . import Image, ImageFile
  16. from ._binary import i8
  17. # __version__ is deprecated and will be removed in a future version. Use
  18. # PIL.__version__ instead.
  19. __version__ = "0.1"
  20. #
  21. # Bitstream parser
  22. class BitStream(object):
  23. def __init__(self, fp):
  24. self.fp = fp
  25. self.bits = 0
  26. self.bitbuffer = 0
  27. def next(self):
  28. return i8(self.fp.read(1))
  29. def peek(self, bits):
  30. while self.bits < bits:
  31. c = self.next()
  32. if c < 0:
  33. self.bits = 0
  34. continue
  35. self.bitbuffer = (self.bitbuffer << 8) + c
  36. self.bits += 8
  37. return self.bitbuffer >> (self.bits - bits) & (1 << bits) - 1
  38. def skip(self, bits):
  39. while self.bits < bits:
  40. self.bitbuffer = (self.bitbuffer << 8) + i8(self.fp.read(1))
  41. self.bits += 8
  42. self.bits = self.bits - bits
  43. def read(self, bits):
  44. v = self.peek(bits)
  45. self.bits = self.bits - bits
  46. return v
  47. ##
  48. # Image plugin for MPEG streams. This plugin can identify a stream,
  49. # but it cannot read it.
  50. class MpegImageFile(ImageFile.ImageFile):
  51. format = "MPEG"
  52. format_description = "MPEG"
  53. def _open(self):
  54. s = BitStream(self.fp)
  55. if s.read(32) != 0x1B3:
  56. raise SyntaxError("not an MPEG file")
  57. self.mode = "RGB"
  58. self._size = s.read(12), s.read(12)
  59. # --------------------------------------------------------------------
  60. # Registry stuff
  61. Image.register_open(MpegImageFile.format, MpegImageFile)
  62. Image.register_extensions(MpegImageFile.format, [".mpg", ".mpeg"])
  63. Image.register_mime(MpegImageFile.format, "video/mpeg")