o
    pc]                     @   s   d dl Z ddlmZmZmZ ddlmZ ddlmZ	 ddlm
Z
 dd ZG d	d
 d
ejZeejee eejddg dS )    N   )Image	ImageFileImagePalette)i16le)i32leo8c                 C   s(   t | dkot| ddv ot| ddv S )N      )  i     )r      )leni16)prefix r   2lib/python3.10/site-packages/PIL/FliImagePlugin.py_accept   s
   r   c                   @   s@   e Zd ZdZdZdZdd Zdd Zdd	 Zd
d Z	dd Z
dS )FliImageFileZFLIzAutodesk FLI/FLC AnimationFc           
      C   s  | j d}t|r|dd dksd}t|t|d| _| jdk| _d| _t|d	t|d
f| _t	|d}t|d}|dkrF|d d }|| j
d< dd tdD }| j d}d| _t|ddkrr| jt	| | _| j d}t|ddkrt|d}d }t|D ]5}|d ur| j |d tj | j d}t|d}	|	dv r| ||	dkrdnd  n	t	|}|s nqdd |D }tdd|| _d| _| j | _| j  | _| d d S )N         s     znot an FLI/FLC filer
   r   P   
      r   r   i  F   durationc                 S   s   g | ]}|||fqS r   r   ).0ar   r   r   
<listcomp>H   s    z&FliImageFile._open.<locals>.<listcomp>   i   i  )r      r#      r   c                 S   s*   g | ]\}}}t |t | t | qS r   r   )r   rgbr   r   r   r!   c   s   * ZRGB    )fpreadr   SyntaxErrorr   Zn_framesZis_animatedmode_sizei32inforange_FliImageFile__offsetseekosSEEK_CUR_paletter   rawjoinpalette_FliImageFile__frame_fptell_FliImageFile__rewind)
selfsmsgr   magicr9   Znumber_of_subchunksZ
chunk_size_Z
chunk_typer   r   r   _open0   sP   




zFliImageFile._openc           
      C   s   d}t t| jdD ]L}| jd}||d  }|d }|dkr$d}| j|d }t dt|dD ]#}|| |> }||d  |> }||d  |> }	|||	f||< |d7 }q4qd S )Nr   r$   r   r"   r   )r1   r   r*   r+   r   )
r>   r9   shiftier?   nr%   r&   r'   r   r   r   r6   l   s    
zFliImageFile._palettec                 C   sJ   |  |sd S || jk r| d t| jd |d D ]}| | qd S )Nr   r   )Z_seek_checkr:   _seekr1   )r>   framefr   r   r   r3   ~   s   


zFliImageFile.seekc                 C   s   |dkrd| _ | j| j d| _n|   || j d kr&d| }t||| _ | j| _| j| j | jd}|s>t	t
|}|| _dd| j | jd fg| _|  j|7  _d S )	Nr   r)   r   r   zcannot seek to frame r   Zfli)r   r   )r:   r;   r3   r=   r2   load
ValueErrorr*   r+   EOFErrorr/   ZdecodermaxblocksizeZtile)r>   rI   r@   r?   Z	framesizer   r   r   rH      s$   
zFliImageFile._seekc                 C   s   | j S )N)r:   )r>   r   r   r   r<      s   zFliImageFile.tellN)__name__
__module____qualname__formatZformat_descriptionZ!_close_exclusive_fp_after_loadingrC   r6   r3   rH   r<   r   r   r   r   r   *   s    <	r   z.fliz.flc)r4    r   r   r   Z_binaryr   r   r   r/   r	   r   r   Zregister_openrR   Zregister_extensionsr   r   r   r   <module>   s    