a
    h"#                     @  s6  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yj   d	ZY n0 d
Zd ZdddddZdddddZddddZG dd de
j
Zdddddd d!Zd)dddd"dd#d$d%Ze	ejee er2e	eje e	eje e	ejd&d'g e	ejd( dS )*    )annotationsN)BytesIO)IO   )ExifTagsImage	ImageFile)_avifTFautostrz
str | None)
codec_namereturnc                 C  sJ   t  }|dD ]2}|dd | kr|dd dd   S qd S )Nz, z [r   : )r	   Zcodec_versionssplit)r   versionsversion r   A/var/www/auris/lib/python3.9/site-packages/PIL/AvifImagePlugin.pyget_codec_version   s
    r   bytesz
bool | str)prefixr   c                 C  s8   | dd dkrdS | dd }|dv r4t s0d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   intr   c                   C  s0   t rt S ttdr ttdS t p*dS d S )Nsched_getaffinityr   r   )DEFAULT_MAX_THREADShasattroslenr    	cpu_countr   r   r   r   _get_default_max_threads8   s
    
r&   c                      sj   e Zd ZdZdZdZddddZddd	d
dZdd fddZdddddZ	ddddZ
  ZS )AvifImageFileZAVIFz
AVIF imager   Noner   c                 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< |r|| jd< |dks|rt }|r|| |tjjd}nd}||kr||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
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._openr   )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>   rC   r   r   r   r=   o   s    
zAvifImageFile.seekzImage.core.PixelAccess | Nonec                   sr   | j rh| j| j\}}}}td||  | jd< td||  | jd< | jr^| jr^| j  t	|| _t
  S )Ni  	timestampduration)rH   r1   Z	get_framerE   roundr6   r/   Z_exclusive_fpcloser   superr8   )r>   dataZ	timescaleZpts_in_timescalesZduration_in_timescales	__class__r   r   r8   w   s    


zAvifImageFile.load)posr   c                 C  s   d S Nr   )r>   rQ   r   r   r   	load_seek   s    zAvifImageFile.load_seekc                 C  s   | j S rR   )rE   )r>   r   r   r   tell   s    zAvifImageFile.tell)__name__
__module____qualname__formatformat_descriptionrE   rB   r=   r8   rS   rT   __classcell__r   r   rO   r   r'   A   s   )r'   zImage.Imagez	IO[bytes]zstr | bytesr(   )imr/   filenamer   c                 C  s   t | ||dd d S )NT)save_all)_save)r[   r/   r\   r   r   r   	_save_all   s    r_   bool)r[   r/   r\   r]   r   c           %      C  s  | j  }|r t|dg }ng }d}| g| D ]}|t|dd7 }q2|dd}t|trn|dk sn|dkrzd}	t|	|d	d}
|d
d}|dd}|dt }|dd}|dkrt	
|sd}	t|	|dd}|dd}|dd}t|dd}t|d||  ko&dkn  }|d| jd}d}|d }rt|tjrl|}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rVt|tr| }zt|}W n ty0   d}Y n0 td d! |D }|rVd"}	t|	t	| j|||||||||||pzd|pd||pd|}d}d}|  }|dk}z| g| D ]}t|dd} t| D ]}!| |! |}"|j!}#|j!d#vr|j"rd$nd%}#|#|#}"t|
ttfr&|
| }n|
}|$|"d&|#||"j|#| |d7 }|s qqΐqW |  | n|  | 0 |% }$|$d u rd'}	t&|	|'|$ d S )(Nappend_imagesr   r4   r   qualityK   d   zInvalid quality settingrJ   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>   rn   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RGBrv   rw   rD   z1cannot write file as AVIF (encoder returned None))(Zencoderinfocopylistr9   getattrrq   r   r.   r&   r	   Zencoder_codec_availabler`   r6   r   r7   r8   r   r:   r;   popr<   r   encodedictitemsrr   	TypeErroranyZAvifEncoderrF   rT   rj   r=   rG   Zhas_transparency_dataconvertaddfinishOSErrorwrite)%r[   r/   r\   r]   r6   ra   totalZimsrb   r?   rJ   re   rf   rh   ri   Zrange_Ztile_rows_log2Ztile_cols_log2rl   rm   r)   r@   r+   rA   r*   ro   invalidencZ	frame_idxZframe_durationZcur_idxZis_single_frameZnfridxrC   rawmoderN   r   r   r   r^      s    
&









	
r^   z.avifz.avifsz
image/avif)F)
__future__r   r#   ior   typingr    r   r   r   r	   r   ImportErrorr-   r!   r   r   r&   r'   r_   r^   Zregister_openrX   Zregister_saveZregister_save_allZregister_extensionsZregister_mimer   r   r   r   <module>   s2   
	L  