o
    aĎi&                     @   s,  d dl mZ d dlmZ d dlZd dlmZmZmZ z
d dl	m
Z
 dZW n ey/   dZY nw dZdZd Zejd  d	kr@eZneZd
d ZG dd dejZdd ZdddZzd dlmZ W n	 eyi   Y nw 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 )    )division)BytesION)ExifTagsImage	ImageFile)_avifTFauto   c                 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)prefixmajor_brand r   W/home/jeff/fluffinator/venv/lib/python3.10/site-packages/pillow_avif/AvifImagePlugin.py_accept   s   r   c                       sH   e Zd ZdZdZdZdd Zdd Z fdd	Zd
d Z	dd Z
  ZS )AvifImageFileAVIFz
AVIF imagec                 C   sD  t sd}t|tdkrttsd}t|t| j tt	t
| _| j \}}| _}}}}}||f| _| jdk| _z| | _| _W n tyS   | | _| _Y nw |r[|| jd< |rb|| jd< |dksh|rt }	tdd tj D }
|r|	| |	|
d}nd}||kr||	|
< |	 }|r|| jd	< | d
 d S )NzAimage file could not be opened because AVIF support not installedr   zInvalid opening codec   icc_profilexmpc                 s        | ]\}}|d kr|V  qdS OrientationNr   .0kvr   r   r   	<genexpr>b       z&AvifImageFile._open.<locals>.<genexpr>exifr   )r   SyntaxErrorDECODE_CODEC_CHOICEr   decoder_codec_available
ValueErrorAvifDecoderfpreadCHROMA_UPSAMPLINGDEFAULT_MAX_THREADS_decoderget_infon_frames_sizeis_animatedmoderawmodeAttributeError_modeinfor   Exifnextr   TAGSitemsloadgettobytesseek)selfmsgwidthheightr1   iccr"   exif_orientationr   	exif_dataorientation_tagoriginal_orientationr   r   r   _open;   s^   




zAvifImageFile._openc                 C   sZ   |  |sd S || _ttdrtdd| j d| jg| _d S dd| j d| jfg| _d S )N_Tileraw)r   r   r   )_seek_check_AvifImageFile__framehasattrr   rH   sizer1   tile)r>   framer   r   r   r=   q   s   

 zAvifImageFile.seekc                    sv   | j r4| j| j\}}}}td||  | jd< td||  | jd< | jr/| jr/| j  t	|| _t
t|  S )Ni  	timestampduration)rN   r,   	get_framerK   roundr5   r(   _exclusive_fpcloser   superr   r:   )r>   data	timescalepts_in_timescalesduration_in_timescales	__class__r   r   r:   |   s   

zAvifImageFile.loadc                 C   s   d S Nr   )r>   posr   r   r   	load_seek   s   zAvifImageFile.load_seekc                 C   s   | j S r]   )rK   )r>   r   r   r   tell   s   zAvifImageFile.tell)__name__
__module____qualname__formatformat_descriptionrK   rG   r=   r:   r_   r`   __classcell__r   r   r[   r   r   6   s    6r   c                 C   s   t | ||dd d S )NT)save_all)_save)imr(   filenamer   r   r   	_save_all   s   rk   c           )      C   s^  | j  }|rt|dg }ng }d}| g| D ]
}|t|dd7 }q|dd}|dd}	|dd	}
t|
trC|
dk sC|
d
krId}t||dd}|dd}|dd}|dt}|dd}|dkrvt	
|svd}t||dd}|dd}|dd}t|dd}t|d||  kodkn  }|d| jd}|d| jd}t|tjr| }d}|rt }z|| W n	 ty   Y nw tdd tj D }||pd}|d | jd p| jd!}t|tr|d"}|d#}|d urKt|trt| }zt|}W n ty/   d$}Y n
w td%d |D }|rBd&}t|td'd( |D }t	| jd | jd |||	|
|||||||||ped)|pid)||pnd)|}d}d} |  }!|dk}"z| g| D ]}t|dd}#t|#D ]z}$| |$ |  |}%|j!}&|j!d*vrd+|j!v pd,|j!v p|j!d-kod+|j"# v p|j!d-ko|jd.d d u}'|'rd/nd0}&|$|&}%t|ttfr|| } n|} |%|%d1|&t| |%jd |%jd |&|" |d7 }|s nqqW |  |! n|  |! w |& }(|(d u r(d2}t'||(|( d S )3Nappend_imagesr   r.   r   qminr   qmaxqualityK   d   zInvalid quality settingrQ   subsamplingz4:2:0speed   max_threadscodecr   zInvalid saving codecrangefull	tile_rows	tile_colsalpha_premultipliedF
autotilingr   r"   c                 s   r   r   r   r   r   r   r   r       r!   z_save.<locals>.<genexpr>r   zXML:com.adobe.xmputf-8advancedTc                 s   s(    | ]}t |t pt|d kV  qdS )r	   N)
isinstancetuplelen)r   r   r   r   r   r       s   & zcadvanced codec options must be a dict of key-value string pairs or a series of key-value two-tuplesc                 S   s,   g | ]\}}t |d t |d fqS )r}   )strencoder   r   r   r   
<listcomp>   s   , z_save.<locals>.<listcomp>    >   RGBRGBAAaPtransparencyr   r   rI   z1cannot write file as AVIF (encoder returned None)))encoderinfocopylistr;   getattrr   intr&   r+   r   encoder_codec_availableboolr5   r   r6   r<   r:   r#   r7   r   r8   r9   	text_typer   dictr   	TypeErroranyAvifEncoderrM   r`   rw   r=   r1   ri   getpalettemodeconvertaddfinishOSErrorwrite))ri   r(   rj   rg   r5   rl   totalimsrm   rn   ro   r?   rQ   rr   rs   ru   rv   range_tile_rows_log2tile_cols_log2r{   r|   r   r"   rC   rD   rE   r   r~   invalidenc	frame_idxframe_durationcur_idxis_single_framenfridxrO   r2   alpharW   r   r   r   rh      s  
$ 



	



/
rh   )AvifImagePluginz.avifz.avifsz
image/avif)F)
__future__r   ior   sysPILr   r   r   pillow_avifr   r   ImportErrorr$   r*   r+   version_infounicoder   r   r   r   rk   rh   r   register_openrd   register_saveregister_save_allregister_extensionsregister_mimer   r   r   r   <module>   sB    _
 $