o
    2j                     @   s   d dl Z d dlm  mZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ e je jG dd dZe jdefd	d
Ze ZdS )    N)	err_check)Packet)Stream)EAGAINc                   @   s`   e Zd ZdZ		ddedB dedB fddZdd Zejdd	e	dB fd
dZ
ejdd ZdS )BitStreamFilterContexta:  
    Initializes a bitstream filter: a way to directly modify packet data.

    Wraps :ffmpeg:`AVBSFContext`

    :param Stream in_stream: A stream that defines the input codec for the bitfilter.
    :param Stream out_stream: A stream whose codec is overwritten using the output parameters from the bitfilter.
    N	in_stream
out_streamc                 C   s0  |}t j t|t | j}W d    n1 sw   Y  t| |d urHt j t| jj|jj	}W d    n1 s?w   Y  t| t j t
| j}W d    n1 s\w   Y  t| |d urt j t|jj	| jj}W d    n1 sw   Y  t| t|jj|jj	 d S d S N)cythonnogillibav_bsf_list_parse_straddressptrr   avcodec_parameters_copypar_incodecparav_bsf_initpar_outavcodec_parameters_to_contextcodec_context)selffilter_descriptionr   r   
filter_strres r   G/var/www/html/whisper/venv/lib/python3.10/site-packages/av/bitstream.py	__cinit__   s6   z BitStreamFilterContext.__cinit__c                 C   s    | j rtt| j  d S d S r	   )r   r   av_bsf_freer
   r   r   r   r   r   __dealloc__7   s   z"BitStreamFilterContext.__dealloc__packetc                 C   s   t j t| j|dur|jnt j}W d   n1 sw   Y  t| g }	 t }t j t| j|j}W d   n1 sBw   Y  |t	 ksQ|tj
krS|S t| |r[|S || q))z
        Processes a packet based on the filter_description set during initialization.
        Multiple packets may be created.

        :type: list[Packet]
        N)r
   r   r   av_bsf_send_packetr   NULLr   r   av_bsf_receive_packetr   AVERROR_EOFappend)r   r!   r   output
new_packetr   r   r   filter;   s&   
zBitStreamFilterContext.filterc                 C   s   t | j dS )z
        Reset the internal state of the filter.
        Should be called e.g. when seeking.
        Can be used to make the filter usable again after draining it with EOF marker packet.
        N)r   av_bsf_flushr   r   r   r   r   flush[   s   zBitStreamFilterContext.flush)NNr	   )__name__
__module____qualname____doc__r   r   r    r
   ccallr   r)   r+   r   r   r   r   r   	   s    
"r   returnc                  C   s8   t  } tj}	 tt|}|r| |j n	 | S qr	   )setr
   r#   r   av_bsf_iterater   addname)namesopaquer   r   r   r   get_filter_namese   s   r8   )r
   cython.cimports.libavcimportslibavr   cython.cimports.av.errorr   cython.cimports.av.packetr   cython.cimports.av.streamr   cython.cimports.libc.errnor   finalcclassr   cfuncr2   r8   bitstream_filters_availabler   r   r   r   <module>   s    Z
