o
     PjU$                     @  s  d dl mZ d dlZd dlmZ d dlmZ ddlmZm	Z	m
Z
mZ z
ddlmZ dZW n ey7   d	ZY nw d
Zd Zd+ddZd,ddZd-ddZG dd de
j
Zd.d"d#Z		d/d0d&d'Ze	ejee ere	eje e	eje e	ejd(d)g e	ejd* dS dS )1    )annotationsN)BytesIO)IO   )ExifTagsImage	ImageFileImageSequence)_avifTFauto
codec_namestrreturn
str | Nonec                 C  sJ   t  }|dD ]}|dd | kr"|dd dd   S q	d S )Nz, z [r   : )r
   codec_versionssplit)r   versionsversion r   H/home/thesage/.local/lib/python3.10/site-packages/PIL/AvifImagePlugin.pyget_codec_version   s   r   prefixbytes
bool | strc                 C  s:   | dd dkr
dS | dd }|dv rt s	 dS dS dS )	N      s   ftypF   )s   avifs   aviss   mif1s   msf1zEimage file could not be identified because AVIF support not installedT)	SUPPORTED)r   major_brandr   r   r   _accept   s   r"   intc                   C  s,   t rt S ttdrttdS t pdS )Nsched_getaffinityr   r   )DEFAULT_MAX_THREADShasattroslenr$   	cpu_countr   r   r   r   _get_default_max_threads8   s
   
r*   c                      sR   e Zd ZdZdZdZdddZdd
dZd fddZdddZ	dddZ
  ZS )AvifImageFileAVIFz
AVIF imager   r   Nonec                 C  s
  t sd}t|tdkrttsd}t|| jd usJ t| j tt	 | _
| j
 \| _| _| _}}}}| jdk| _|rF|| jd< |rM|| jd< |dksS|rwt }|rg|| |tjjd}nd}||krw||tjj< | }|r~|| jd< | d d S )	NzAimage file could not be opened because AVIF support not installedr   zInvalid opening codecr   icc_profilexmpexifr   )r    SyntaxErrorDECODE_CODEC_CHOICEr
   decoder_codec_available
ValueErrorfpAvifDecoderreadr*   _decoderget_info_sizen_frames_modeis_animatedinfor   Exifloadgetr   BaseOrientationtobytesseek)selfmsgiccr0   exif_orientationr/   	exif_dataoriginal_orientationr   r   r   _openF   sB   



zAvifImageFile._openframer#   c                 C  s4   |  |sd S || _tdd| j d| jg| _d S )Nraw)r   r   r   )_seek_check_AvifImageFile__framer   _Tilesizemodetile)rF   rM   r   r   r   rE   q   s   
 zAvifImageFile.seekImage.core.PixelAccess | Nonec                   sr   | j r4| j| j\}}}}td||  | jd< td||  | jd< | jr/| jr/| j  t	|| _t
  S )Ni  	timestampduration)rT   r8   	get_framerP   roundr>   r5   _exclusive_fpcloser   superr@   )rF   data	timescalepts_in_timescalesduration_in_timescales	__class__r   r   r@   y   s   



zAvifImageFile.loadposc                 C  s   d S Nr   )rF   rc   r   r   r   	load_seek   s   zAvifImageFile.load_seekc                 C  s   | j S rd   )rP   )rF   r   r   r   tell   s   zAvifImageFile.tell)r   r-   )rM   r#   r   r-   )r   rU   )rc   r#   r   r-   r   r#   )__name__
__module____qualname__formatformat_descriptionrP   rL   rE   r@   re   rf   __classcell__r   r   ra   r   r+   A   s    

+
r+   imImage.Imager5   	IO[bytes]filenamestr | bytesr-   c                 C  s   t | ||dd d S )NT)save_all)_save)rn   r5   rq   r   r   r   	_save_all   s   ru   rs   boolc           #        s  | j  }|rt|dg }ng }h d t fdd| g| D }|dd}t|tr7|dk s7|dkr=d	}t||d
d}	|d|rJdnd}
|dd}|dt }|dd}|dkrot	
|sod}t||dd}|dd}|dd}t|dd}t|d||  kodkn  }|d| jd}d}|d }rt|tjr|}n	t }|| tjj|v r|tjj}|r| nd}n
t|tjr| }|d}t|tr|d }|d!}|d ur(t|tr| }zt|}W n ty   d"}Y n
w td#d |D }|r(d$}t|t	| j|
||||||||||p:d|p>d||pCd|}d}d}|  }| oXt| d%d }z_| g| D ]R}t !|D ]I} | j"}!|j"d&vr|j#rxd'}!n|j" v rd(}!nd)}!| $|!} t|	ttfr|	| }n|	}|%| d*|!|| j|!| |d7 }|s nqfq_W | &| n| &| w |' }"|"d u rd+}t(||)|" d S ),Nappend_images>   I;16I;16BI;16LI;16N1FILc                 3  s*    | ]}t |D ]}|j v V  q	qd S rd   )r	   IteratorrS   ).0imsrM   grayscale_modesr   r   	<genexpr>   s    z_save.<locals>.<genexpr>qualityK   r   d   zInvalid quality settingrW   subsamplingz4:0:0z4:2:0speed   max_threadscodecr   zInvalid saving codecrangefull	tile_rows	tile_colsalpha_premultipliedF
autotilingr.   r   r0       r/   zutf-8advancedTc                 s  s(    | ]}t |t pt|d kV  qdS )   N)
isinstancetupler(   )r   vr   r   r   r      s   & zcadvanced codec options must be a dict of key-value string pairs or a series of key-value two-tuplesr=   >   r   RGBRGBAr   r   r   rN   z1cannot write file as AVIF (encoder returned None))*encoderinfocopylistrA   allr   r#   r4   r*   r
   encoder_codec_availablerv   r>   r   r?   r@   r   rB   rC   poprD   r   encodedictitemsr   	TypeErroranyAvifEncoderrR   rf   getattrr	   r   rS   has_transparency_dataconvertaddrE   finishOSErrorwrite)#rn   r5   rq   rs   r>   rw   	grayscaler   rG   rW   r   r   r   r   range_tile_rows_log2tile_cols_log2r   r   r.   rI   r0   rJ   r/   r   invalidenc	frame_idxframe_durationcur_idxis_single_framer   rM   rawmoder]   r   r   r   rt      s   
$








	#
rt   z.avifz.avifsz
image/avif)r   r   r   r   )r   r   r   r   rg   )rn   ro   r5   rp   rq   rr   r   r-   )F)
rn   ro   r5   rp   rq   rr   rs   rv   r   r-   )
__future__r   r'   ior   typingr    r   r   r   r	   r
   r    ImportErrorr2   r%   r   r"   r*   r+   ru   rt   register_openrk   register_saveregister_save_allregister_extensionsregister_mimer   r   r   r   <module>   s8    


	
N 