
    \j                        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                   e j"                   G d d                    Ze j                  de j                  ej$                     defd       Ze j                   e j"                   G d	 d
                    Zy)    N)int64_tptrreturnc                 F    t        t              }|j                  |        |S N)
IndexEntry_cinit_bypass_sentinel_initr   objs     ;/root/.hermes/venv/lib/python3.12/site-packages/av/index.pywrap_index_entryr      s     !78CIIcN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y)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                 *    |t         urt        d      y )Nz&cannot manually instantiate IndexEntryr	   RuntimeErrorselfsentinels     r   	__cinit__zIndexEntry.__cinit__   s    11GHH 2r   r   c                     || _         y r   )r   r   r   s     r   r
   zIndexEntry._init   s	    r   c                     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__!   sK    !$((;t~~6Fgdjj\ ZII;nT->->,?qB	
r   c                 .    | j                   j                  S r   )r   r   r!   s    r   r   zIndexEntry.pos'   s    xx||r   c                 .    | j                   j                  S r   )r   r   r!   s    r   r   zIndexEntry.timestamp+   s    xx!!!r   c                 .    | j                   j                  S r   )r   r   r!   s    r   r   zIndexEntry.flags/   s    xx~~r   c                 b    t        | j                  j                  t        j                  z        S r   )boolr   r   libAVINDEX_KEYFRAMEr!   s    r   is_keyframezIndexEntry.is_keyframe3   s     DHHNNS%9%99::r   c                 b    t        | j                  j                  t        j                  z        S r   )r'   r   r   r(   AVINDEX_DISCARD_FRAMEr!   s    r   
is_discardzIndexEntry.is_discard7   s     DHHNNS%>%>>??r   c                 .    | j                   j                  S r   )r   r   r!   s    r   r   zIndexEntry.size;   s    xx}}r   c                 .    | j                   j                  S r   )r   r    r!   s    r   r    zIndexEntry.min_distance?   s    xx$$$r   N)__name__
__module____qualname____doc__r   cythoncfuncpointerconstr(   AVIndexEntryr
   r"   propertyr   r   r   r*   r-   r   r     r   r   r   r      s    I \\S5E5E(FG  
   " "   ; ; @ @   % %r   r   c                 F    t        t              }|j                  |        |S r   )IndexEntriesr	   r
   r   s     r   wrap_index_entriesr=   D   s    $%;<CIIcN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y)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                 *    |t         u ry t        d      )Nz(cannot manually instantiate IndexEntriesr   r   s     r   r   zIndexEntries.__cinit__W   s    --EFFr   r   c                     || _         y r   )
stream_ptrr   s     r   r
   zIndexEntries._init\   s	    r   c                      dt        |        dS )Nz<av.IndexEntries[z]>)lenr!   s    r   r"   zIndexEntries.__repr__`   s    "3t9+R00r   r   c                     t         j                  5  t        j                  | j                        cd d d        S # 1 sw Y   y xY wr   )r4   nogilr(    avformat_index_get_entries_countrA   r!   s    r   __len__zIndexEntries.__len__c   s4    \\ 	I77H	I 	I 	Is	   :Ac              #   L   K   t        t        |             D ]	  }| |     y wr   )rangerC   )r   is     r   __iter__zIndexEntries.__iter__g   s'     s4y! 	Aq'M	s   "$c                    t        |t              rt        |       }|dk  r||z  }|dk  s||k\  rt        d| d|       |}t        j
                  5  t        j                  | j                  |      }d d d        t        j                  k(  rt        d      t        |      S t        |t              r<|j                  t        |             \  }}}t        |||      D cg c]  }| |   	 c}S t        d      # 1 sw Y   xY wc c}w )Nr   zIndex entries z out of bounds for size zindex entry not foundz#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steprJ   s	            r   __getitem__zIndexEntries.__getitem__k   s    eS!D	Aqy
qyEQJ >%8PQRPS!TUU %E M44T__eLM# !899#E**u% %c$i 8E4%*5$%=>DG>>ABBM M ?s   !C<"D<DTF)backward	any_framer]   r^   c                    |}d}|r|t         j                  z  }|r|t         j                  z  }t        j                  5  t        j
                  | j                  ||      }ddd       |S # 1 sw Y   S xY w)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]   r^   c_timestampr   idxs          r   search_timestampzIndexEntries.search_timestamp   st      )S---ES(((E\\ 	U//eTC	U 
	U 
s   "A++A5N)r0   r1   r2   r3   r   r4   r5   r6   r(   AVStreamr
   r"   rN   rG   rK   r\   r'   re   r:   r   r   r<   r<   K   ss    G
 \\5  1I IC. .2U&*>Br   r<   )r4   cython.cimports.libavcimportslibavr(   cython.cimports.libc.stdintr   declareobjectr	   r5   r6   r7   r8   r   r   finalcclassrf   r<   r=   r:   r   r   <module>ro      s     # # /'9  &..c6F6F)GH Z   0% 0%  0%f FNN3<<8 \   H H  Hr   