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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)_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   Y/home/www/facesmatcher.com/frenv_anti/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   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|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	   Zdecoder_codec_available
ValueErrorZAvifDecoderfp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   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   )Z_seek_check_AvifImageFile__framer   Z_Tilesizemodetile)r?   rD   r   r   r   r>   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)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   w   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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|||||||||||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 qq_qSW |  | n|  | w |% }$|$d u rd'}	t&|	|'|$ d S )(Nappend_imagesr   r5   r   qualityK   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    


	
L 