o
    di*
                     @   s   d dl Z d dlmZmZ d dl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e d	eZG dd deZG dd deZdS )    N)Optionalcast)
AudioFrameAudioResamplerCodecContext)Frame)Packet   )JitterFrame)convert_timebase   )DecoderEncoderi  i  c                   @   s,   e Zd ZdddZdedee fddZdS )	OpusDecoderreturnNc                 C   s*   t dd| _d| j_d| j_t| j_d S )Nlibopusrs16stereo)r   createcodecformatlayoutSAMPLE_RATEsample_rateself r   F/home/ubuntu/.local/lib/python3.10/site-packages/aiortc/codecs/opus.py__init__   s   zOpusDecoder.__init__encoded_framec                 C   s.   t |j}|j|_t|_ttt | j	
|S N)r   data	timestamppts	TIME_BASE	time_baser   listr   r   decode)r   r    packetr   r   r   r(      s   
zOpusDecoder.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 )OpusEncoderr   Nc                 C   s^   t dd| _d| j_d| j_d| j_ddi| j_t| j_t	| j_
tddttd| _d | _d S )	Nr   wi w r   r   applicationvoip)r   r   rate
frame_size)r   r   r   bit_rater   r   optionsr   r   r%   r&   r   SAMPLES_PER_FRAME	resamplerfirst_packet_ptsr   r   r   r   r       s   
zOpusEncoder.__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| j	d u r7|r7|d j
| _	|rHdd |D |d j
| j	 fS g d fS )Nr   )monor   r   c                 S   s   g | ]}t |qS r   )bytes).0pr   r   r   
<listcomp>F   s    z&OpusEncoder.encode.<locals>.<listcomp>)
isinstancer   r   namer   r7   resampler   encoder8   r$   )r   r9   r:   packetsr   r   r   rC   3   s   zOpusEncoder.encoder)   c                 C   s   t |j|jt}t|g|fS r!   )r   r$   r&   r%   r<   )r   r)   r#   r   r   r   packK   s   zOpusEncoder.packr*   )F)r+   r,   r-   r   r   booltupler'   r<   intrC   r   rE   r   r   r   r   r.      s    

"r.   )	fractionstypingr   r   avr   r   r   av.framer   	av.packetr   jitterbufferr
   mediastreamsr   baser   r   r   r6   Fractionr%   r   r.   r   r   r   r   <module>   s    