o
    dia
                     @   s   d dl Z d dlmZmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZ ddlmZ ddlmZ d	d
lmZmZ dZdZdZe d	dZe d	dZG dd deZG dd deZdS )    N)Optionalcast)AudioCodecContext
AudioFrameAudioResamplerCodecContext)Frame)Packet   )JitterFrame)convert_timebase   )DecoderEncoderi>  i@  i@  c                   @   s,   e Zd ZdddZdedee fddZdS )	G722DecoderreturnNc                 C   s0   t ttdd| _d| j_d| j_t| j_d S )Ng722rs16mono)	r   r   r   createcodecformatlayoutSAMPLE_RATEsample_rateself r   F/home/ubuntu/.local/lib/python3.10/site-packages/aiortc/codecs/g722.py__init__   s   zG722Decoder.__init__encoded_framec                 C   s2   t |j}|jd |_t|_ttt | j	
|S )Nr
   )r	   data	timestamppts	TIME_BASE	time_baser   listr   r   decode)r   r!   packetr   r   r   r(      s   
zG722Decoder.decoder   N)__name__
__module____qualname__r    r   r'   r   r(   r   r   r   r   r      s    
r   c                	   @   sZ   e Zd ZdddZ	ddededeee e	f fdd	Z
d
edeee e	f fddZdS )G722Encoderr   Nc                 C   sP   t ttdd| _d| j_d| j_t| j_t	| j_
d | _tddttd| _d S )Nr   wr   r   )r   r   rate
frame_size)r   r   r   r   r   r   r   r   r   r%   r&   	first_ptsr   SAMPLES_PER_FRAME	resamplerr   r   r   r   r    %   s   zG722Encoder.__init__Fframeforce_keyframec                 C   s   t |tsJ |jjdksJ |jjdv sJ g }| j|D ]
}|| j|7 }q|rJ| j	d u r7|d j
| _	|d j
| j	 d }dd |D |fS g d fS )Nr   )r   stereor   r
   c                 S   s   g | ]}t |qS r   )bytes).0pr   r   r   
<listcomp>F   s    z&G722Encoder.encode.<locals>.<listcomp>)
isinstancer   r   namer   r4   resampler   encoder2   r$   )r   r5   r6   packetsr#   r   r   r   r?   5   s   
zG722Encoder.encoder)   c                 C   s   t |j|jt}t|g|fS )N)r   r$   r&   
CLOCK_BASEr8   )r   r)   r#   r   r   r   packK   s   zG722Encoder.packr*   )F)r+   r,   r-   r    r   booltupler'   r8   intr?   r	   rB   r   r   r   r   r.   $   s    

"r.   )	fractionstypingr   r   avr   r   r   r   av.framer   	av.packetr	   jitterbufferr   mediastreamsr   baser   r   r   SAMPLE_WIDTHr3   Fractionr%   rA   r   r.   r   r   r   r   <module>   s    