
    3j              
          S SK Jr  S SKrS SKJs  Jr  S SKJr  \R                  S\
S\R                  4S j5       r\R                  \R                  " SS9S	\R                  \R                     S
\R                  S\S-  S\R                   4S j5       5       r\R$                  \R&                   " S S5      5       5       rg)    )IteratorN)Streamtypereturnc                     U S:X  a  [         R                  $ U S:X  a  [         R                  $ U S:X  a  [         R                  $ U S:X  a  [         R                  $ U S:X  a  [         R
                  $ [        SU  35      e)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    N/home/wildlama/miniconda3/lib/python3.13/site-packages/av/container/streams.py_get_media_type_enumr      sv    w%%%	%%%		(((		***	$$$0788    F)checkfmtctxenumtyperelatedc                     Uc*  [         R                  " XSS[        R                  S5      nU$ [         R                  " XSUR                  R
                  [        R                  S5      nU$ )Nr   )r   av_find_best_streamcythonNULLptrindex)r   r   r   stream_indexs       r   _get_best_stream_indexr$      sa     ..vRVWX 	 ..b'++"3"3V[[!
 r   c                       \ rS rSrSrS r\R                  S\S\R                  4S j5       r
S rS rS	 r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       rS\\   4S jrS rSS\S-  S\4S jjrSrg)StreamContainer+   z

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                     / U l         g N_streamsselfs    r   	__cinit__StreamContainer.__cinit__<   s	    r   streamr   c                     UR                   R                  [        U R                  5      :X  d   eU R                  R	                  U5        g r)   )r!   r"   lenr+   append)r-   r0   s     r   
add_streamStreamContainer.add_stream?   s5    zz3t}}#5555V$r   c                 ,    [        U R                  5      $ r)   )r2   r+   r,   s    r   __len__StreamContainer.__len__E   s    4==!!r   c                 ,    [        U R                  5      $ r)   )iterr+   r,   s    r   __iter__StreamContainer.__iter__H   s    DMM""r   c                 v    [        U[        5      (       a  U R                  U5      S   $ U R                  U5      $ )Nr   )
isinstanceintget)r-   r"   s     r   __getitem__StreamContainer.__getitem__K   s0    eS!!88E?1%%88E?"r   c                 :    [        S U R                   5       5      $ )Nc              3   H   #    U  H  oR                   S :X  d  M  Uv   M     g7f)r   Nr   .0ss     r   	<genexpr>(StreamContainer.video.<locals>.<genexpr>S        C171BQQ   "	"tupler+   r,   s    r   r   StreamContainer.videoQ       CCCCr   c                 :    [        S U R                   5       5      $ )Nc              3   H   #    U  H  oR                   S :X  d  M  Uv   M     g7f)r	   Nr   rE   s     r   rH   (StreamContainer.audio.<locals>.<genexpr>W   rJ   rK   rL   r,   s    r   r	   StreamContainer.audioU   rO   r   c                 :    [        S U R                   5       5      $ )Nc              3   H   #    U  H  oR                   S :X  d  M  Uv   M     g7f)r
   Nr   rE   s     r   rH   ,StreamContainer.subtitles.<locals>.<genexpr>[   s     F1:1EQQrK   rL   r,   s    r   	subtitlesStreamContainer.subtitlesY   s    FFFFr   c                 :    [        S U R                   5       5      $ )Nc              3   H   #    U  H  oR                   S :X  d  M  Uv   M     g7f)r   Nr   rE   s     r   rH   'StreamContainer.data.<locals>.<genexpr>_   s     B161AQQrK   rL   r,   s    r   r   StreamContainer.data]   s    BBBBr   c                 :    [        S U R                   5       5      $ )Nc              3   H   #    U  H  oR                   S :X  d  M  Uv   M     g7f)r   Nr   rE   s     r   rH   .StreamContainer.attachments.<locals>.<genexpr>c   s     H1<1GQQrK   rL   r,   s    r   attachmentsStreamContainer.attachmentsa   s    HHHHr   c              #   0  #    Uc  g [        U[        5      (       a  Uv   g [        U[        5      (       a  U R                  U   v   g [        U[        [
        45      (       a#  U H  nU R                  U5       S h  vN   M     g [        U[        5      (       ad  UR                  5        HO  u  p4US:X  a  U R                  O
[        X5      n[        U[        [
        45      (       d  U/nU H	  nXV   v   M     MQ     g [        S[        U5      5      e N7f)NstreamszArgument must be Stream or int.)r>   r   r?   r+   rM   list_get_streamsdictitemsgetattr	TypeErrorr   )r-   xitemtype_indicesrc   is          r   re   StreamContainer._get_streamse   s     96""G3--""E4=)),,T222 4  "#'')+0I+=$--74CW!'E4=99&iG A!*$ ! #, =tAwGG 3s   A:D<D=BDc                     [        U R                  U5      5      nU(       a   UR                  U R                  U5      5        U=(       d    U R                  S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)rd   re   extendr+   )r-   argskwargs	selections       r   r@   StreamContainer.getz   sI    6 **401	T..v67,DMM!,,r   Nr   r   c                
   [        U R                  5      S:X  a  g[        R                  " [        U R                  S   5      nUR
                  R                  n[        U[        U5      U5      nUS:  a  gU R                  U   $ )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)	r2   r+   r   castr   	containerr!   r$   r   )r-   r   r   first_streamrx   r#   s         r   bestStreamContainer.best   su     t}}"%{{64==3CD9E9O9O9S9S	#9+D17$
 !}}\**r   r*   r)   )__name__
__module____qualname____firstlineno____doc__r.   r   cfuncr   voidr4   r7   r;   rA   propertyr   r	   rW   r   r`   r   re   r@   strrz   __static_attributes__ r   r   r&   r&   +   s     \\% %FKK % %
"## D D D D G G C C I IH&!1 H*-B+&4- + + +r   r&   )typingr   r   cython.cimports.libavcimportslibavr   cython.cimports.av.streamr   r   r   AVMediaTyper   	exceptvalpointerAVFormatContextr?   r$   finalcclassr&   r   r   r   <module>r      s      # # , 9s 9s 9 9 NN3../oo d] ZZ	  " E+ E+  E+r   