
    C1i                         S SK r S SKJr  S SKJrJr  S SKJr  S SK	J
r
  S SKJrJr  S SKJr  S SKJrJr  \ R&                   " S	 S
\5      5       rg)    N)libav)
ByteSource
bytesource)	err_check)Packet)SubtitleProxySubtitleSet)PyBytes_FromStringAndSize)memcpystrlenc                       \ rS rSr\S\S-  4S j5       r\R                  S\S-  SS4S j5       rSS jrS\	S\
4S	 jr\R                  S
\
S-  4S j5       r\R                  S
\
4S j5       rSrg)SubtitleCodecContext   returnNc                 6   U R                   R                  [        R                  :X  d  U R                   R                  S::  a  g[        [        R                  " [        R                  U R                   R                  5      U R                   R                  5      $ )zAGet the subtitle header data (ASS/SSA format for text subtitles).r   N)ptrsubtitle_headercythonNULLsubtitle_header_sizer
   castp_charselfs    S/home/james-whalen/.local/lib/python3.13/site-packages/av/subtitles/codeccontext.pyr   $SubtitleCodecContext.subtitle_header   se     HH$$3xx,,1(KKtxx'?'?@HH))
 	
    datac                    UcP  [         R                  " [        R                  " U R                  R
                  5      5        SU R                  l        O[        U5      n[        R                  " [        R                  [         R                  " U R                  R
                  UR                  [         R                  -   5      5      U R                  l        U R                  R
                  (       d  [        S5      e[        U R                  R
                  UR                  UR                  5        UR                  U R                  l        SU l        g)zSet the subtitle header data.Nr   zCannot allocate subtitle_headerT)libav_freepr   addressr   r   r   r   r   p_uchar
av_realloclengthAV_INPUT_BUFFER_PADDING_SIZEMemoryErrorr   subtitle_header_set)r   r   sources      r   r   r      s     <LL(@(@AB,-DHH)%F'-{{HH,,MMC$D$DD(DHH$ 88++!"CDD488++VZZG,2MMDHH)#' r   c                     U R                   (       aQ  U R                  (       a?  [        R                  " [        R
                  " U R                   R                  5      5        g g g )N)r   r(   r    r!   r   r"   r   r   s    r   __dealloc__ SubtitleCodecContext.__dealloc__0   s7    8800LL(@(@AB 18r   subtitlec                 t   U R                   R                  (       d  [        S5      eU R                  SS9  Sn[	        UR
                  R                  R                  5       H  nUR
                  R                  R                  U   nUR                  [        R                  :w  a  U[        UR                  5      -  nUR                  [        R                  :w  d  M|  U[        UR                  5      -  nM     US-  n[        R                  " [        R                  [         R"                  " U5      5      nU[        R                  :X  a  [%        S5      e[         R&                  " U R                  UU[        R(                  " UR
                  R                  5      5      nUS:  a"  [         R*                  " U5        [-        US5        [/        U5      n[1        UR                  R2                  XV5        [         R*                  " U5        UR
                  R                  R4                  UR                  l        UR
                  R                  R4                  UR                  l        UR
                  R                  R8                  UR
                  R                  R:                  -
  UR                  l        U$ )z
Encode a SubtitleSet into a Packet.

Args:
    subtitle: The SubtitleSet to encode

Returns:
    A Packet containing the encoded subtitle data
z Cannot encode with unknown codecFstrictr   i   z)Failed to allocate subtitle encode bufferzavcodec_encode_subtitle())codecr   
ValueErroropenrangeproxystruct	num_rectsrectsassr   r   r   textr   r#   r    	av_mallocr'   avcodec_encode_subtitler"   av_freer   r   r   r   ptsdtsend_display_timestart_display_timeduration)r   r-   buf_sizeirectbufretpackets           r   encode_subtitle$SubtitleCodecContext.encode_subtitle4   s    zz~~?@@			 #$x~~,,667A>>((..q1Dxx6;;&F488,,yyFKK'F499-- 8 	D$kk&..#--:QR&++IJJ55HHNN8>>001	
 7KKc67vzz)C!..22

!..22

NN!!22nn##667 	


 r   rH   c           	      .   Uc  [        S5      e[        5       nSn[        [        R                  " U R
                  [        R                  " UR                  5      [        R                  " U5      UR
                  5      5        U(       a  [        U5      $ / $ )Nzpacket cannot be Noner   )
RuntimeErrorr   r   r    avcodec_decode_subtitle2r   r   r"   r6   r	   r   rH   r5   	got_frames       r   _send_packet_and_recv*SubtitleCodecContext._send_packet_and_recvj   st    >677, !	((u||,y)

		
 u%%	r   c           	      z   U R                   R                  (       d  [        S5      eU R                  SS9  [	        5       nSn[        [        R                  " U R                  [        R                  " UR                  5      [        R                  " U5      UR                  5      5        U(       a  [        U5      $ g)z,
Returns SubtitleSet if you really need it.
zcannot decode unknown codecFr/   r   N)r1   r   r2   r3   r   r   r    rM   r   r"   r6   r	   rN   s       r   decode2SubtitleCodecContext.decode2   s    
 zz~~:;;			, !	((u||,y)

		
 u%%r   )r(   )r   N)__name__
__module____qualname____firstlineno__propertybytesr   setterr+   r	   r   rI   r   cfuncrP   ccallrS   __static_attributes__ r   r   r   r      s    

 

 

 (EDL (T ( (*C4 4 4l \\FTM  ( \\f  r   r   )r   cython.cimportsr   r    cython.cimports.av.bytesourcer   r   cython.cimports.av.errorr   cython.cimports.av.packetr   %cython.cimports.av.subtitles.subtitler   r	   cython.cimports.cpython.bytesr
   cython.cimports.libc.stringr   r   cclassCodecContextr   r_   r   r   <module>ri      s?     ( @ . , L C 6 K< K Kr   