Ë
    ÖÉ�j)  ã                   óT   — d dl mZ ddlmZ ddlmZ dZ G d„ d«      Z G d„ d	«      Zy
)é    )ÚOptionalé   )Ú	RtpPacket)Ú
uint16_addéd   c                   ó    — e Zd Zdededdfd„Zy)ÚJitterFrameÚdataÚ	timestampÚreturnNc                 ó    — || _         || _        y ©N©r
   r   )Úselfr
   r   s      úT/home/uftp/webrtc-recorder/.venv/lib/python3.12/site-packages/aiortc/jitterbuffer.pyÚ__init__zJitterFrame.__init__
   s   € ØˆŒ	Ø"ˆ�ó    )Ú__name__Ú
__module__Ú__qualname__ÚbytesÚintr   © r   r   r	   r	   	   s   „ ð#˜Uð #¨sð #°tô #r   r	   c            	       ó”   — e Zd Z	 ddedededdfd„Zedefd„«       Zdede	ee
e   f   fd	„Zd
ede
e   fd„Zdeddfd„Zdedefd„Zy)ÚJitterBufferÚcapacityÚprefetchÚis_videor   Nc                 ó¦   — ||dz
  z  dk(  sJ d«       ‚|| _         d | _        t        |«      D �cg c]  }d ‘Œ c}| _        || _        || _        y c c}w )Nr   r   zcapacity must be a power of 2)Ú	_capacityÚ_originÚrangeÚ_packetsÚ	_prefetchÚ	_is_video)r   r   r   r   Úis        r   r   zJitterBuffer.__init__   sY   € ð ˜8 a™<Ñ(¨AÒ-ÐNÐ/NÓNÐ-Ø!ˆŒØ&*ˆŒÜBGÈÃ/Ö3R¸Q²DÒ3RˆŒØ!ˆŒØ!ˆ�ùò 4Ss   ®	Ac                 ó   — | j                   S r   )r    )r   s    r   r   zJitterBuffer.capacity   s   € à�~‰~Ðr   Úpacketc                 óœ  — d}| j                   €|j                  | _         d}d}nBt        |j                  | j                    «      }t        | j                   |j                   «      }||k  rL|t        k\  r?| j	                  | j
                  «       |j                  | _         dx}}| j                  rd}n|d fS || j
                  k\  rB|| j
                  z
  dz   }| j                  |«      r|j                  | _         | j                  rd}|j                  | j                  z  }|| j                  |<   || j                  |j                  «      fS )NFr   Tr   )r!   Úsequence_numberr   ÚMAX_MISORDERÚremover   r%   Úsmart_remover    r#   Ú_remove_frame)r   r(   Úpli_flagÚdeltaÚmisorderÚexcessÚposs          r   ÚaddzJitterBuffer.add   s*  € ØˆØ�<‰<ÐØ!×1Ñ1ˆDŒLØˆEØ‰Hä˜v×5Ñ5¸¿¹°}ÓEˆEÜ! $§,¡,°×1GÑ1GÐ0GÓHˆHà�eÒØœ<Ò'Ø—‘˜DŸM™MÔ*Ø%×5Ñ5�”Ø#$Ð$�˜Ø—>’>Ø#‘Hà �~Ð%à�D—M‘MÒ!à˜TŸ]™]Ñ*¨QÑ.ˆFØ× Ñ  Ô(Ø%×5Ñ5�”Ø�~Š~Ø�à×$Ñ$ t§~¡~Ñ5ˆØ#ˆ�‰�cÑà˜×+Ñ+¨F×,BÑ,BÓCÐCÐCr   r*   c           	      óð  — d }d}g }d}d }t        | j                  «      D ]Ï  }| j                  |z   | j                  z  }| j                  |   }	|	€ y |€|	j
                  }n~|	j
                  |k7  ro|€6t        dj                  |D �
cg c]  }
|
j                  ‘Œ c}
«      |¬«      }|}|dz  }|| j                  k\  r| j                  |«       |c S g }|	j
                  }|j                  |	«       ŒÑ y c c}
w )Nr   r   r   r   )r"   r   r!   r    r#   r   r	   ÚjoinÚ_datar$   r,   Úappend)r   r*   ÚframeÚframesÚpacketsr,   r   Úcountr3   r(   Úxs              r   r.   zJitterBuffer._remove_frame?   s  € ØˆØˆØ#%ˆØˆØˆ	ä˜4Ÿ=™=Ó)ò 	#ˆEØ—<‘< %Ñ'¨4¯>©>Ñ9ˆCØ—]‘] 3Ñ'ˆFØˆ~Øð0 ð/ Ð Ø"×,Ñ,‘	Ø×!Ñ! YÒ.à�=Ü'Ø ŸX™X¸Ö&@°1 q§w£wÒ&@ÓAØ"+ô�Eð #�Fð ˜!‘�Ø˜TŸ^™^Ò+Ø—K‘K Ô'Ø ’Lð �Ø"×,Ñ,�	à�N‰N˜6Õ"ð5	#ð8 ùò# 'As   ÂC3r<   c                 óÌ   — || j                   k  sJ ‚t        |«      D ]E  }| j                  | j                   z  }d | j                  |<   t	        | j                  d«      | _        ŒG y )Nr   )r    r"   r!   r#   r   )r   r<   r&   r3   s       r   r,   zJitterBuffer.removed   sY   € Ø˜Ÿ™Ò&Ð&Ð&Ü�u“ò 	7ˆAØ—,‘, §¡Ñ/ˆCØ!%ˆD�M‰M˜#ÑÜ% d§l¡l°AÓ6ˆD�Lñ	7r   c                 óP  — d}t        | j                  «      D ]Œ  }| j                  | j                  z  }| j                  |   }|�"||k\  r||j                  k7  r y|j                  }d| j                  |<   t        | j                  d«      | _        || j                  dz
  k(  sŒŒ y y)z’
        Makes sure that all packages belonging to the same frame are removed
        to prevent sending corrupted frames to the decoder.
        Nr   TF)r"   r    r!   r#   r   r   )r   r<   r   r&   r3   r(   s         r   r-   zJitterBuffer.smart_removek   s©   € ð
 ˆ	Ü�t—~‘~Ó&ò 
	ˆAØ—,‘, §¡Ñ/ˆCØ—]‘] 3Ñ'ˆFØÐ!Ø˜’: )¨v×/?Ñ/?Ò"?Øð ð #×,Ñ,�	Ø!%ˆD�M‰M˜#ÑÜ% d§l¡l°AÓ6ˆDŒLØ�D—N‘N QÑ&Ó&Ùð
	ð r   )r   F)r   r   r   r   Úboolr   Úpropertyr   r   Útupler   r	   r4   r.   r,   r-   r   r   r   r   r      sª   „ àAFñ"Øð"Ø'*ð"Ø:>ð"à	ó"ð ð˜#ò ó ððD˜)ð D¨¨d°H¸[Ñ4IÐ.IÑ(Jó DðB#¨Sð #°X¸kÑ5Jó #ðJ7˜Cð 7 Dó 7ð #ð ¨$ô r   r   N)	Útypingr   Úrtpr   Úutilsr   r+   r	   r   r   r   r   ú<module>rF      s)   ðÝ å Ý à€÷#ñ #÷mò mr   