
    C1i                     r    S SK r S SKJr  S SKJr  S SKJrJr  S SKJ	r	  \ R                   " S S5      5       rg)    N)	err_check)opaque_container)avrational_to_fractionto_avrational)SideDataContainerc                   D   \ rS rSrSrS rS rS r\R                  SS\
S\R                  4S jj5       r\R                  S	 5       r\R                  S
\R                  4S j5       r\S 5       r\R&                  S 5       r\S 5       r\R&                  S 5       r\S 5       r\R&                  S 5       r\S 5       r\S 5       r\R&                  S 5       r\S 5       r\S 5       r\R&                  S 5       r\S 5       rS r\S 5       r\R&                  S 5       rSrg)Frame	   z
Base class for audio and video frames.

See also :class:`~av.audio.frame.AudioFrame` and :class:`~av.video.frame.VideoFrame`.
c                     [         R                     [        R                  5       U l        S S S 5        g ! , (       d  f       g = fN)cythonnogillibav_frame_allocptr)selfargskwargss      B/home/james-whalen/.local/lib/python3.13/site-packages/av/frame.py	__cinit__Frame.__cinit__   s#    \\))+DH \\s	   4
Ac                     [         R                     [        R                  [         R                  " U R
                  5      5        S S S 5        g ! , (       d  f       g = fr   )r   r   r   av_frame_freeaddressr   r   s    r   __dealloc__Frame.__dealloc__   s.    \\fnnTXX67 \\s   4A
Ac                 j    SU R                   R                   SU R                   S[        U 5      S S3$ )Nz<av.z pts=z at 0xx>)	__class____name__ptsidr   s    r   __repr__Frame.__repr__   s2    dnn--.eDHH:VBtHQ<qQQ    sourcedata_layoutc                    UR                   U l         [        R                  U R                  UR                  5        U(       a  UR                  R                  U R                  l        UR                  R
                  U R                  l        UR                  R                  U R                  l        UR                  R                  U R                  l        g g r   )
_time_baser   av_frame_copy_propsr   formatwidthheight	ch_layout)r   r(   r)   s      r   _copy_internal_attributesFrame._copy_internal_attributes   s     !++&**5$jj//DHHO#ZZ--DHHN$jj//DHHO!'!5!5DHH r'   c                     g r    r   s    r   _init_user_attributesFrame._init_user_attributes(   s    r'   dstc                    UR                   (       d  [        S5      eU R                  R                   (       d  Xl        g U R                  R                   UR                   :X  a%  U R                  R                  UR                  :X  a  g U R                  R
                  [        R                  :w  aD  [        R                  U R                  R
                  U R                  U5      U R                  l        U R                  R                  S:w  aD  [        R                  U R                  R                  U R                  U5      U R                  l	        Xl        g )NzCannot rebase to zero time.r   )
num
ValueErrorr+   denr   r#   r   AV_NOPTS_VALUEav_rescale_qduration)r   r7   s     r   _rebase_timeFrame._rebase_time,   s    ww:;;""!O??#'')doo.A.ASWW.L88<<3---++DHHLL$//3ODHHL88! # 0 0!!4??C!DHH r'   c                     U R                   R                  [        R                  :X  a  gU R                   R                  $ )a,  
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   r<   r   s    r   dts	Frame.dtsB   s/     88s111xxr'   c                 j    Uc   [         R                  U R                  l        g XR                  l        g r   )r   r<   r   rB   r   values     r   rC   rD   O   s#    ="11DHH$HHr'   c                     U R                   R                  [        R                  :X  a  gU R                   R                  $ )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   r<   r   s    r   r#   	Frame.ptsV   s+     88<<3---xx||r'   c                 j    Uc   [         R                  U R                  l        g XR                  l        g r   )r   r<   r   r#   rF   s     r   r#   rI   c   s!    =--DHHL HHLr'   c                 .    U R                   R                  $ )zB
The duration of the frame in :attr:`time_base` units

:type: int
r   r>   r   s    r   r>   Frame.durationj   s     xx   r'   c                 $    XR                   l        g r   rL   rF   s     r   r>   rM   s   s    !r'   c                     U R                   R                  [        R                  :X  a  g[	        U R                   R                  5      U R
                  R                  -  U R
                  R                  -  $ )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   r<   floatr+   r9   r;   r   s    r   time
Frame.timew   sN     88<<3---TXX\\"T__%8%884??;N;NNNr'   c                     U R                   R                  (       a)  [        [        R                  " U R                   5      5      $ g)zo
The unit of time (in fractional seconds) in which timestamps are expressed.

:type: fractions.Fraction | None
N)r+   r9   r   r   r   r   s    r   	time_baseFrame.time_base   s.     ??)&..*IJJ r'   c                 X    [        U[        R                  " U R                  5      5        g r   )r   r   r   r+   rF   s     r   rT   rU      s    eV^^DOO<=r'   c                     U R                   R                  S:g  =(       d0    [        U R                   R                  [        R
                  -  5      $ )z%
Is this frame corrupt?

:type: bool
r   )r   decode_error_flagsboolflagsr   AV_FRAME_FLAG_CORRUPTr   s    r   
is_corruptFrame.is_corrupt   s=     xx**a/ 
4HHNNS6664
 	
r'   c                 b    [        U R                  R                  [        R                  -  5      $ )z@Is this frame a key frame?

Wraps :ffmpeg:`AVFrame.key_frame`.

)rY   r   rZ   r   AV_FRAME_FLAG_KEYr   s    r   	key_frameFrame.key_frame   s"     DHHNNS%:%::;;r'   c                     U(       a.  U R                   =R                  [        R                  -  sl        g U R                   =R                  [        R                  ) -  sl        g r   )r   rZ   r   r_   r   vs     r   r`   ra      s:     HHNNc333NHHNNs4444Nr'   c                 T    U R                   c  [        U 5      U l         U R                   $ r   )
_side_datar   r   s    r   	side_dataFrame.side_data   s"    ??"/5DOr'   c                 X    [         R                  U R                  5      n[        U5        g)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_writableFrame.make_writable   s    
 44TXX>#r'   c                     U R                   R                  [        R                  LaW  [        R
                  " [        R                  " [        R                  U R                   R                  R                  5      5      $ g r   )	r   
opaque_refr   NULLr   getcastp_chardatar   s    r   opaqueFrame.opaque   sR    88fkk1#''FMM488+>+>+C+CD  2r'   c                     [         R                  [        R                  " U R                  R
                  5      5        Ub&  [        R                  " U5      U R                  l        g g r   )r   av_buffer_unrefr   r   r   ro   r   addrc   s     r   ru   rv      sD    FNN488+>+>?@="2"6"6q"9DHH r'   )rf   r+   r   N)T)r"   
__module____qualname____firstlineno____doc__r   r   r%   r   cfuncr	   bintr1   r5   r   
AVRationalr?   propertyrC   setterr#   r>   rQ   rT   r\   r`   rg   rl   ru   __static_attributes__r4   r'   r   r	   r	   	   s   ,8R \\	6 	6FKK 	6 	6 \\  \\  * 
  
  	ZZ% % 
 
 	ZZ! ! ! ! __" " 
O 
O K K > > 
 
 < < 5 5  
   ]]: :r'   r	   )r   cython.cimports.av.errorr   cython.cimports.av.opaquer   cython.cimports.av.utilsr   r   av.sidedata.sidedatar   cclassr	   r4   r'   r   <module>r      s4     . 6 J 2 ~: ~: ~:r'   