a
    d                     @   st   d dl Z dd Zdd Zdd Zdd	 Zd
d Zdd Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )    Nc                 C   s   | dd dks | dd dkr(t d| dd }td|d }d}|| }d}|}d}d}g }	|| | |k r| |||  }
||7 }| |||  }td|d }||7 }| |||  }|	|
||d	 |d
 rdnd}||| 7 }qd|	S )Nr         RIFF         WEBPNot WebP<Lfourcclength_bytesdata      )
ValueErrorstructunpackappend)r   webp_length_byteswebp_lengthRIFF_HEADER_SIZE	file_sizestartpointerCHUNK_FOURCC_LENGTHLENGTH_BYTES_LENGTHchunksr
   chunk_length_byteschunk_length
chunk_datapadding r    U/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/piexif/_webp.pysplit   s,     r"   c                 C   s   d dd | D }|S )N    c                 S   s8   g | ]0}|d  |d  |d  t |d d d  qS )r
   r   r   r       )len).0chunkr    r    r!   
<listcomp>$   s   z merge_chunks.<locals>.<listcomp>)join)r   mergedr    r    r!   merge_chunks#   s    
r+   c                 C   s`   | d dd d }t d|d }|d }| d dd  d }t d|d }|d }||fS )Nr   ir$   r   r   r   r   r   r'   Zwidth_minus_one_byteswidth_minus_onewidthZheight_minus_one_bytesheight_minus_oneheightr    r    r!   _get_size_from_vp8x,   s    r3   c           
      C   s   d}| d  |}|dkr$td nlt|}d}|| }| d |||  }td|d }| d || |d|   }td|d }	||	fS d S )Ns   *r   z	wrong VP8r   z<Hr   )findr   r%   r   r   )
r'   Z
BEGIN_CODEZbegin_indexZBEGIN_CODE_LENGTHr   Zlength_startwidth_bytesr0   height_bytesr2   r    r    r!   _get_size_from_vp85   s    
r8   c                 C   s(   t | dd d? t d@ }d| }|S )Nr         r   ord)r   flagcontainsr    r    r!   _vp8L_contains_alphaD   s    r?   c           	      C   s   | d dd }| d dd }| d dd }| d dd }t |t d@ d> t |B }|d }t |t d	@ d
> t |d> B t |t d@ d? B }|d }||fS )Nr   r   r      r   r9      ?r      
         r;   )	r'   b1b2Zb3Zb4r/   r0   r1   r2   r    r    r!   _get_size_from_vp8LI   s    4rH   c                 C   s`   | d dd d }t d|d }|d }| d dd d }t d|d }|d }||fS )	Nr   rE   	   r$   r   r   r   r   r-   r.   r    r    r!   _get_size_from_anmfW   s    rJ   c                 C   s  d }d }g d}| D ]}|d dkr2t |\}}q|d dkrLt|\}}q|d dkr~t|d }|rpd|d< t|\}}q|d d	krt|\}}q|d d
krd|d< q|d dkrd|d< q|d dkrd|d< q|d dkrd|d< q|d dkrd|d< q|d }|d }| d d dkr2| d d}d}	tdtd	|d}
d}td|d d }td|d d }|
| | | }||	|d}| 
d| | S )N)   0rK   rK   rK   rK   rK   rK   rK   r
      VP8Xs   VP8 s   VP8Lr      1r@   s   ANMFs   ICCPr   s   ALPH   EXIFr      XMP r9      ANIMrE   r   r   s   
   Br#   s      r   r	   )r3   r8   r?   rH   rJ   popr   packintr)   insert)r   r0   r2   flagsr'   Zis_rgbar/   r1   header_bytesr   Zflags_bytesZpadding_bytesr6   r7   Z
data_bytesZ
vp8x_chunkr    r    r!   set_vp8x`   sN    





rX   c                 C   sv   d}d}d}|}| D ]<}t d|d d }||d r:dnd7 }||| | 7 }qt d|}d}d}	|| |	 }
|
S )	Nr   r   r   r   r   r   r   r   )r   r   rS   )r   ZWEBP_HEADER_LENGTHZFOURCC_LENGTHr   lengthr'   Zdata_lengthr   ZriffZwebp_headerfile_headerr    r    r!   get_file_header   s    r[   c                 C   s   | dd dks | dd dkr(t d| dd d	kr@t d
| dd }td|d }d}|| }d}|}d}d}g }	d}
||k r| |||  }||7 }| |||  }td|d }|d r|d7 }||7 }|dkr| |||  S ||7 }qd S )Nr   r   r   r   r   r   r      rL   zdoesnot have exifr   r#   r   r   rN   )r   r   r   )r   r   r   r   r   r   r   r   r   r   Zexifr
   r   r   r    r    r!   get_exif   s4     
r]   c           	      C   s   d}t dt|}|||d}d }d }t| D ]\}}|d dkr0| | q0t| D ]*\}}|d dkrr|}qX|d dkrX|}qX|d ur| || n |d ur| || n
| | | S )NrN   r   r	   r
   rO   rP   )r   rS   r%   	enumeraterR   rU   r   )	r   
exif_bytesZEXIF_HEADERZexif_length_bytesZ
exif_chunkZ	xmp_indexZanimation_indexindexr'   r    r    r!   insert_exif_into_chunks   s&    
ra   c                 C   s6   t | }t||}t|}t|}t|}|| }|S )N)r"   ra   rX   r[   r+   )
webp_bytesr_   r   rZ   r*   new_webp_bytesr    r    r!   rU      s    
rU   c                 C   sT   t | }t|D ]\}}|d dkr|| qt|}t|}t|}|| }|S )Nr
   rN   )r"   r^   rR   rX   r[   r+   )rb   r   r`   r'   rZ   r*   rc   r    r    r!   remove   s    rd   )r   r"   r+   r3   r8   r?   rH   rJ   rX   r[   r]   ra   rU   rd   r    r    r    r!   <module>   s   			0!
