
    m i                     v    d dl Z d dlmZ d dlmZ d dlmZmZ d dlm	Z	 e j
         G d d                      ZdS )    N)	err_check)opaque_container)avrational_to_fractionto_avrational)SideDataContainerc                   6   e Zd ZdZd Zd Zd Zej        dde	dej
        fd            Zej        d	             Zej        d
ej        fd            Zed             Zej        d             Zed             Zej        d             Zed             Zej        d             Zed             Zed             Zej        d             Zed             Zed             Zej        d             Zed             Zd Zed             Zej        d             ZdS )Framez
    Base class for audio and video frames.

    See also :class:`~av.audio.frame.AudioFrame` and :class:`~av.video.frame.VideoFrame`.
    c                     t           j        5  t                                          | _        d d d            d S # 1 swxY w Y   d S N)cythonnogillibav_frame_allocptr)selfargskwargss      H/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/av/frame.py	__cinit__zFrame.__cinit__   s    \ 	, 	,))++DH	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   9= =c                     t           j        5  t                              t          j        | j                             d d d            d S # 1 swxY w Y   d S r   )r   r   r   av_frame_freeaddressr   r   s    r   __dealloc__zFrame.__dealloc__   s    \ 	8 	8fnTX66777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   2AAAc                 T    d| j         j         d| j         dt          |           ddS )Nz<av.z pts=z at 0xx>)	__class____name__ptsidr   s    r   __repr__zFrame.__repr__   s3    Qdn-QQDHQQBtHHQQQQQ    Tsourcedata_layoutc                     |j         | _         t                              | j        |j                   |rZ|j        j        | j        _        |j        j        | j        _        |j        j        | j        _        |j        j        | j        _        d S d S r   )
_time_baser   av_frame_copy_propsr   formatwidthheight	ch_layout)r   r$   r%   s      r   _copy_internal_attributeszFrame._copy_internal_attributes   sy     !+&*555 	6$j/DHO#Z-DHN$j/DHO!'!5DH	6 	6r#   c                     d S r    r   s    r   _init_user_attributeszFrame._init_user_attributes(   s    r#   dstc                    |j         st          d          | j        j         s	|| _        d S | j        j         |j         k    r| j        j        |j        k    rd S | j        j        t          j        k    r5t                              | j        j        | j        |          | j        _        | j        j	        dk    r5t                              | j        j	        | j        |          | j        _	        || _        d S )NzCannot rebase to zero time.r   )
num
ValueErrorr'   denr   r    r   AV_NOPTS_VALUEav_rescale_qduration)r   r1   s     r   _rebase_timezFrame._rebase_time,   s    w 	<:;;;" 	!DOF?#'))do.ASW.L.LF8<3---++DHL$/3OODHL8!! # 0 0!4?C! !DH r#   c                 R    | j         j        t          j        k    rdS | j         j        S )aL  
        The decoding timestamp copied from the :class:`~av.packet.Packet` that triggered returning this frame in :attr:`time_base` units.

        (if frame threading isn't used) This is also the Presentation time of this frame calculated from only :attr:`.Packet.dts` values without pts values.

        :type: int | None
        N)r   pkt_dtsr   r6   r   s    r   dtsz	Frame.dtsB   s'     8s1114xr#   c                 R    |t           j        | j        _        d S || j        _        d S r   )r   r6   r   r;   r   values     r   r<   z	Frame.dtsO   s*    ="1DH$DHr#   c                 R    | j         j        t          j        k    rdS | j         j        S )z
        The presentation timestamp in :attr:`time_base` units for this frame.

        This is the time at which the frame should be shown to the user.

        :type: int | None
        N)r   r    r   r6   r   s    r   r    z	Frame.ptsV   s%     8<3---4x|r#   c                 R    |t           j        | j        _        d S || j        _        d S r   )r   r6   r   r    r>   s     r   r    z	Frame.ptsc   s$    =-DHLLL DHLLLr#   c                     | j         j        S )zZ
        The duration of the frame in :attr:`time_base` units

        :type: int
        r   r8   r   s    r   r8   zFrame.durationj   s     x  r#   c                     || j         _        d S r   rC   r>   s     r   r8   zFrame.durations   s    !r#   c                     | j         j        t          j        k    rdS t	          | j         j                  | j        j        z  | j        j        z  S )z
        The presentation time in seconds for this frame.

        This is the time at which the frame should be shown to the user.

        :type: float | None
        N)r   r    r   r6   floatr'   r3   r5   r   s    r   timez
