Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/PIL/MpegImagePlugin.py: 37%
39 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
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#
17from . import Image, ImageFile
18from ._binary import i8
20#
21# Bitstream parser
24class BitStream:
25 def __init__(self, fp):
26 self.fp = fp
27 self.bits = 0
28 self.bitbuffer = 0
30 def next(self):
31 return i8(self.fp.read(1))
33 def peek(self, bits):
34 while self.bits < bits:
35 c = self.next()
36 if c < 0:
37 self.bits = 0
38 continue
39 self.bitbuffer = (self.bitbuffer << 8) + c
40 self.bits += 8
41 return self.bitbuffer >> (self.bits - bits) & (1 << bits) - 1
43 def skip(self, bits):
44 while self.bits < bits:
45 self.bitbuffer = (self.bitbuffer << 8) + i8(self.fp.read(1))
46 self.bits += 8
47 self.bits = self.bits - bits
49 def read(self, bits):
50 v = self.peek(bits)
51 self.bits = self.bits - bits
52 return v
55##
56# Image plugin for MPEG streams. This plugin can identify a stream,
57# but it cannot read it.
60class MpegImageFile(ImageFile.ImageFile):
62 format = "MPEG"
63 format_description = "MPEG"
65 def _open(self):
67 s = BitStream(self.fp)
69 if s.read(32) != 0x1B3:
70 raise SyntaxError("not an MPEG file")
72 self.mode = "RGB"
73 self._size = s.read(12), s.read(12)
76# --------------------------------------------------------------------
77# Registry stuff
79Image.register_open(MpegImageFile.format, MpegImageFile)
81Image.register_extensions(MpegImageFile.format, [".mpg", ".mpeg"])
83Image.register_mime(MpegImageFile.format, "video/mpeg")