
    dj              
       :   d dl mZ d dlZd dlmc mZ d dlmZ ej	        de
dej        fd            Zej	         ej        d          d	ej        ej                 d
ej        dedz  dej        fd                        Zej         G d d                      ZdS )    )IteratorN)Streamtypereturnc                     | dk    rt           j        S | dk    rt           j        S | dk    rt           j        S | dk    rt           j        S | dk    rt           j        S t          d|            )Nvideoaudiosubtitle
attachmentdatazInvalid stream type: )libAVMEDIA_TYPE_VIDEOAVMEDIA_TYPE_AUDIOAVMEDIA_TYPE_SUBTITLEAVMEDIA_TYPE_ATTACHMENTAVMEDIA_TYPE_DATA
ValueErrorr   s    O/home/agentuser/manim-venv/lib/python3.11/site-packages/av/container/streams.py_get_media_type_enumr      sw    w%%	%%			((			**	$$777888    F)checkfmtctxenumtyperelatedc                     |$t          j        | |ddt          j        d          }n-t          j        | |d|j        j        t          j        d          }|S )Nr   )r   av_find_best_streamcythonNULLptrindex)r   r   r   stream_indexs       r   _get_best_stream_indexr$      sV     .vxRVWXX.Hb'+"3V[!
 
 r   c                      e Zd ZdZd Zej        dedej        fd            Z	d Z
d Zd Zed	             Zed
             Zed             Zed             Zed             Zdee         fdZd Zddedz  defdZdS )StreamContainerz

    A tuple-like container of :class:`Stream`.

    ::

        # There are a few ways to pulling out streams.
        first = container.streams[0]
        video = container.streams.video[0]
        audio = container.streams.get(audio=(0, 1))


    c                     g | _         d S N)_streamsselfs    r   	__cinit__zStreamContainer.__cinit__;   s    r   streamr   c                     |j         j        t          | j                  k    sJ | j                            |           d S r(   )r!   r"   lenr)   append)r+   r-   s     r   
