
    C1i'                        S SK r S SKJrJr  S SKJrJr  S SKJrJ	r	  \ R                   " S S5      5       r\" 5       r\ R                   " S S5      5       r\ R                  S	\S
\ R                   S\4S j5       r\ R                   " S S5      5       r\ R                   " S S\5      5       r\ R                   " S S5      5       r\ R                   " S S\5      5       rg)    N)PyBuffer_FillInfoPyBytes_FromString)int64_tuint64_t)memcpystrlenc                       \ rS rSrS rSrg)SubtitleProxy   c                 j    [         R                  [        R                  " U R                  5      5        g N)libavsubtitle_freecythonaddressstructselfs    O/home/james-whalen/.local/lib/python3.13/site-packages/av/subtitles/subtitle.py__dealloc__SubtitleProxy.__dealloc__	   s    FNN4;;78     N)__name__
__module____qualname____firstlineno__r   __static_attributes__r   r   r   r
   r
      s    9r   r
   c                   ^   \ rS rSrSrSS jr\  SS\S\S\S\S	\S
\	4S jj5       r
S r\S 5       r\R                  S\4S j5       r\S 5       r\R                  S\4S j5       r\S 5       r\R                  S\4S j5       r\S 5       r\R                  S\4S j5       rS rS rS rSrg)SubtitleSet   za
A :class:`SubtitleSet` can contain many :class:`Subtitle` objects.

Wraps :ffmpeg:`AVSubtitle`.
Nc                   ^  U[         L a  [        5       T l        ST l        g [	        U[        5      (       aI  UT l        [        U 4S j[        T R                  R                  R                  5       5       5      T l        g [        S5      e)Nr   c              3   <   >#    U  H  n[        TU5      v   M     g 7fr   )build_subtitle.0ir   s     r   	<genexpr>(SubtitleSet.__cinit__.<locals>.<genexpr>    s      1SAtQ''1Ss   z@SubtitleSet requires a SubtitleProxy or use SubtitleSet.create())
_cinit_bypass_sentinelr
   proxyrects
isinstancetupleranger   	num_rects	TypeError)r   proxy_or_sentinels   ` r   	__cinit__SubtitleSet.__cinit__   sq     66&DJDJ)=99*DJ 16tzz7H7H7R7R1S DJ R r   textstartendptssubtitle_formatreturnc           	      F   [        [        5      nXER                  R                  l        XR                  R                  l        X%R                  R                  l        X5R                  R                  l        SUR                  R                  l        [        R                  " [        R                  [        R                  [        R                        [        R                  [        R                  " [        R                  [        R                     5      5      5      UR                  R                  l        UR                  R                  R                   [        R"                  :X  a  [%        S5      e[        R                  " [        R                  [        R                     [        R                  [        R                  " [        R                  5      5      5      nU[        R"                  :X  ag  [        R'                  UR                  R                  R                   5        [        R"                  UR                  R                  l        [%        S5      eXeR                  R                  R                   S'   SUl        SUl        SUl        SUl        SUl        [        R2                  Ul        [        R"                  Ul        SUl        [;        U 5      n[        R                  " [        R<                  [        R?                  US-   5      5      Ul         UR@                  [        R"                  :X  a  [%        S5      e[C        UR@                  [        R                  " [        R<                  U 5      U5        SUR@                  U'   [E        US5      4Ul        U$ )ag  
Create a SubtitleSet for encoding.

Args:
    text: The subtitle text in ASS dialogue format
          (e.g. b"0,0,Default,,0,0,0,,Hello World")
    start: Start display time as offset from pts (typically 0)
    end: End display time as offset from pts (i.e., duration)
    pts: Presentation timestamp in stream time_base units
    subtitle_format: Subtitle format (default 1 for text)

Note:
    All timing values should be in stream time_base units.
    For MKV (time_base=1/1000), units are milliseconds.
    For MP4 (time_base=1/1000000), units are microseconds.

Returns:
    A SubtitleSet ready for encoding
   z'Failed to allocate subtitle rects arrayz Failed to allocate subtitle rectr   z Failed to allocate subtitle text)#r    r*   r+   r   formatstart_display_timeend_display_timer8   r0   r   castpointerr   AVSubtitleRect
av_malloczsizeofr,   NULLMemoryErrorav_freexywh	nb_colorsSUBTITLE_ASStyper5   flagslenp_char	av_mallocassr   AssSubtitle)r5   r6   r7   r8   r9   subsetrecttext_lens           r   createSubtitleSet.create(   sQ   6 **@A%4"16./2,"%()%$*KKNN6>>#*<*<=>NN6==8J8J)KLM%
! <<$$3GHH39;;NN3--.NN6==););<=4
 6;;KK++112(.FLL%@AA'+!!!$$$	KK	
&)$i;;v}}cmmHqL.IJ88v{{"@AAtxxV]]D98D#FA.0r   c                 ~    SU R                   R                   SU R                   R                   S[        U 5      S S3$ )N<. at 0xrH   >)	__class__r   r   idr   s    r   __repr__SubtitleSet.__repr__q   s=    ))*!DNN,C,C+DF2d8TU,VWX	
r   c                 B    U R                   R                  R                  $ r   r+   r   r=   r   s    r   r=   SubtitleSet.formatv   s    zz  '''r   valuec                 8    XR                   R                  l        g r   rd   r   rf   s     r   r=   re   z   s    #(

 r   c                 B    U R                   R                  R                  $ r   r+   r   r>   r   s    r   r>   SubtitleSet.start_display_time~   s    zz  333r   c                 8    XR                   R                  l        g r   rj   rh   s     r   r>   rk      s    /4

,r   c                 B    U R                   R                  R                  $ r   r+   r   r?   r   s    r   r?   SubtitleSet.end_display_time   s    zz  111r   c                 8    XR                   R                  l        g r   rn   rh   s     r   r?   ro      s    -2

*r   c                 B    U R                   R                  R                  $ )z$Same as packet pts, in av.time_base.r+   r   r8   r   s    r   r8   SubtitleSet.pts   s     zz  $$$r   c                 8    XR                   R                  l        g r   rr   rh   s     r   r8   rs      s     %

r   c                 ,    [        U R                  5      $ r   )rP   r,   r   s    r   __len__SubtitleSet.__len__   s    4::r   c                 ,    [        U R                  5      $ r   )iterr,   r   s    r   __iter__SubtitleSet.__iter__   s    DJJr   c                      U R                   U   $ r   )r,   r   r'   s     r   __getitem__SubtitleSet.__getitem__   s    zz!}r   )r+   r,   r   )r   r<   )r   r   r   r   __doc__r3   staticmethodbytesintr    rX   ra   propertyr=   setterr>   r?   r8   rv   rz   r~   r   r   r   r   r    r       sM     
  FFF F 	F
 F 
F FP

 ( ( ]])C ) ) 4 4 5 5 5 2 2 3c 3 3 % % 	ZZ& & & r   r    subtitleindexr:   c                    US:  dG  [         R                  " [         R                  U5      U R                  R                  R
                  :  a  [        S5      eU R                  R                  R                  U   nUR                  [        R                  :X  a  [        X5      $ UR                  [        R                  :X  d  UR                  [        R                  :X  a  [        X5      $ [        SUR                  -  5      e)z~Build an av.Stream for an existing AVStream.

The AVStream MUST be fully constructed and ready for use before this is called.
r    subtitle rect index out of rangezunknown subtitle type %r)r   r@   uintr+   r   r0   
ValueErrorr,   rN   r   SUBTITLE_BITMAPBitmapSubtitlerM   SUBTITLE_TEXTrT   )r   r   ptrs      r   r$   r$      s     qyFKKU3x~~7L7L7V7VV;<<.6nn.C.C.I.I%.PC
xx3&&&h..
xx3###sxx33D3D'D8++
/#((:
;;r   c                   D    \ rS rSrSrS\S\R                  4S jrS r	Sr
g)	Subtitle   z[
An abstract base class for each concrete type of subtitle.
Wraps :ffmpeg:`AVSubtitleRect`
r   r   c                    US:  dG  [         R                  " [         R                  U5      UR                  R                  R
                  :  a  [        S5      eUR                  U l        U R                  R                  R                  U   U l        U R                  R                  [        R                  :X  a  SU l	        g U R                  R                  [        R                  :X  a  SU l	        g U R                  R                  [        R                  :X  a  SU l	        g U R                  R                  [        R                  :X  a  SU l	        g [        SU R                  R                  < 35      e)Nr   r   s   nones   bitmaps   texts   asszunknown subtitle type )r   r@   r   r+   r   r0   r   r,   r   rN   r   SUBTITLE_NONEr   r   rM   r   r   r   s      r   r3   Subtitle.__cinit__   s    AI{{6;;.(..2G2G2Q2QQ?@@^^
::$$**5188==C---DIXX]]c111!DIXX]]c///DIXX]]c...DI5dhhmm5FGHHr   c                 P    SU R                   R                   S[        U 5      S S3$ )Nz<av.r]   rH   r^   )r_   r   r`   r   s    r   ra   Subtitle.__repr__   s(    dnn--.fRXaLBBr   )r+   r   rN   N)r   r   r   r   r   r    r   r   r3   ra   r   r   r   r   r   r      s'    
I+ Ifjj I(Cr   r   c                       \ rS rSrS\S\R                  4S jrS r\	S 5       r
\	S 5       r\	S 5       r\	S	 5       r\	S
 5       rS rS rS rSrg)r      r   r   c                 L   ^  [        U 4S j[        S5       5       5      T l        g )Nc              3   |   >#    U  H1  nTR                   R                  U   (       d  M#  [        TU5      v   M3     g 7fr   )r   linesizeBitmapSubtitlePlaner%   s     r   r(   +BitmapSubtitle.__cinit__.<locals>.<genexpr>   s4      
2:Qdhh>O>OPQ>R(a(((s   "<<   )r.   r/   planesr   s   `  r   r3   BitmapSubtitle.__cinit__   s      
27(
 
r   c                     SU R                   R                   SU R                   R                   SU R                   SU R                   SU R
                   SU R                   S[        U 5      S S3$ )	Nr[   r\    rH   z at ,z; at 0xr^   )r_   r   r   widthheightrH   rI   r`   r   s    r   ra   BitmapSubtitle.__repr__   sh    ))*!DNN,C,C+DAzzl!DKK=TVVHAdffXWRXaLPQS	
r   c                 .    U R                   R                  $ r   )r   rH   r   s    r   rH   BitmapSubtitle.x       xxzzr   c                 .    U R                   R                  $ r   )r   rI   r   s    r   rI   BitmapSubtitle.y   r   r   c                 .    U R                   R                  $ r   )r   rJ   r   s    r   r   BitmapSubtitle.width   r   r   c                 .    U R                   R                  $ r   )r   rK   r   s    r   r   BitmapSubtitle.height   r   r   c                 .    U R                   R                  $ r   )r   rL   r   s    r   rL   BitmapSubtitle.nb_colors   s    xx!!!r   c                 ,    [        U R                  5      $ r   )rP   r   r   s    r   rv   BitmapSubtitle.__len__   s    4;;r   c                 ,    [        U R                  5      $ r   )ry   r   r   s    r   rz   BitmapSubtitle.__iter__   s    DKK  r   c                      U R                   U   $ r   r   r}   s     r   r~   BitmapSubtitle.__getitem__   s    {{1~r   r   N)r   r   r   r   r    r   r   r3   ra   r   rH   rI   r   r   rL   rv   rz   r~   r   r   r   r   r   r      s    
+ 
fjj 


         " " !r   r   c                   z    \ rS rSrS\S\R                  4S jrS\R                  \	   S\R                  4S jr
Srg	)
r      r   r   c                 v   US:  a  [        S5      eUR                  R                  U   (       d  [        S5      eXl        X l        UR                  R
                  UR                  R                  -  U l        [        R                  " [        R                  UR                  R                  U   5      U l        g )Nr   z"BitmapSubtitles have only 4 planeszplane does not exist)r   r   r   r   r   rJ   rK   buffer_sizer   r@   p_voiddata_bufferr   s      r   r3   BitmapSubtitlePlane.__cinit__   s    A:ABB||$$U+344 
#<<>>HLLNN:{{6==(,,2C2CE2JKr   viewrO   c                 J    [        XU R                  U R                  SU5        g )Nr   )r   r   r   )r   r   rO   s      r   __getbuffer__!BitmapSubtitlePlane.__getbuffer__  s    $dllD4D4DaOr   )r   r   r   r   N)r   r   r   r   r   r   r   r3   rA   	Py_bufferr   r   r   r   r   r   r      s?    	L. 	L 	LP&.."; PFJJ Pr   r   c                   N    \ rS rSrSrS r\S 5       r\S 5       r\S 5       r	Sr
g)	rT   i  zQ
Represents an ASS/Text subtitle format, as opposed to a bitmap Subtitle format.
c                 >    SU R                   < S[        U 5      S S3$ )Nz<av.AssSubtitle r]   rH   r^   )dialoguer`   r   s    r   ra   AssSubtitle.__repr__  s"    !$--!2&D!AFFr   c                     U R                   R                  [        R                  La  [	        U R                   R                  5      $ g)z\
Returns the subtitle in the ASS/SSA format. Used by the vast majority of subtitle formats.
r   )r   rS   r   rE   r   r   s    r   rS   AssSubtitle.ass  s.    
 88<<v{{*%dhhll33r   c                    SnSnSnU R                   n[        R                  " [        R                  5      u  pV[	        5       n[        U5      nUS:  a$  X(:  a  XB   S:X  a  US-  nUS-  nUS:  a  X(:  a  M  X(:  av  XB   nUS-   U:  a  SOXBS-      nUS:X  a  US:X  a  UR                  S5        US	-  nM?  U(       d!  US
:X  a	  US:w  a  SnOUR                  U5        OUS:X  a  SnUS-  nX(:  a  Mv  [        U5      $ )z;
Extract the dialogue from the ass format. Strip comments.
r   F   ,   r<   \   N   
      {   T}   )rS   r   declarechar	bytearrayrP   appendr   )	r   comma_countr'   stateass_textr   	next_charresultrW   s	            r   r   AssSubtitle.dialogue"  s   
 %&"(( ..5%K&)(mAo!,{g%q FA Ao!,
 l;DUh.HUOIxI$8h'Q7?yH'< EMM$'FA! l$ V}r   c                     U R                   R                  [        R                  La  [	        U R                   R                  5      $ g)z>
Rarely used attribute. You're probably looking for dialogue.
r   )r   r5   r   rE   r   r   s    r   r5   AssSubtitle.textH  s.    
 88==+%dhhmm44r   r   N)r   r   r   r   r   ra   r   rS   r   r5   r   r   r   r   rT   rT     sJ    G   # #J  r   rT   )r   cython.cimports.cpythonr   r   cython.cimports.libc.stdintr   r   cython.cimports.libc.stringr   r   cclassr
   objectr*   r    cfuncr   r   r$   r   r   rT   r   r   r   <module>r      s	    I 9 6 9 9 9
    M M M` <[ < < < <$ C C C< 'X ' 'T P P P" >( > >r   