o
    ë6WjU$  ã                   @  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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Ú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   úb/home/esfera/Documents/content_generation/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|ƒ‚| 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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|
||||||||||�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 �r�d(}!nd)}!|  $|!¡} t|	ttfƒ�r•|	| }n|	}| %|  d*|!¡|| j|!|¡ |d7 }|�s® n�qf�q_W |  &|¡ n|  &|¡ w | '¡ }"|"d u �rÎd+}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>ÚqualityéK   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ÿ ü