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

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 

17from . import Image, ImageFile 

18from ._binary import i8 

19 

20# 

21# Bitstream parser 

22 

23 

24class BitStream: 

25 def __init__(self, fp): 

26 self.fp = fp 

27 self.bits = 0 

28 self.bitbuffer = 0 

29 

30 def next(self): 

31 return i8(self.fp.read(1)) 

32 

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 

42 

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 

48 

49 def read(self, bits): 

50 v = self.peek(bits) 

51 self.bits = self.bits - bits 

52 return v 

53 

54 

55## 

56# Image plugin for MPEG streams. This plugin can identify a stream, 

57# but it cannot read it. 

58 

59 

60class MpegImageFile(ImageFile.ImageFile): 

61 

62 format = "MPEG" 

63 format_description = "MPEG" 

64 

65 def _open(self): 

66 

67 s = BitStream(self.fp) 

68 

69 if s.read(32) != 0x1B3: 

70 raise SyntaxError("not an MPEG file") 

71 

72 self.mode = "RGB" 

73 self._size = s.read(12), s.read(12) 

74 

75 

76# -------------------------------------------------------------------- 

77# Registry stuff 

78 

79Image.register_open(MpegImageFile.format, MpegImageFile) 

80 

81Image.register_extensions(MpegImageFile.format, [".mpg", ".mpeg"]) 

82 

83Image.register_mime(MpegImageFile.format, "video/mpeg")