
    d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 e j         G d d                      Ze j        defd	            Z e            ZdS )
    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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                 .   |}t           j        5  t          j        |t          j        | j                            }d d d            n# 1 swxY w Y   t          |           |\t           j        5  t          j        | j        j        |j        j	                  }d d d            n# 1 swxY w Y   t          |           t           j        5  t          j
        | j                  }d d d            n# 1 swxY w Y   t          |           |t           j        5  t          j        |j        j	        | j        j                  }d d d            n# 1 swxY w Y   t          |           t          j        |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ress         G/home/agentuser/manim-venv/lib/python3.11/site-packages/av/bitstream.py	__cinit__z BitStreamFilterContext.__cinit__   sq    %7
\ 	R 	R+Jtx8P8PQQC	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R#   1HOY]%;                cNNN\ 	, 	,/$(++C	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,#!  1N+TX-=                cNNN-(,jn.E     "!sG   -AAA0*B&&B*-B*C22C69C6*EEEc                 n    | j         r-t          j        t          j        | j                              d S d S r   )r   r   av_bsf_freer   r   r   s    r   __dealloc__z"BitStreamFilterContext.__dealloc__6   s8    8 	6OFN484455555	6 	6    packetc                    t           j        5  t          j        | j        ||j        nt           j                  }ddd           n# 1 swxY w Y   t          |           g }	 t                      }t           j        5  t          j        | j        |j                  }ddd           n# 1 swxY w Y   |t           k    s|t          j
        k    r|S t          |           |r|S |                    |           )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:   sx    \ 	 	((:&** C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	#	&J J J/*.IIJ J J J J J J J J J J J J J J vg~~!7!7cNNN MM*%%%	&s#   .AAA> B**B.1B.c                 8    t          j        | 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"   s    r   flushzBitStreamFilterContext.flushZ   s     	"""""r$   )NNr   )__name__
__module____qualname____doc__r   r   r#   r   ccallr   r.   r1    r$   r   r   r   	   s          $($(	    D=  TM	       D6 6 6 \& &Vd] & & & \&> \# # \# # #r$   r   returnc                      t                      } t          j        }	 t          j        t          j        |                    }|r|                     |j                   nnE| S r   )setr   r(   r   av_bsf_iterater   addname)namesopaquer   s      r   get_filter_namesr@   d   s_    E"KF !7!788 	IIch Lr$   )r   cython.cimports.libavcimportslibavr   cython.cimports.av.errorr   cython.cimports.av.packetr   cython.cimports.av.streamr   cython.cimports.libc.errnor   cclassr   cfuncr:   r@   bitstream_filters_availabler7   r$   r   <module>rK      s     # # # # # # # # # . . . . . . , , , , , , , , , , , , - - - - - - W# W# W# W# W# W# W# W#t #     /.00   r$   