
    djX                         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mZ e j         G d
 de                      ZdS )    N)libav)
ByteSource
bytesource)CodecContext)	err_check)Packet)SubtitleProxySubtitleSet)PyBytes_FromStringAndSize)memcpystrlenc                       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dS )SubtitleCodecContextreturnNc                     | j         j        t          j        k    s| j         j        dk    rdS 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    T/home/agentuser/manim-venv/lib/python3.11/site-packages/av/subtitles/codeccontext.pyr   z$SubtitleCodecContext.subtitle_header   s[     H$33x,114(Ktx'?@@H)
 
 	
    datac                    |=t          j        t          j        | j        j                             d| j        _        nt          |          }t          j        t          j	        t          j
        | j        j        |j        t           j        z                       | j        _        | j        j        st          d          t          | j        j        |j        |j                   |j        | j        _        d| _        dS )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   z$SubtitleCodecContext.subtitle_header   s     <L(@AABBB,-DH))%%F'-{H,MC$DD ( (DH$ 8+ E!"CDDD48+VZGGG,2MDH)#'   r   c                     | j         r9| j        r4t          j        t	          j        | j         j                             d S d S d S N)r   r'   r   r    r   r!   r   r   s    r   __dealloc__z SubtitleCodecContext.__dealloc__1   sU    8 	C0 	CL(@AABBBBB	C 	C 	C 	Cr   subtitlec                 <   | j         j        st          d          |                     d           d}t	          |j        j        j                  D ]q}|j        j        j        |         }|j	        t          j        k    r|t          |j	                  z  }|j        t          j        k    r|t          |j                  z  }r|dz  }t          j        t          j        t!          j        |                    }|t          j        k    rt%          d          t!          j        | j        ||t          j        |j        j                            }|dk     r$t!          j        |           t-          |d           t/          |          }t1          |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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_subtitlez$SubtitleCodecContext.encode_subtitle5   s    z~ 	A?@@@			 #$x~,677 	. 	.A>(.q1Dx6;&&F48,,,yFK''F49---D$k&.#-:Q:QRR&+IJJJ5HN8>011	
 
 77Kc6777vzS)))C!.2
!.2
N!2n#67 	

 r   rG   c           	         | j         j        st          d          |t          d          |                     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 codecNzpacket cannot be NoneFr.   r   )r0   r   r1   RuntimeErrorr2   r	   r   r   avcodec_decode_subtitle2r   r!   r5   listr
   r   rG   r4   	got_frames       r   decodezSubtitleCodecContext.decodek   s     z~ 	<:;;;>6777			, !	(u|,,y))
	 	
 	
 	
  	,E**+++	r   c           	      X   | j         j        st          d          |                     d           t	                      }d}t          t          j        | j        t          j	        |j
                  t          j	        |          |j                             |rt          |          S dS )z<
        Returns SubtitleSet if you really need it.
        rJ   Fr.   r   N)r0   r   r1   r2   r	   r   r   rL   r   r!   r5   r
   rN   s       r   decode2zSubtitleCodecContext.decode2   s    
 z~ 	<:;;;			, !	(u|,,y))
	 	
 	
 	
  	&u%%%tr   )r   Nr*   )__name__
__module____qualname__propertybytesr   setterr+   r
   r   rH   r   ccallrP   rR    r   r   r   r      s	       

 

 

 

 X

 (EDL (T ( ( ( (*C C C C4 4 4 4 4 4l \ 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   r   cclassr   rZ   r   r   <module>rd      s     ( ( ( ( ( ( < < < < < < < < 9 9 9 9 9 9 . . . . . . , , , , , , L L L L L L L L C C C C C C 6 6 6 6 6 6 6 6 Q Q Q Q Q< Q Q Q Q Qr   