
    \j                         d dl Z d dlmc 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 e j                  e j                    G d d                    Ze j$                  d	efd
       Z e       Zy)    N)Codec)	err_check)Packet)Stream)EAGAINc                       e Zd ZdZ	 	 d
deez  ez  dz  dedz  fdZd Ze	j                  ddedz  fd       Ze	j                  d	        Zy)BitStreamFilterContextaa  
    Initializes a bitstream filter: a way to directly modify packet data.

    Wraps :ffmpeg:`AVBSFContext`

    :param in_stream: Defines the input codec for the bitfilter. A :class:`.Stream`
        copies the full input codec parameters, while a :class:`.Codec` or a codec-name
        ``str`` only pins the input codec, which is all a codec-specific filter (such as
        ``h264_mp4toannexb``) needs to initialize.
    :type in_stream: :class:`.Stream`, :class:`.Codec`, str, or None
    :param Stream out_stream: A stream whose codec is overwritten using the output parameters from the bitfilter.
    N	in_stream
out_streamc                    |}t         j                  5  t        j                  |t        j                  | j
                              }d d d        t               t        |t              r{t         j                  5  t        j                  | j
                  j                  t        j                  t        |      j
                  j                        }d d d        t        |       n}|{t        |t              r|n
t        |      }|j
                  j                  | j
                  j                  _        |j
                  j                   | j
                  j                  _        t         j                  5  t        j$                  | j
                        }d d d        t        |       |t         j                  5  t        j                  |j
                  j                  | j
                  j&                        }d d d        t        |       t        j(                  |j*                  j
                  |j
                  j                         y y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   zxY wN)cythonnogillibav_bsf_list_parse_straddressptrr   
isinstancer   avcodec_parameters_copypar_incastcodecparr   idcodec_idtype
codec_typeav_bsf_initpar_outavcodec_parameters_to_contextcodec_context)selffilter_descriptionr
   r   
filter_strrescodecs          ?/root/.hermes/venv/lib/python3.12/site-packages/av/bitstream.py	__cinit__z BitStreamFilterContext.__cinit__   s    %7
\\ 	R++Jtxx8PQC	R#i( 11HHOOV[[%C%G%G%P%P cN" (	59	uY?O  (-yy||DHHOO$).DHHOO&\\ 	,//$((+C	,#! 11NN++TXX-=-= cN--((,,jnn.E.E "/	R 	R
 	, 	,
 s0   4I	:AI2 I#7?I/	II #I,/I8c                     | j                   r3t        j                  t        j                  | j                                y y r   )r   r   av_bsf_freer   r   r!   s    r&   __dealloc__z"BitStreamFilterContext.__dealloc__D   s'    88OOFNN48845     packetc                    t         j                  5  t        j                  | j                  ||j                  nt         j
                        }ddd       t               g }	 t               }t         j                  5  t        j                  | j                  |j                        }ddd       |t         k(  s|t        j                  k(  r|S t        |       |r|S |j                  |       # 1 sw Y   xY w# 1 sw Y   UxY w)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_packets        r&   filterzBitStreamFilterContext.filterH   s     \\ 	(((:&**C	 	#J J//*..IJ vg~!7cNMM*% 	 	J Js   =C1>+C=1C:=Dc                 B    t        j                  | j                         y)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*   s    r&   flushzBitStreamFilterContext.flushh   s     	"r,   )NNr   )__name__
__module____qualname____doc__r   r   strr'   r+   r   ccallr   r6   r9    r,   r&   r	   r	   
   s{      26$(	( E>C'$.( TM	(T6 \\&Vd] & &> \\# #r,   r	   returnc                      t               } t        j                  }	 t        j                  t        j
                  |            }|r| j                  |j                         n	 | S Jr   )setr   r0   r   av_bsf_iterater   addname)namesopaquer   s      r&   get_filter_namesrI   r   sN    E"KKF
  !78IIchhL r,   )r   cython.cimports.libavcimportslibavr   cython.cimports.av.codec.codecr   cython.cimports.av.errorr   cython.cimports.av.packetr   cython.cimports.av.streamr   cython.cimports.libc.errnor   finalcclassr	   cfuncrC   rI   bitstream_filters_availabler@   r,   r&   <module>rV      st     # # 0 . , , - c# c#  c#L #   /0 r,   