Frame.timew   sA     8<3---4TX\""T_%884?;NNNr#   c                 j    | j         j        r&t          t          j        | j                             S dS )z
        The unit of time (in fractional seconds) in which timestamps are expressed.

        :type: fractions.Fraction | None
        N)r'   r3   r   r   r   r   s    r   	time_basezFrame.time_base   s8     ? 	K)&.*I*IJJJ	K 	Kr#   c                 T    t          |t          j        | j                             d S r   )r   r   r   r'   r>   s     r   rI   zFrame.time_base   s$    eV^DO<<=====r#   c                 n    | j         j        dk    p%t          | j         j        t          j        z            S )z=
        Is this frame corrupt?

        :type: bool
        r   )r   decode_error_flagsboolflagsr   AV_FRAME_FLAG_CORRUPTr   s    r   
is_corruptzFrame.is_corrupt   s6     x*a/ 
4HNS664
 4
 	
r#   c                 N    t          | j        j        t          j        z            S )zPIs this frame a key frame?

        Wraps :ffmpeg:`AVFrame.key_frame`.

        )rM   r   rN   r   AV_FRAME_FLAG_KEYr   s    r   	key_framezFrame.key_frame   s     DHNS%::;;;r#   c                     |r!| j         xj        t          j        z  c_        d S | j         xj        t          j         z  c_        d S r   )r   rN   r   rR   r   vs     r   rS   zFrame.key_frame   sA      	5HNNc33NNNNHNNs444NNNNr#   c                 F    | j         t          |           | _         | j         S r   )
_side_datar   r   s    r   	side_datazFrame.side_data   s!    ?"/55DOr#   c                 b    t                               | j                  }t          |           dS )z
        Ensures that the frame data is writable. Copy the data to new buffer if it is not.
        This is a wrapper around :ffmpeg:`av_frame_make_writable`.
        N)r   av_frame_make_writabler   r   )r   rets     r   make_writablezFrame.make_writable   s(    
 44TX>>#r#   c                     | j         j        t          j        ur@t	          j        t          j        t          j        | j         j        j                            S d S r   )	r   
opaque_refr   NULLr   getcastp_chardatar   s    r   opaquezFrame.opaque   sJ    8fk11#'FM48+>+CDD   21r#   c                     t                               t          j        | j        j                             | t          j        |          | j        _        d S d S r   )r   av_buffer_unrefr   r   r   r_   r   addrU   s     r   re   zFrame.opaque   sL    FN48+>??@@@="2"6q"9"9DH =r#   N)T)r   
__module____qualname____doc__r   r   r"   r   cfuncr	   bintr-   r0   r   
AVRationalr9   propertyr<   setterr    r8   rG   rI   rP   rS   rY   r]   re   r/   r#   r   r	   r	   	   s        , , ,8 8 8R R R \	6 	6 	6FK 	6 	6 	6 \	6 \  \ \    \* 
  
  X
  	Z% % Z% 
 
 X
 	Z! ! Z! ! ! X! _" " _" 
O 
O X
O K K XK > > > 
 
 X
 < < X< 5 5 5   X
     X ]: : ]: : :r#   r	   )r   cython.cimports.av.errorr   cython.cimports.av.opaquer   cython.cimports.av.utilsr   r   av.sidedata.sidedatar   cclassr	   r/   r#   r   <module>rv      s     . . . . . . 6 6 6 6 6 6 J J J J J J J J 2 2 2 2 2 2 ~: ~: ~: ~: ~: ~: ~: ~: ~: ~:r#   