o
    õ·ik$  ã                   @  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	   Zcodec_versionsÚsplit)r   ÚversionsÚversion© r   úYC:\Users\psant\Downloads\PAF backend\school\venv\Lib\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   Z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 )ÚAvifImageFileZ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	   Zdecoder_codec_availableÚ
ValueErrorÚfpZAvifDecoderÚreadr'   Ú_decoderÚget_infoÚ_sizeÚn_framesÚ_modeZis_animatedÚinfor   ÚExifÚloadÚgetr   ÚBaseÚOrientationÚtobytesÚseek)ÚselfÚmsgZiccr,   Úexif_orientationr+   Ú	exif_dataZ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   )Z_seek_checkÚ_AvifImageFile__framer   Z_TileÚsizeÚmodeÚtile)r?   rD   r   r   r   r>   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)rI   r2   Z	get_framerF   Úroundr7   r0   Z_exclusive_fpÚcloser   Úsuperr9   )r?   ÚdataZ	timescaleZpts_in_timescalesZduration_in_timescales©Ú	__class__r   r   r9   y   s   
ÿ


zAvifImageFile.loadÚposc                 C  s   d S ©Nr   )r?   rS   r   r   r   Ú	load_seekˆ   s   zAvifImageFile.load_seekc                 C  s   | j S rT   )rF   )r?   r   r   r   Útell‹   s   zAvifImageFile.tell)r   r)   )rD   r    r   r)   )r   rJ   )rS   r    r   r)   ©r   r    )Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrF   rC   r>   r9   rU   rV   Ú__classcell__r   r   rQ   r   r(   A   s    

+
r(   ÚimúImage.Imager0   ú	IO[bytes]Úfilenameústr | bytesr)   c                 C  s   t | ||dd� d S )NT)Úsave_all)Ú_save)r^   r0   ra   r   r   r   Ú	_save_all�   s   re   rc   Ú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}zb| g| D ]U}t|ddƒ} t| ƒD ]G}!|  |!¡ |}"|j!}#|j!d#v�r~|j"�rwd$nd%}#| #|#¡}"t|
ttfƒ�r‹|
| }n|
}| $|" d&|#¡||"j|#|¡ |d7 }|�s¥ �qS�q_�qSW |   |¡ n|   |¡ w | %¡ }$|$d u �rÅd'}	t&|	ƒ‚| '|$¡ d S )(NÚappend_imagesr   r5   r   ÚqualityéK   éd   zInvalid quality settingrL   Úsubsamplingz4:2:0Úspeedé   Úmax_threadsÚcodecr
   zInvalid saving codecÚrangeÚfullZ	tile_rowsZ	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>   ÚRGBAÚRGBr|   r}   rE   z1cannot write file as AVIF (encoder returned None))(ZencoderinfoÚcopyÚlistr:   Úgetattrrw   r    r/   r'   r	   Zencoder_codec_availablerf   r7   r   r8   r9   r   r;   r<   Úpopr=   r   ÚencodeÚdictÚitemsrx   Ú	TypeErrorÚanyZAvifEncoderrG   rV   rp   r>   rH   Zhas_transparency_dataÚconvertÚaddÚfinishÚOSErrorÚwrite)%r^   r0   ra   rc   r7   rg   ÚtotalZimsrh   r@   rL   rk   rl   rn   ro   Zrange_Ztile_rows_log2Ztile_cols_log2rr   rs   r*   rA   r,   rB   r+   ru   ÚinvalidÚencZ	frame_idxZframe_durationZcur_idxZis_single_frameZnfrÚidxrD   ÚrawmoderP   r   r   r   rd   “   sÖ   
$






ÿÿð



û	ÿäü$
rd   z.avifz.avifsz
image/avif)r   r   r   r   )r   r   r   r   rW   )r^   r_   r0   r`   ra   rb   r   r)   )F)
r^   r_   r0   r`   ra   rb   rc   rf   r   r)   )Ú
__future__r   r$   Úior   Útypingr   Ú r   r   r   r	   r   ÚImportErrorr.   r"   r   r   r'   r(   re   rd   Zregister_openr[   Zregister_saveZregister_save_allZregister_extensionsZregister_mimer   r   r   r   Ú<module>   s8    ÿ


	
Nÿ ü