add_streamzStreamContainer.add_stream>   s>    z3t}#5#55555V$$$$$r   c                 *    t          | j                  S r(   )r/   r)   r*   s    r   __len__zStreamContainer.__len__D   s    4=!!!r   c                 *    t          | j                  S r(   )iterr)   r*   s    r   __iter__zStreamContainer.__iter__G   s    DM"""r   c                     t          |t                    r|                     |          d         S |                     |          S )Nr   )
isinstanceintget)r+   r"   s     r   __getitem__zStreamContainer.__getitem__J   s9    eS!! 	#88E??1%%88E??"r   c                 >    t          d | j        D                       S )Nc              3   0   K   | ]}|j         d k    |V  dS )r   Nr   .0ss     r   	<genexpr>z(StreamContainer.video.<locals>.<genexpr>R   .      CC171B1BQ1B1B1B1BCCr   tupler)   r*   s    r   r   zStreamContainer.videoP   !    CCCCCCCCr   c                 >    t          d | j        D                       S )Nc              3   0   K   | ]}|j         d k    |V  dS )r	   Nr   r>   s     r   rA   z(StreamContainer.audio.<locals>.<genexpr>V   rB   r   rC   r*   s    r   r	   zStreamContainer.audioT   rE   r   c                 >    t          d | j        D                       S )Nc              3   0   K   | ]}|j         d k    |V  dS )r
   Nr   r>   s     r   rA   z,StreamContainer.subtitles.<locals>.<genexpr>Z   s.      FF1:1E1EQ1E1E1E1EFFr   rC   r*   s    r   	subtitleszStreamContainer.subtitlesX   s!    FFFFFFFFr   c                 >    t          d | j        D                       S )Nc              3   0   K   | ]}|j         d k    |V  dS )r   Nr   r>   s     r   rA   z'StreamContainer.data.<locals>.<genexpr>^   s.      BB161A1AQ1A1A1A1ABBr   rC   r*   s    r   r   zStreamContainer.data\   s!    BBBBBBBBr   c                 >    t          d | j        D                       S )Nc              3   0   K   | ]}|j         d k    |V  dS )r   Nr   r>   s     r   rA   z.StreamContainer.attachments.<locals>.<genexpr>b   s.      HH1<1G1GQ1G1G1G1GHHr   rC   r*   s    r   attachmentszStreamContainer.attachments`   s!    HHHHHHHHr   c              #   >  K   |d S t          |t                    r|V  d S t          |t                    r| j        |         V  d S t          |t          t
          f          r"|D ]}|                     |          E d {V  d S t          |t                    rg|                                D ]P\  }}|dk    r| j        nt          | |          }t          |t          t
          f          s|g}|D ]}||         V  Qd S t          dt          |                    )NstreamszArgument must be Stream or int.)r8   r   r9   r)   rD   list_get_streamsdictitemsgetattr	TypeErrorr   )r+   xitemtype_indicesrQ   is          r   rS   zStreamContainer._get_streamsd   sj     9D6"" 	HGGGGG3 	H-""""""E4=)) 	H 3 3,,T22222222223 34   		H"#'')) % %w+0I+=+=$--74QVCWCW!'E4=99 (&iG  % %A!!*$$$$%% % =tAwwGGGr   c                     t          |                     |                    }|r(|                    |                     |                     |p| j        dd         S )a+  get(streams=None, video=None, audio=None, subtitles=None, data=None)

        Get a selection of :class:`.Stream` as a ``list``.

        Positional arguments may be ``int`` (which is an index into the streams),
        or ``list`` or ``tuple`` of those::

            # Get the first channel.
            streams.get(0)

            # Get the first two audio channels.
            streams.get(audio=(0, 1))

        Keyword arguments (or dicts as positional arguments) as interpreted
        as ``(stream_type, index_value_or_set)`` pairs::

            # Get the first video channel.
            streams.get(video=0)
            # or
            streams.get({'video': 0})

        :class:`.Stream` objects are passed through untouched.

        If nothing is selected, then all streams are returned.

        N)rR   rS   extendr)   )r+   argskwargs	selections       r   r:   zStreamContainer.gety   s_    6 **40011	 	8T..v66777,DM!!!,,r   Nr   r   c                    t          | j                  dk    rdS t          j        t          | j        d                   }|j        j        }t          |t          |          |          }|dk     rdS | j        |         S )a  best(type: Literal["video", "audio", "subtitle", "attachment", "data"], /, related: Stream | None)
        Finds the "best" stream in the file. Wraps :ffmpeg:`av_find_best_stream`. Example::

            stream = container.streams.best("video")

        :param type: The type of stream to find
        :param related: A related stream to use as a reference (optional)
        :return: The best stream of the specified type
        :rtype: Stream | None
        r   N)	r/   r)   r   castr   	containerr!   r$   r   )r+   r   r   first_streamrd   r#   s         r   bestzStreamContainer.best   s     t}""4%{64=3CDD9E9O9S	#9+D117$
 $
 !4}\**r   r(   )__name__
__module____qualname____doc__r,   r   cfuncr   voidr1   r3   r6   r;   propertyr   r	   rJ   r   rO   r   rS   r:   strrf    r   r   r&   r&   +   s           \% %FK % % % \%
" " "# # ## # # D D XD D D XD G G XG C C XC I I XIH&!1 H H H H*- - -B+ +&4- + + + + + + +r   r&   )typingr   r   cython.cimports.libavcimportslibavr   cython.cimports.av.streamr   rk   rn   AVMediaTyper   	exceptvalpointerAVFormatContextr9   r$   cclassr&   ro   r   r   <module>rz      s<          # # # # # # # # # , , , , , , 9s 9s 9 9 9 9 N3./o d] Z	    " E+ E+ E+ E+ E+ E+ E+ E+ E+ E+r   