
    \j                         d dl Z d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZ d d	lmZ e j(                  e j*                   G d
 de                    Zy)    N)libav)
ByteSource
bytesource)CodecContext)	err_check)Packet)SubtitleProxySubtitleSet)PyBytes_FromStringAndSize)memcpyc                       e Zd Zededz  fd       Zej                  dedz  ddfd       ZddZdede	fdZ
ej                  dd	e	dz  fd
       Zej                  d	e	fd       Zy)SubtitleCodecContextreturnNc                 0   | j                   j                  t        j                  k(  s| j                   j                  dk  ryt        t        j                  t        j                  | j                   j                        | j                   j                        S )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    L/root/.hermes/venv/lib/python3.12/site-packages/av/subtitles/codeccontext.pyr   z$SubtitleCodecContext.subtitle_header   se     HH$$3xx,,1(KKtxx'?'?@HH))
 	
    datac                    |Ut        j                  t        j                  | j                  j
                               d| j                  _        d| _        yt        |      }t        j                  t        j                  t        j                  | j                  j
                  |j                  t         j                  z               | j                  _        | j                  j
                  st        d      t        | j                  j
                  |j                  |j                         t        j                  t        j                  |j                        | j                  _        d| _        y)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   intsubtitle_header_set)r   r   sources      r   r   z$SubtitleCodecContext.subtitle_header   s     <LL(@(@AB,-DHH) $(   %F'-{{HH,,MMC$D$DD(DHH$ 88++!"CDD488++VZZG,2KK

FMM,RDHH)#' r   c                     | j                   rJ| j                  r=t        j                  t	        j
                  | j                   j                               y y y N)r   r'   r   r   r   r    r   r   s    r   __dealloc__z SubtitleCodecContext.__dealloc__2   s7    8800LL(@(@AB 18r   subtitlec                    | j                   j                  st        d      | j                  d       t	        j
                  t        j                  t        j                  d            }|t        j                  k(  r
t               t        j                  | j                  |dt	        j                  |j                  j                              }|dk  r!t        j                  |       t!        |d       t#        |      }t%        |j                  j&                  ||       t        j                  |       |j                  j                  j(                  |j                  _        |j                  j                  j(                  |j                  _        |j                  j                  j,                  |j                  j                  j.                  z
  |j                  _        |S )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stricti   r   zavcodec_encode_subtitle())codecr   
ValueErroropenr   r   r!   r   	av_mallocr   r%   avcodec_encode_subtitler    proxystructav_freer   r   r   r   ptsdtsend_display_timestart_display_timeduration)r   r,   bufretpackets        r   encode_subtitlez$SubtitleCodecContext.encode_subtitle6   sJ    zz~~?@@			$kk&..#--:TU&++-55HHNN8>>001	
 7KKc67vzzS)C!..22

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

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


 r   r?   c           	         | j                   j                  st        d      |t        d      | j	                  d       t               }d}t        t        j                  | j                  t        j                  |j                        t        j                  |      |j                               |rt        t        |            S g S )zDecode a subtitle packet, returning a list of :class:`.Subtitle` objects
        if a subtitle was decoded, or an empty list otherwise.cannot decode unknown codeczpacket cannot be NoneFr.   r   )r0   r   r1   RuntimeErrorr2   r	   r   r   avcodec_decode_subtitle2r   r    r6   listr
   r   r?   r5   	got_frames       r   decodezSubtitleCodecContext.decode_   s     zz~~:;;>677			, !	((u||,y)

		
 E*++	r   c           	      f   | j                   j                  st        d      | j                  d       t	               }d}t        t        j                  | j                  t        j                  |j                        t        j                  |      |j                               |rt        |      S y)z<
        Returns SubtitleSet if you really need it.
        rB   Fr.   r   N)r0   r   r1   r2   r	   r   r   rD   r   r    r6   r
   rF   s       r   decode2zSubtitleCodecContext.decode2z   s    
 zz~~:;;			, !	((u||,y)

		
 u%%r   )r   Nr*   )__name__
__module____qualname__propertybytesr   setterr+   r
   r   r@   r   ccallrH   rJ    r   r   r   r      s     

 

 

 (EDL (T ( (*C' ' 'R \\Vd]  4 \\f  r   r   )r   cython.cimportsr   r   cython.cimports.av.bufferr   r    cython.cimports.av.codec.contextr   cython.cimports.av.errorr   cython.cimports.av.packetr   %cython.cimports.av.subtitles.subtitler	   r
   cython.cimports.cpython.bytesr   cython.cimports.libc.stringr   finalcclassr   rR   r   r   <module>r]      sN     ( < 9 . , L C . D< D  Dr   