
    \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$                  ej&                   G d d                    Zy)    )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    G/root/.hermes/venv/lib/python3.12/site-packages/av/container/streams.py_get_media_type_enumr      sv    w%%%	%%%		(((		***	$$$0788    F)checkfmtctxenumtyperelatedc                     |*t        j                  | |ddt        j                  d      }|S 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$      se     ..vxRVWX 	 ..Hb'++"3"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y)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 | _         y N)_streamsselfs    r   	__cinit__zStreamContainer.__cinit__<   s	    r   streamr   c                     |j                   j                  t        | j                        k(  sJ | j                  j	                  |       y r(   )r!   r"   lenr)   append)r+   r-   s     r   
add_streamzStreamContainer.add_stream?   s5    zz3t}}#5555V$r   c                 ,    t        | j                        S r(   )r/   r)   r*   s    r   __len__zStreamContainer.__len__E   s    4==!!r   c                 ,    t        | j                        S r(   )iterr)   r*   s    r   __iter__zStreamContainer.__iter__H   s    DMM""r   c                 l    t        |t              r| j                  |      d   S | j                  |      S )Nr   )
isinstanceintget)r+   r"   s     r   __getitem__zStreamContainer.__getitem__K   s-    eS!88E?1%%88E?"r   c                 :    t        d | j                  D              S )Nc              3   @   K   | ]  }|j                   d k(  s|  yw)r   Nr   .0ss     r   	<genexpr>z(StreamContainer.video.<locals>.<genexpr>S        C171BQC   tupler)   r*   s    r   r   zStreamContainer.videoQ       CCCCr   c                 :    t        d | j                  D              S )Nc              3   @   K   | ]  }|j                   d k(  s|  yw)r	   Nr   r>   s     r   rA   z(StreamContainer.audio.<locals>.<genexpr>W   rB   rC   rD   r*   s    r   r	   zStreamContainer.audioU   rF   r   c                 :    t        d | j                  D              S )Nc              3   @   K   | ]  }|j                   d k(  s|  yw)r
   Nr   r>   s     r   rA   z,StreamContainer.subtitles.<locals>.<genexpr>[   s     F1:1EQFrC   rD   r*   s    r   	subtitleszStreamContainer.subtitlesY   s    FFFFr   c                 :    t        d | j                  D              S )Nc              3   @   K   | ]  }|j                   d k(  s|  yw)r   Nr   r>   s     r   rA   z'StreamContainer.data.<locals>.<genexpr>_   s     B161AQBrC   rD   r*   s    r   r   zStreamContainer.data]   s    BBBBr   c                 :    t        d | j                  D              S )Nc              3   @   K   | ]  }|j                   d k(  s|  yw)r   Nr   r>   s     r   rA   z.StreamContainer.attachments.<locals>.<genexpr>c   s     H1<1GQHrC   rD   r*   s    r   attachmentszStreamContainer.attachmentsa   s    HHHHr   c              #     K   |y t        |t              r| y t        |t              r| j                  |    y t        |t        t
        f      r!|D ]  }| j                  |      E d {     y t        |t              r]|j                         D ]I  \  }}|dk(  r| j                  nt        | |      }t        |t        t
        f      s|g}|D ]	  }||     K y t        dt        |            7 w)NstreamszArgument must be Stream or int.)r8   r   r9   r)   rE   list_get_streamsdictitemsgetattr	TypeErrorr   )r+   xitemtype_indicesrR   is          r   rT   zStreamContainer._get_streamse   s     96"G3--""E4=) 3,,T22234 "#'') %w+0I+=$--74QVCW!'E4=9&iG  %A!!*$%% =tAwGG 3s   A*C8,C6-B
C8c                     t        | j                  |            }|r |j                  | j                  |             |xs | 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)rS   rT   extendr)   )r+   argskwargs	selections       r   r:   zStreamContainer.getz   sI    6 **401	T..v67,DMM!,,r   Nr   r   c                   t        | j                        dk(  ryt        j                  t        | j                  d         }|j
                  j                  }t        |t        |      |      }|dk  ry| 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_streamre   r#   s         r   bestzStreamContainer.best   su     t}}"%{{64==3CD9E9O9O9S9S	#9+D17$
 !}}\**r   r(   )__name__
__module____qualname____doc__r,   r   cfuncr   voidr1   r3   r6   r;   propertyr   r	   rK   r   rP   r   rT   r:   strrg    r   r   r&   r&   +   s     \\% %FKK % %
"## D D D D G G C C I IH&!1 H*-B+&4- + +r   r&   )collections.abcr   r   cython.cimports.libavcimportslibavr   cython.cimports.av.streamr   rl   ro   AVMediaTyper   	exceptvalpointerAVFormatContextr9   r$   finalcclassr&   rp   r   r   <module>r|      s    $  # # , 9s 9s 9 9 NN3../oo d] ZZ	  " E+ E+  E+r   