o
    shh#                     @  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	   codec_versionssplit)r   versionsversion r   g/var/www/html/construction_image-detection-poc/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_threads9   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   _openG   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   p   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?   x   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*   B   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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}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 rd'}	t&|	|'|$ d S )(Nappend_imagesr   r:   r   qualityK   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 