
    Ej                         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 e j                  e j                   G d d                    Ze j                   defd	       Z e       Zy)
    N)	err_check)Packet)Stream)EAGAINc                       e Zd ZdZ	 	 d
de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)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                    |}t         j                  5  t        j                  |t        j                  | j
                              }d d d        t               |bt         j                  5  t        j                  | j
                  j                  |j
                  j                        }d d d        t        |       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   avcodec_parameters_copypar_incodecparav_bsf_initpar_outavcodec_parameters_to_contextcodec_context)selffilter_descriptionr	   r
   
filter_strress         B/var/www/html/qr/venv/lib/python3.12/site-packages/av/bitstream.py	__cinit__z BitStreamFilterContext.__cinit__   sX    %7
\\ 	R++Jtxx8PQC	R#  11HHOOY]]%;%; cN\\ 	,//$((+C	,#! 11NN++TXX-=-= cN--((,,jnn.E.E "	R 	R
 	, 	,
 s/   4F%,?F2 F??G%F/2F<?GGc                     | j                   r3t        j                  t        j                  | j                                y y r   )r   r   av_bsf_freer   r   r   s    r   __dealloc__z"BitStreamFilterContext.__dealloc__7   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.filter;   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.flush[   s     	"r$   )NNr   )__name__
__module____qualname____doc__r   r   r#   r   ccallr   r.   r1    r$   r   r   r   	   sq     $($(	  D=  TM	 D6 \\&Vd] & &> \\# #r$   r   returnc                      t               } t        j                  }	 t        j                  t        j
                  |            }|r| j                  |j                         n	 | S Jr   )setr   r(   r   av_bsf_iterater   addname)namesopaquer   s      r   get_filter_namesr@   e   sN    E"KKF
  !78IIchhL r$   )r   cython.cimports.libavcimportslibavr   cython.cimports.av.errorr   cython.cimports.av.packetr   cython.cimports.av.streamr   cython.cimports.libc.errnor   finalcclassr   cfuncr:   r@   bitstream_filters_availabler7   r$   r   <module>rL      sq     # # . , , - W# W#  W#t #   /0 r$   