o
    üÞh"#  ã                   @  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
 z
ddlmZ dZW n ey5   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rˆe	 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)Ú_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   úS/var/www/html/premium_crap/venv/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|ƒ‚t | j ¡ tt	ƒ ¡| _
| j
 ¡ \| _| _| _}}}}| jdk| _|r?|| jd< |rF|| jd< |dksL|rpt ¡ }|r`| |¡ | tjjd¡}nd}||krp||tjj< | ¡ }|rw|| 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ÚAvifDecoderÚfpÚreadr)   Ú_decoderÚget_infoÚ_sizeÚn_framesÚ_modeÚis_animatedÚinfor   ÚExifÚloadÚgetr   ÚBaseÚOrientationÚtobytesÚseek)ÚselfÚmsgÚiccr/   Úexif_orientationr.   Ú	exif_dataÚoriginal_orientationr   r   r   Ú_openF   s@   ÿýÿ



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)rE   rL   r   r   r   rD   o   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)rS   r7   Ú	get_framerO   Úroundr=   r5   Ú_exclusive_fpÚcloser   Úsuperr?   )rE   ÚdataÚ	timescaleÚpts_in_timescalesÚduration_in_timescales©Ú	__class__r   r   r?   w   s   
ÿ


zAvifImageFile.loadÚposc                 C  s   d S ©Nr   )rE   rb   r   r   r   Ú	load_seek†   s   zAvifImageFile.load_seekc                 C  s   | j S rc   )rO   )rE   r   r   r   Útell‰   s   zAvifImageFile.tell)r   r,   )rL   r"   r   r,   )r   rT   )rb   r"   r   r,   ©r   r"   )Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrO   rK   rD   r?   rd   re   Ú__classcell__r   r   r`   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)rm   r5   rp   r   r   r   Ú	_save_all�   s   rt   rr   Úboolc           %      C  s–  | j  ¡ }|rt| dg ¡ƒ}ng }d}| g| D ]
}|t|ddƒ7 }q| dd¡}t|tƒr7|dk s7|dkr=d}	t|	ƒ‚| d	d¡}
| d
d¡}| dd¡}| dtƒ ¡}| dd¡}|dkrkt	 
|¡skd}	t|	ƒ‚| dd¡}| dd¡}| dd¡}t| dd¡ƒ}t| d||  ko’dkn  ¡ƒ}| d| j d¡¡}d}| d¡ }rÜt|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|||||||||||�p5d|�p9d||�p>d|¡}d}d}|  ¡ }|dk}za| g| D ]T}t|ddƒ} t| ƒD ]F}!|  |!¡ |}"|j!}#|j!d#v�r~|j"�rwd$nd%}#| #|#¡}"t|
ttfƒ�r‹|
| }n|
}| $|" d&|#¡||"j|#|¡ |d7 }|�s¤ n�q_�qSW |   |¡ n|   |¡ w | %¡ }$|$d u �rÄd'}	t&|	ƒ‚| '|$¡ d S )(NÚappend_imagesr   r:   r   ÚqualityéK   éd   zInvalid quality settingrV   Úsubsamplingz4:2:0Úspeedé   Úmax_threadsÚcodecr
   zInvalid saving codecÚrangeÚfullÚ	tile_rowsÚ	tile_colsÚalpha_premultipliedFÚ
autotilingr-   r/   ó    r.   zutf-8ÚadvancedTc                 s  s(   � | ]}t |tƒ pt|ƒd kV  qdS )é   N)Ú
isinstanceÚtupler'   )Ú.0Úvr   r   r   Ú	<genexpr>Í   s   €& z_save.<locals>.<genexpr>zcadvanced codec options must be a dict of key-value string pairs or a series of key-value two-tuples>   ÚRGBÚRGBArŽ   r�   rM   z1cannot write file as AVIF (encoder returned None))(ÚencoderinfoÚcopyÚlistr@   Úgetattrrˆ   r"   r3   r)   r	   Úencoder_codec_availableru   r=   r   r>   r?   r   rA   rB   ÚpoprC   r   ÚencodeÚdictÚitemsr‰   Ú	TypeErrorÚanyÚAvifEncoderrQ   re   r   rD   rR   Úhas_transparency_dataÚconvertÚaddÚfinishÚOSErrorÚwrite)%rm   r5   rp   rr   r=   rv   ÚtotalÚimsrw   rF   rV   rz   r{   r}   r~   Úrange_Útile_rows_log2Útile_cols_log2rƒ   r„   r-   rH   r/   rI   r.   r†   ÚinvalidÚencÚ	frame_idxÚframe_durationÚcur_idxÚis_single_frameÚnfrÚidxrL   Úrawmoder\   r   r   r   rs   ‘   sÖ   
$






ÿÿð



û	ÿ€à$
rs   z.avifz.avifsz
image/avif)r   r   r   r   )r   r   r   r   rf   )rm   rn   r5   ro   rp   rq   r   r,   )F)
rm   rn   r5   ro   rp   rq   rr   ru   r   r,   )Ú
__future__r   r&   Úior   Útypingr   Ú r   r   r   r	   r   ÚImportErrorr1   r$   r   r!   r)   r*   rt   rs   Úregister_openrj   Úregister_saveÚregister_save_allÚregister_extensionsÚregister_mimer   r   r   r   Ú<module>   s8    ÿ


	
Lÿ ü