U
    ®&^  ã                   @   sp   d dl mZmZmZ d dlmZ dd„ Zdd„ ZG dd„ dej	ƒZ
e e
je¡ e e
jd	¡ e e
jd
¡ dS )é   )ÚImageÚ	ImageFileÚJpegImagePlugin)Úi16bec                 C   s
   t  | ¡S ©N)r   Ú_accept)Úprefix© r	   ú6/tmp/pip-install-a1j0c_p1/Pillow/PIL/MpoImagePlugin.pyr      s    r   c                 C   s   t  | ||¡S r   )r   Ú_save)ZimÚfpÚfilenamer	   r	   r
   r      s    r   c                   @   sp   e Zd ZdZdZdZdd„ Zddd„Zd	d
„ Ze	dd„ ƒZ
e	dd„ ƒZdd„ Zdd„ Zdd„ Zeddd„ƒZdS )ÚMpoImageFileZMPOzMPO (CIPA DC-007)Fc                 C   s$   | j  d¡ tj | ¡ |  ¡  d S )Né    )r   Úseekr   ÚJpegImageFileÚ_openÚ_after_jpeg_open©Úselfr	   r	   r
   r   ,   s    zMpoImageFile._openNc                    s’   |d k	r|nˆ   ¡ ˆ _ˆ jd ˆ _‡ fdd„ˆ jd D ƒˆ _dˆ jd< ˆ jtˆ jƒksZt‚ˆ jd= ˆ jˆ _ˆ j 	ˆ jd ¡ dˆ _
dˆ _dˆ _d S )Ni°  c                    s   g | ]}|d  ˆ j d  ‘qS )Z
DataOffsetÚmpoffset)Úinfo)Ú.0Zmpentr   r	   r
   Ú
<listcomp>4   s    z1MpoImageFile._after_jpeg_open.<locals>.<listcomp>i°  r   r   r   )Z_getmpZmpinfoÚ_MpoImageFile__framecountÚ_MpoImageFile__mpoffsetsÚlenÚAssertionErrorr   r   Ú_MpoImageFile__fpr   Ú_MpoImageFile__frameÚoffsetÚreadonly)r   Úmpheaderr	   r   r
   r   1   s    
ÿ
zMpoImageFile._after_jpeg_openc                 C   s   | j  |¡ d S r   )r   r   )r   Úposr	   r	   r
   Ú	load_seekC   s    zMpoImageFile.load_seekc                 C   s   | j S r   ©r   r   r	   r	   r
   Ún_framesF   s    zMpoImageFile.n_framesc                 C   s
   | j dkS )Nr   r%   r   r	   r	   r
   Úis_animatedJ   s    zMpoImageFile.is_animatedc                 C   sæ   |   |¡sd S | j| _| j| | _| j | jd ¡ | j d¡}|sLtdƒ‚t|ƒdkr¬t| j d¡ƒd }t	 
| j|¡| jd< |  ¡ }d|kr¾d|kr¾|d |d f| _nd| jkr¾| jd= dd| j | j| jd	ffg| _|| _d S )
Né   zNo data found for frameiáÿ  Úexifi   i   Zjpeg)r   r   Ú )Z_seek_checkr   r   r   r    r   ÚreadÚ
ValueErrorÚi16r   Ú
_safe_readr   ZgetexifÚ_sizeÚsizeÚmodeZtiler   )r   ÚframeÚsegmentÚnr)   r	   r	   r
   r   N   s$    

zMpoImageFile.seekc                 C   s   | j S r   )r   r   r	   r	   r
   Útelle   s    zMpoImageFile.tellc                 C   sB   z4z| j | jkr| j  ¡  W n tk
r0   Y nX W 5 d | _ X d S r   )r   r   ÚcloseÚAttributeErrorr   r	   r	   r
   Ú
_close__fph   s    
zMpoImageFile._close__fpc                 C   s   t | _|  |¡ | S )aC  
        Transform the instance of JpegImageFile into
        an instance of MpoImageFile.
        After the call, the JpegImageFile is extended
        to be an MpoImageFile.

        This is essentially useful when opening a JPEG
        file that reveals itself as an MPO, to avoid
        double call to _open.
        )r   Ú	__class__r   )Zjpeg_instancer"   r	   r	   r
   Úadoptq   s    
zMpoImageFile.adopt)N)N)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionZ!_close_exclusive_fp_after_loadingr   r   r$   Úpropertyr&   r'   r   r5   r8   Ústaticmethodr:   r	   r	   r	   r
   r   &   s   


	r   z.mpoz	image/mpoN)r*   r   r   r   Ú_binaryr   r-   r   r   r   r   Zregister_saver>   Zregister_extensionZregister_mimer	   r	   r	   r
   Ú<module>   s   	c