
    dj                     p   d dl Z d dlmc mZ d dlmZ  e j        e e                      Z	e j
        de j        e j        ej                          defd            Ze j         G d d                      Ze j
        de j        ej                 defd            Ze j         G d	 d
                      ZdS )    N)int64_tptrreturnc                 X    t          t                    }|                    |            |S N)
IndexEntry_cinit_bypass_sentinel_initr   objs     C/home/agentuser/manim-venv/lib/python3.11/site-packages/av/index.pywrap_index_entryr      s$     !788CIIcNNNJ    c                      e Zd ZdZd Zej        dej        ej        e	j
                          fd            Zd Zed             Zed             Zed             Zed	             Zed
             Zed             Zed             ZdS )r   zA single entry from a stream's index.

    This is a thin wrapper around FFmpeg's ``AVIndexEntry``.

    The exact meaning of the fields depends on the container/demuxer.
    c                 6    |t           urt          d          d S )Nz&cannot manually instantiate IndexEntryr	   RuntimeErrorselfsentinels     r   	__cinit__zIndexEntry.__cinit__   s%    111GHHH 21r   r   c                     || _         d S r   )r   r   r   s     r   r
   zIndexEntry._init   s    r   c                 X    d| j          d| j         d| j         d| j         d| j         dS )Nz<av.IndexEntry pos=z timestamp=z flags=z size=z min_distance=>)pos	timestampflagssizemin_distancer   s    r   __repr__zIndexEntry.__repr__    sf    B$( B Bt~ B Bdj B BIB B-1->B B B	
r   c                     | j         j        S r   )r   r   r!   s    r   r   zIndexEntry.pos&   s    x|r   c                     | j         j        S r   )r   r   r!   s    r   r   zIndexEntry.timestamp*   s    x!!r   c                     | j         j        S r   )r   r   r!   s    r   r   zIndexEntry.flags.   s    x~r   c                 N    t          | j        j        t          j        z            S r   )boolr   r   libAVINDEX_KEYFRAMEr!   s    r   is_keyframezIndexEntry.is_keyframe2   s    DHNS%99:::r   c                 N    t          | j        j        t          j        z            S r   )r'   r   r   r(   AVINDEX_DISCARD_FRAMEr!   s    r   
is_discardzIndexEntry.is_discard6   s    DHNS%>>???r   c                     | j         j        S r   )r   r   r!   s    r   r   zIndexEntry.size:   s    x}r   c                     | j         j        S r   )r   r    r!   s    r   r    zIndexEntry.min_distance>   s    x$$r   N)__name__
__module____qualname____doc__r   cythoncfuncpointerconstr(   AVIndexEntryr
   r"   propertyr   r   r   r*   r-   r   r     r   r   r   r      s9        I I I \S5E(FG    \
 
 
   X " " X"   X ; ; X; @ @ X@   X % % X% % %r   r   c                 X    t          t                    }|                    |            |S r   )IndexEntriesr	   r
   r   s     r   wrap_index_entriesr=   C   s$    $%;<<CIIcNNNJr   c                       e Zd ZdZd Zej        dej        ej	                 fd            Z
d ZdefdZd Zd	 Zd
dddedefdZdS )r<   aH  A sequence-like view of FFmpeg's per-stream index entries.

    Exposed as :attr:`~av.stream.Stream.index_entries`.

    The index is provided by the demuxer and may be empty or incomplete depending
    on the container format. This is useful for fast multi-seek loops (e.g., decoding
    at a lower-than-native framerate).
    c                 6    |t           u rd S t          d          )Nz(cannot manually instantiate IndexEntriesr   r   s     r   r   zIndexEntries.__cinit__U   s"    ---FEFFFr   r   c                     || _         d S r   )
stream_ptrr   s     r   r
   zIndexEntries._initZ   s    r   c                 (    dt          |            dS )Nz<av.IndexEntries[z]>)lenr!   s    r   r"   zIndexEntries.__repr__^   s    03t990000r   r   c                     t           j        5  t          j        | j                  cd d d            S # 1 swxY w Y   d S r   )r4   nogilr(    avformat_index_get_entries_countrA   r!   s    r   __len__zIndexEntries.__len__a   s    \ 	I 	I7HH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is   377c              #   \   K   t          t          |                     D ]}| |         V  d S r   )rangerC   )r   is     r   __iter__zIndexEntries.__iter__e   s<      s4yy!! 	 	Aq'MMMM	 	r   c                 N    t          |t                    rt                     }|dk     r||z  }|dk     s||k    rt          d| d|           |}t          j        5  t          j         j        |          }d d d            n# 1 swxY w Y   |t          j	        k    rt          d          t          |          S t          |t                    rC|                    t                               \  }}} fdt          |||          D             S t          d          )Nr   zIndex entries z out of bounds for size zindex entry not foundc                      g | ]
}|         S r:   r:   ).0rJ   r   s     r   
<listcomp>z,IndexEntries.__getitem__.<locals>.<listcomp>{   s    >>>DG>>>r   z#Index must be an integer or a slice)
isinstanceintrC   
IndexErrorr4   rE   r(   avformat_index_get_entryrA   NULLr   sliceindicesrI   	TypeError)r   indexnc_idxentrystartstopsteps   `       r   __getitem__zIndexEntries.__getitem__i   s{   eS!! 	CD		Aqyy
qyyEQJJ !T%!T!TQR!T!TUUU %E M M4T_eLLM M M M M M M M M M M M M M M## !8999#E***u%% 	C %c$ii 8 8E4>>>>U5$%=%=>>>>ABBBs    BBBTF)backward	any_framer`   ra   c                    |}d}|r|t           j        z  }|r|t           j        z  }t          j        5  t          j        | j        ||          }ddd           n# 1 swxY w Y   |S )zSearch the underlying index for ``timestamp``.

        This wraps FFmpeg's ``av_index_search_timestamp``.

        Returns an index into this object, or ``-1`` if no match is found.
        r   N)r(   AVSEEK_FLAG_BACKWARDAVSEEK_FLAG_ANYr4   rE   av_index_search_timestamprA   )r   r   r`   ra   c_timestampr   idxs          r   search_timestampzIndexEntries.search_timestamp   s      ) 	.S--E 	)S((E\ 	U 	U/eTTC	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 
s   AA"AN)r0   r1   r2   r3   r   r4   r5   r6   r(   AVStreamr
   r"   rQ   rG   rK   r_   r'   rh   r:   r   r   r<   r<   J   s         G G G
 \5    \1 1 1I I I I I  C C C. .2U  &*>B     r   r<   )r4   cython.cimports.libavcimportslibavr(   cython.cimports.libc.stdintr   declareobjectr	   r5   r6   r7   r8   r   r   cclassri   r<   r=   r:   r   r   <module>rq      sP    # # # # # # # # # / / / / / /'99  &.c6F)GH Z     0% 0% 0% 0% 0% 0% 0% 0%f FN3<8 \     H H H H H H H H H Hr   